21

I have an ASP.NET website running on Windows Server R2 in a corporate network, using Windows Authentication.

  • The app pool of the website is using a domain account and in Integrated pipeline mode.
  • The authentication is set Windows Authentication, all other authentication modes are disabled.

However, this does not work. Every time I access the website, it pops up a dialog asking for user name and password. I enter the correctly domain user name and password, but it does not continue--the windows pops up again. After three times, it fails and displays a white page. I tried with many different browsers, bu all of them fail. I asked some colleagues to try and they all got failure, too.

I cannot figure out why this error is happening and tried many ways to fix it with no luck. I think it is very strange. However, finally I found a way to fix this problem, this is the most strange part of the problem: I edit the "Physical path" in "Basic Settings" of the website, I just point it to another healthy website, for instance, %SystemDrive%\inetpub\wwwroot, then I try to browse the website, very good, it runs well and displays the default page (iisstart.htm). It looks like it is not very helpful, but then I change the physical path back to my website; suddenly everything goes well -- the windows authentication works! I do not know why it helps, but I am happy with this result -- it fixes my problem though I do not know what the heck is happening.

The happy time is always short, several days later, the server got some patches and restarted, the website can't work again. And again, I can fix the problem using the trick above.

I do not like this! I do not like doing this stupid trick every time IIS resets or the server restarts.

Is there anyone who has some ideas on why windows authentication fails, and why the aforementioned trick can fix it, and why after an IIS reset it fails again?

ErikE
  • 48,881
  • 23
  • 151
  • 196
user378895
  • 281
  • 1
  • 2
  • 7
  • Maybe check the security properties of the physical folder where your app is located can be a point to start. And also take a look at the security properties of the folder where the other app is located and check for differences. – Padel Jun 29 '10 at 11:45
  • I've thought about that too. For instance, I copied my app to an a new folder, I set the folder with exactly same security property. Then I created a new website on the new folder and make it work by aforementioned method. Then I pointed my old webstie on this new folder, again, the original problematic website works. Form this aspect, I exclude the possibility that the website folder security property has problem(it is just my guess). – user378895 Jun 30 '10 at 01:22

8 Answers8

13

First off, THANK YOU for creating this post. I have the exact same issue and could not find anyone else without posting the obvious fixes that were of no avail to me. I had been working on this for almost two weeks

To assist the next poor soul that encounters this issue and post, I hope my extra tidbits help.

Your initial solution did not fix my issue in my case, but it did prove that it was custom error page related. After pasting in your code into web.config my problem got worse and I was not able to debug or launch the page (had 500 internal server error related to web.config)

BUT finally what I did was go into the IIS Console and remove all of my custom error pages. It still did not work as had hoped. BUT, I also found entries for ASP.NET ".NET Custom Errors" in the top half of the site console (and the "custom errors" tag in web.config). I had old entries in there and removed them via console, and YESSSS, my site came back to normal with Windows Authentication.

I have since recreated the IIS Custom Errors and I am still up and running as designed.

SO to anyone else that may have this issue, check both ASP.NET Custom Errors AND IIS Custom Errors settings. Maybe there is a conflict, I dont know, but in my case having only the IIS pages set fixed me up (for now :-) )

Steve Fink
  • 131
  • 1
  • 4
7

I just found it seems caused by custome 401 error pages under "Error Pages". I set it to execute an URL when the status code is 401 in my web.config, it looks like:

 <httpErrors errorMode="Custom">
 <remove statusCode="401" subStatusCode="-1"/>
    <error statusCode="401" path="/Error/AccessDenied" responseMode="ExecuteURL"/>
 </httpErrors>

Then every time I reset IIS and try to access this website, the problem appears. If I delete it in Web.Config or delete from IIS console, then the problem disappears, what is more funny is another experiment: after I deleted this settings and have been successful opening the website, I added this setting back. Everything works very well. Every domain user can access this website, those that failed passing authorization get the customer error page.

So my solution now is I removed this setting in my Web.Config, every time I reset IIS or restart the server, the server admin need to hit the website first, and then add this customer error page in IIS console.

I feel this is a bug of II7.5 on Windows Server 2008 R2.

user378895
  • 281
  • 1
  • 2
  • 7
7

I was also struggling with this same issue all my day. I am using windows authentication and Custom error setting in web.config for 401 errors. After I reset the IIS, the website stop accepting domain users and windows authentication pop up reappear again and again.

I added remove tag in the web.config file with Sub status code.

<httpErrors>
          <remove statusCode="401" subStatusCode="-1" />
          <remove statusCode="401" subStatusCode="1" />
            <error statusCode="401" subStatusCode="-1" path="/Custom401.aspx" responseMode="ExecuteURL" />          
            <error statusCode="401" subStatusCode="1" path="/Custom401_1.aspx" responseMode="ExecuteURL" />
        </httpErrors>

Previously remove tag was only present for substatus code -1 but missing for sub status code "1" . After i added it, everything started woking properly.

In the above post, substatus code is missing for error tag, that could be the cause of the problem. There should be remove tag for all 401 errors there.

Bart
  • 19,692
  • 7
  • 68
  • 77
Gaurav Kumar
  • 71
  • 1
  • 1
3

I just spent a couple of hours digging up a solution to this problem.

Why IE fails yet the other browsers succeed: IE tries to use Kerberos authentication and the other browsers don't try. The others use NTLM.

Solution: In the situation described in the question, a domain account was being used in the App Pool. Simple solution: switch to using the "Network Service" account. More complex solution: You have to register a service principal name (SPN). Read this article (ignore the fact that it is talking about IIS 6 because it also works fine on IIS 7 and 7.5) - You receive an "HTTP Error 401.1 - Unauthorized: Access is denied due to invalid credentials" error message when you try to access a Web site.

I hope this helps. It gave me a headache until I stumbled upon that article. (Thanks to Paul Lynch who posted the link Windows Authentication Failing in IE8 but not Firefox)

grahamesd
  • 4,773
  • 1
  • 27
  • 27
1

I had this same problem on my Windows 2008 R2 server. I did not have custom 401 error pages. I did use aliased server names (via DNS CNAME records and host header entries on the IIS bindings). I registered the SPNs for Kerberos as suggested, but that did not solve the problem. I resolved it by disabling "Kernel Mode Authentication" (click on the server in the IIS tree -> double-click on Authentication under the IIS group -> click on Windows Authentication -> click on Advanced Settings on the Actions pane -> Uncheck the checkbox -> click OK -> run iisreset). The information on that dialog box recommends against disabling Kernel Mode Authentication when using non-standard service accounts for the application pool identity, but that didn't apply to us since we're using the standard ApplicationPoolIdentity identity.

Paul
  • 551
  • 4
  • 2
1

I had the same issue.. Turnes out I should not have messed with my hostfile.. I changed my hostfile and pointed some fancy address to my machine like so:

www.givemeyourcredentials.com    127.0.0.1

I added a binding to the site "www.givemeyourcredentials.com". I typed in the addres in my addressbar and the site prompted my credentials as expected.. Typed in my credentials and got prompted for my credentials again.. And again and again and again..

Turns out: Bind your website to http://localhost when using windows authentication in an IIS site. That did the trick for me.

Hope this helps somebody...

Clark Kent
  • 305
  • 1
  • 4
  • 16
0

The NTLM protocol that is used for Integrated Windows authentication requires a two-step process to authenticate clients. The behavior that is mentioned in the "Symptoms" section occurs when the following conditions are true:

  • The application pool recycles after the first step of the Integrated Windows authentication process.
  • However, the application pool recycles before the second step of the Integrated Windows authentication process.

To work around this behavior and to reduce the frequency of these error messages, configure the application pool to recycle less frequently. To configure application pool recycling, follow these steps:

  1. Click Start, click Run, type inetmgr, and then click OK.
  2. Expand the name of the computer on which you want to configure application pool recycling, and then expand Application Pools.
  3. Right-click the application pool that you want to configure, and then click Properties.
  4. On the Recycle tab, configure one of the metrics so that IIS recycles less frequently.

Note IIS 6 application pools support several metrics. These metrics include the time elapsed, the number of requests, and the specified time to recycle an application pool. If an application pool has a metric that causes the application pool to recycle frequently, you will experience this issue more frequently.

  1. Click OK.

[ Copied from https://support.microsoft.com/en-us/kb/902160 for posterity ]

Shiroy
  • 1,648
  • 1
  • 15
  • 22
0

Add "NT Service\trustedInstaller" to physical folder of the site. Location for this user is local machine name.

Echilon
  • 10,064
  • 33
  • 131
  • 217