【发布时间】:2020-08-04 12:07:34
【问题描述】:
Windows Server 2008 R2,IIS 7.5,在默认站点上实现 Windows 身份验证,在本地 Intranet 站点上实现数十个经典 ASP 和 asp.NET 应用程序。任何访问该站点的用户都已经是该域中经过身份验证的用户。服务器变量 AUTH_USER 将用于查询用户可以访问的应用程序的 SQL 表。
服务器级别设置(身份验证):
- 扩展保护关闭
- 启用内核模式身份验证 - 选中
- 提供商 - NTLM 然后协商
- 已禁用表单、匿名和模拟
网站设置(身份验证):
- 同上
应用程序池
- DefaultAppPool .NET Framework v2.0 集成网络服务标识
- 经典 .NET AppPool .NET Framework v2.0 经典 ApplicationPoolIdentity 身份
- ASP.NET v4.0 经典 .NET Framework v4.0 经典 ApplicationPoolIdentity 身份
- ASP.NET v4.0 32Bit .NET Framework v4.0 集成 ApplicationPoolIdentity 身份
- ASP.NET v4.0 .NET Framework v4.0 集成的ApplicationPoolIdentity 身份
期望的行为 - 用户打开网站,不提示输入用户名和密码,并自动进行身份验证并显示适合其 ID 的菜单。显示指向同一 IIS 实例上的其他应用程序的超链接。用户单击超链接并被带到应用程序,所有这些都不会被提示输入 Windows 用户名和密码。
会发生什么 - 当 IIS 服务器重新启动时,用户第一次访问该站点时,系统会提示他们输入 Windows 用户名和密码。如果输入信息(或单击取消按钮),菜单仍会显示。后续应用程序在重新启动后首次访问时也会提示输入用户名和密码,如果用户单击取消(或输入登录信息),他们将被带到该应用程序。不会再次提示用户访问相同站点的后续访问。但是,当服务器重新启动时,会如上所述提示用户。
在 W3SVC 日志文件中,第一个结果是 401.1 -2146893042,第二个结果是 401.2.5。
我确定肯定会有 IIS 配置设置、权限、缓存等或其他一些被忽略的调整。访问站点时(IE 11),AUTH_USER 正确,用户的应用程序列表也正确。
为什么提示输入用户名和密码,并且只有在网络服务器重新启动后才会这样做?还有,为什么在提示符下点击取消按钮也会显示菜单?
【问题讨论】:
-
-2146893042 只是意味着 IIS 服务器没有收到任何用户凭据。你能通过先将 NTLM 切换到 Kerberos 来解决它吗?
-
另外,你对system.webServer/security/authentication/windowsAuthentication做了什么改动吗?
-
@JokiesDing - Kerberos 的切换 -> NTLM 似乎已经解决了这个问题。如果您将其发布为“答案”,我会选择它。感谢您帮助解决了我几天来一直遇到的问题!
-
我很高兴该解决方案解决了您的问题。祝你有美好的一天。
标签: asp.net iis asp-classic iis-7.5 windows-authentication