Aar*_*ght 22 security iis authentication iis-7.5 http-authentication
我知道有数以千计的人在将集成 Windows 身份验证与 IIS 一起使用时遇到问题的报告,但它们似乎都导致网页不适用或我已经尝试过的解决方案。我之前已经部署了几十个这样的站点,所以要么服务器/配置发生了一些奇怪的事情,要么我已经研究了太久而没有看到明显的情况。
简而言之,一切都在我的本地机器上完美运行,但在生产服务器上却崩溃了,据我所知,它具有完全相同的配置。
在本地机器上:
在远程机器上:
最后但并非最不重要的是,我尝试为 401.2 错误打开 FREB,结果似乎没有告诉我任何有用的信息,我看到的只是以下警告:
MODULE_SET_RESPONSE_ERROR_STATUS
ModuleName IIS Web Core
Notification 2 HttpStatus
401
HttpReason Unauthorized
HttpSubStatus 2
ErrorCode 2147942405
ConfigExceptionInfo
Notification AUTHENTICATE_REQUEST
ErrorCode 访问被拒绝。(0x80070005)
...这似乎只是告诉我我已经知道的事情(它只是拒绝请求而不是协商凭据)。
跟踪确实表明 WindowsAuthentication 模块已正确加载,因为有NOTIFY_MODULE_START一行带有ModuleName= WindowsAuthentication(以及其他各种 ASP.NET 后续事件 - [un] 幸运的是,这里没有有趣的错误或警告)。
谁能告诉我我在这里可能会错过什么?
快速更新:
我有点不舒服发送整个 Wireshark 转储,因为它会显示 IP、URL 和其他内容,但我对来自 localhost 和 Fiddler 中的远程服务器的 HTTP 响应进行了并排比较,这似乎相当自我- 明显的问题是什么:
本地主机:
HTTP/1.1 401 未经授权 缓存控制:私有 内容类型:文本/html;字符集=utf-8 服务器:Microsoft-IIS/7.5 WWW-Authenticate:协商 WWW-身份验证:NTLM X-Powered-By: ASP.NET 日期:2011 年 12 月 17 日星期六 23:42:34 GMT 内容长度:6399 代理支持:基于会话的身份验证
偏僻的:
HTTP/1.1 401 未经授权 内容类型:文本/html 服务器:Microsoft-IIS/7.5 X-Powered-By: ASP.NET 日期:2011 年 12 月 17 日星期六 23:43:13 GMT 内容长度:1293
除了一些看似无关紧要的差异(如缓存控制)之外,主要区别在于远程服务器不会将 WWW-Authenticate 标头发送回客户端。
所以,我想这可以将问题缩小到:当 Windows 身份验证似乎已安装、加载和专门启用时,为什么 IIS 不发送 WWW-Authenticate 标头?
Aar*_*ght 15
问题解决了。我最终决定并排比较模块列表,实际上缺少一个。事实证明,有两个Windows 身份验证模块:

在服务器上,托管WindowsAuthentication模块在那里,但不是WindowsAuthenticationModule上面突出显示的本机模块。为什么以这种方式配置是任何人的猜测,但显然如果未加载本机模块,托管模块将愉快地加载并默默地失败。
因此,对于未来遇到此问题的任何读者,请确保您已加载这两个模块,因为如果其中一个模块丢失,IIS将不会向您发出警告。
小智 5
我们发现对于在 Windows 身份验证下运行的 ASP.NET 站点上本地工作的开发人员来说,这不一定解决问题。我们发现了一个禁用环回检查的注册表黑客;这修复了它: -
注册表项 - HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa
创建一个值为 1 的 DWORD,名为“DisableLoopbackCheck”
您必须重新启动机器才能使设置生效
| 归档时间: |
|
| 查看次数: |
48453 次 |
| 最近记录: |