20

I'm trying to use Windows Authentication in my ASP.NET application. Whenever I try to view the app it sends me to a login page. How can I make it work without having to manually login via the browser?

web.config

  <system.web>
    <authentication mode="Windows"></authentication>
    <anonymousIdentification enabled="false"/>
    <authorization>
      <deny users="?" />
      <allow users="*" />
    </authorization>
    <customErrors mode="Off"></customErrors>
    <identity impersonate="true"></identity>
    <compilation debug="true" targetFramework="4.0" />
    <httpRuntime />
  </system.web>

error after updating IIS Express

Most likely causes:
No authentication protocol (including anonymous) is selected in IIS.
Only integrated authentication is enabled, and a client browser was used that does not support integrated authentication.
Integrated authentication is enabled and the request was sent through a proxy that changed the authentication headers before they reach the Web server.
The Web server is not configured for anonymous access and a required authorization header was not received.
The "configuration/system.webServer/authorization" configuration section may be explicitly denying the user access.

applicationhost.config

<authentication>
  <anonymousAuthentication enabled="false" />
  <basicAuthentication enabled="false" />
  <clientCertificateMappingAuthentication enabled="false" />
  <digestAuthentication enabled="false" />
  <iisClientCertificateMappingAuthentication enabled="false">
  </iisClientCertificateMappingAuthentication>

  <windowsAuthentication enabled="true">
    <providers>
      <add value="Negotiate" />
      <add value="NTLM" />
    </providers>
  </windowsAuthentication>
</authentication>
8
  • support.microsoft.com/en-us/kb/323176 Commented Apr 29, 2016 at 19:44
  • 2
    In IIS you need to turn off Anonymous Authentication and enable Windows Authentication. Commented Apr 29, 2016 at 19:50
  • @user469104 I get the error above after configuring IIS express. Commented Apr 29, 2016 at 20:10
  • What browser are you using? Commented Apr 29, 2016 at 20:14
  • 3
    Entering a login page does not mean that Windows authentication failed. Learn how to use a tool such as Fiddler and it would tell you much more. Commented May 1, 2016 at 14:41

5 Answers 5

22

Windows Authentication with IISExpress

Update your web.config

Make sure your web.config file both enables windows authentication and also denies anonymous authentication. HttpContext.Current.User.Identity.Name will be blank if the app falls through to anonymous authentication. Your config should look something like this:

<authentication mode="Windows" />
<authorization>
    <deny users="?"/>
</authorization>

Error 401.2 Unauthorized Sometimes, you might get the error 401.2 Unauthorized: Logon failed due to server configuration error. If you do, verify that you have permission to view this directory or page based on the credentials you supplied. Also make sure you have the authentication methods enabled on the Web server.

Updating applicationhost.config

You also might find you have to update the IISExpress applicationhost.config file (dont’ worry – I didn’t know it either). This is essentially the file version of the IIS configuration tool, where you can configure the web server itself. Finding the applicationhost.config file can be tricky. It might be in:

%userprofile%\documents\iisexpress\config\applicationhost.config

or

%userprofile%\my documents\iisexpress\config\applicationhost.config

Once you find it, update the following lines (paying special attention to enabled=true):

<windowsAuthentication enabled="true">
    <providers>
        <add value="Negotiate" />
        <add value="NTLM" />
    </providers>
</windowsAuthentication>

This is the article

Sign up to request clarification or add additional context in comments.

5 Comments

When debugging in VS 2017, I found I needed to update [solution path]\.vs\config\applicationhost.config. I replaced the authentication element with:
This solution worked for me, but I needed to update the config in the solution (as @dajo said) rather than the one given by the OP
There is another config file in C:\Program Files\IIS Express\AppServer, no idea how all these work with each other so just changed them all and that seemed to work!
@dajo Thanks. You came with the solution for me here.
Also check your csproj.user file.
11
+25

We use Windows authentication for almost all of our intranet apps, including SharePoint. Employees must login if their browser doesn't automatically send their Windows credentials automatically to the site.

On IE, this is a matter of the browser's configuration. I think there are also ways to configure Chrome and Firefox to send Windows login automatically. I think Chrome will follow Window's internet settings (on the client) just like IE. Try to set the User Authentication options to "Automatic Logon with current username and password".

See below screenshot for an illustration to where that is.

enter image description here

Also note that this involves the user's browser sending a Windows Token to the application. The application must understand and trust the source of this token, and this would work with the support of a "domain" in which both the user and application reside in. I think it will work on a single machine (while you are debugging), but if you want this to work on multiple computers on a network, you need to look into creating a domain. A typical way to create a domain is Active Directory.

Let me know.

Comments

9

When debugging my web app in VS 2017, I found I needed to update [solution path]\.vs\config\applicationhost.config. I replaced the authentication section with:

        <authentication>
          <anonymousAuthentication enabled="false" userName="" />

          <basicAuthentication enabled="false" />

          <clientCertificateMappingAuthentication enabled="false" />

          <digestAuthentication enabled="false" />

          <iisClientCertificateMappingAuthentication enabled="false">
          </iisClientCertificateMappingAuthentication>

          <windowsAuthentication enabled="true">
            <providers>
              <add value="Negotiate" />
              <add value="NTLM" />
            </providers>
          </windowsAuthentication>

        </authentication> 

More here: https://stackoverflow.com/a/4813716/555142

3 Comments

This answer applies if the web application has been run prior to altering the ApplicationHost.config under the user profile. If the ApplicationHost.config under the user profile is ammended before the .vs folder is created for the web application then this isn't necessary
After wasting ~half a day enabling literally everything in %userprofile%\documents\iisexpress\config\applicationhost.config, I modified this file too and now it works. Thanks!
I had the same problem as gyozo kudor (see that comment)
4
  1. Open IIS (Windows + R 'inetmgr')
  2. Select the IIS Server (Root Node)
  3. Double Click - 'Authentication'
  4. Windows Authentication - Right-click and select 'Enable'
  5. Forms Authentication - Right-click and select 'Disable'
  6. Restart the IIS Server

1 Comment

I know i'm a bit late for this one but you need to disable all other types of authentications and keep only Windows Authentication.
3

I was able get it working by removing the negotiate provider.

  <windowsAuthentication enabled="true">
    <providers>
      <add value="NTLM" />
    </providers>
  </windowsAuthentication>

1 Comment

You could have also just changed the ordering such that NTLM was before Negotiate

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.