在 ASP.NET 中使用 Windows 身份验证
Using Windows Authentication in ASP.NET
我正在尝试在我的 ASP.NET 应用程序中使用 Windows 身份验证。每当我尝试查看该应用程序时,它都会将我发送到登录页面。我怎样才能让它工作而不必通过浏览器手动登录?
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>
更新 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>
- 打开 IIS (Windows + R 'inetmgr')
- Select IIS 服务器(根节点)
- 双击 - 'Authentication'
- Windows 身份验证 - 右键单击并 select 'Enable'
- 表单身份验证 - 右键单击并 select 'Disable'
- 重新启动 IIS 服务器
Windows 使用 IISExpress 进行身份验证
更新您的 web.config
确保您的 web.config 文件既启用 windows 身份验证又拒绝匿名身份验证。如果应用通过匿名身份验证,HttpContext.Current.User.Identity.Name
将为空白。您的配置应如下所示:
<authentication mode="Windows" />
<authorization>
<deny users="?"/>
</authorization>
错误 401.2 未经授权
有时,您可能会收到错误 401.2 Unauthorized: Logon failed due to server configuration error
。如果这样做,请根据您提供的凭据验证您是否有权查看此目录或页面。还要确保您在 Web 服务器上启用了身份验证方法。
正在更新applicationhost.config
您可能还会发现必须更新 IISExpress applicationhost.config 文件(别担心 – 我也不知道)。这本质上是 IIS 配置工具的文件版本,您可以在其中配置 Web 服务器本身。查找 applicationhost.config
文件可能很棘手。它可能在:
%userprofile%\documents\iisexpress\config\applicationhost.config
或
%userprofile%\my documents\iisexpress\config\applicationhost.config
找到后,更新以下行(特别注意 enabled=true
):
<windowsAuthentication enabled="true">
<providers>
<add value="Negotiate" />
<add value="NTLM" />
</providers>
</windowsAuthentication>
我们对几乎所有的 Intranet 应用程序都使用 Windows 身份验证,包括 SharePoint。如果浏览器未自动将 Windows 凭据自动发送到站点,员工必须登录。
在 IE 上,这是浏览器配置的问题。我认为还有一些方法可以配置 Chrome 和 Firefox 自动发送 Windows 登录。我认为 Chrome 会像 IE 一样遵循 Window 的互联网设置(在客户端)。尝试将用户身份验证选项设置为 "Automatic Logon with current username and password"。
请参阅下面的屏幕截图以了解其位置。
另请注意,这涉及用户的浏览器向应用程序发送 Windows 令牌。应用程序必须了解并信任此令牌的来源,这将在用户和应用程序所在的 "domain" 的支持下工作。我认为它可以在一台机器上工作(当你调试时), 但如果你想让它在网络上的多台计算机上工作,你需要考虑创建一个域。创建域的典型方法是 Active Directory。
告诉我。
我可以通过删除协商提供程序使其正常工作。
<windowsAuthentication enabled="true">
<providers>
<add value="NTLM" />
</providers>
</windowsAuthentication>
在 VS 2017 中调试我的 Web 应用程序时,我发现我需要更新 [解决方案路径]\.vs\config\applicationhost.config。我将身份验证部分替换为:
<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>
更多信息:
我正在尝试在我的 ASP.NET 应用程序中使用 Windows 身份验证。每当我尝试查看该应用程序时,它都会将我发送到登录页面。我怎样才能让它工作而不必通过浏览器手动登录?
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>
更新 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>
- 打开 IIS (Windows + R 'inetmgr')
- Select IIS 服务器(根节点)
- 双击 - 'Authentication'
- Windows 身份验证 - 右键单击并 select 'Enable'
- 表单身份验证 - 右键单击并 select 'Disable'
- 重新启动 IIS 服务器
Windows 使用 IISExpress 进行身份验证
更新您的 web.config
确保您的 web.config 文件既启用 windows 身份验证又拒绝匿名身份验证。如果应用通过匿名身份验证,HttpContext.Current.User.Identity.Name
将为空白。您的配置应如下所示:
<authentication mode="Windows" />
<authorization>
<deny users="?"/>
</authorization>
错误 401.2 未经授权
有时,您可能会收到错误 401.2 Unauthorized: Logon failed due to server configuration error
。如果这样做,请根据您提供的凭据验证您是否有权查看此目录或页面。还要确保您在 Web 服务器上启用了身份验证方法。
正在更新applicationhost.config
您可能还会发现必须更新 IISExpress applicationhost.config 文件(别担心 – 我也不知道)。这本质上是 IIS 配置工具的文件版本,您可以在其中配置 Web 服务器本身。查找 applicationhost.config
文件可能很棘手。它可能在:
%userprofile%\documents\iisexpress\config\applicationhost.config
或
%userprofile%\my documents\iisexpress\config\applicationhost.config
找到后,更新以下行(特别注意 enabled=true
):
<windowsAuthentication enabled="true">
<providers>
<add value="Negotiate" />
<add value="NTLM" />
</providers>
</windowsAuthentication>
我们对几乎所有的 Intranet 应用程序都使用 Windows 身份验证,包括 SharePoint。如果浏览器未自动将 Windows 凭据自动发送到站点,员工必须登录。
在 IE 上,这是浏览器配置的问题。我认为还有一些方法可以配置 Chrome 和 Firefox 自动发送 Windows 登录。我认为 Chrome 会像 IE 一样遵循 Window 的互联网设置(在客户端)。尝试将用户身份验证选项设置为 "Automatic Logon with current username and password"。
请参阅下面的屏幕截图以了解其位置。
另请注意,这涉及用户的浏览器向应用程序发送 Windows 令牌。应用程序必须了解并信任此令牌的来源,这将在用户和应用程序所在的 "domain" 的支持下工作。我认为它可以在一台机器上工作(当你调试时), 但如果你想让它在网络上的多台计算机上工作,你需要考虑创建一个域。创建域的典型方法是 Active Directory。
告诉我。
我可以通过删除协商提供程序使其正常工作。
<windowsAuthentication enabled="true">
<providers>
<add value="NTLM" />
</providers>
</windowsAuthentication>
在 VS 2017 中调试我的 Web 应用程序时,我发现我需要更新 [解决方案路径]\.vs\config\applicationhost.config。我将身份验证部分替换为:
<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>
更多信息: