我知道有数以千计的人无法使用IIS进行集成Windows身份validation的报告,但他们似乎都导致不适用的网页或我已经尝试过的解决scheme。 我之前已经部署了数十个这样的网站,所以无论是服务器/configuration有什么奇怪的事情发生,或者我一直在考虑这个太久而没有看到明显的。
简而言之,在我的本地机器上,一切正常,但在生产服务器上却分崩离析,据我所知,它的configuration完全相同 。
在本地机器上:
在远程机器上:
最后但并非最不重要的一点,我试图打开FREB 401.2错误,结果似乎没有告诉我任何有用的,我看到的是以下警告:
MODULE_SET_RESPONSE_ERROR_STATUS
ModuleName IIS Web Core
通知2
HttpStatus 401
HttpReason未经授权
HttpSubStatus 2
ErrorCode 2147942405
ConfigExceptionInfo
通知AUTHENTICATE_REQUEST
ErrorCode访问被拒绝。 (0X80070005)
…这似乎只是告诉我,我已经知道(这只是拒绝请求,而不是谈判的凭据)。
跟踪确实表明WindowsAuthentication模块已正确加载,因为有ModuleName
= WindowsAuthentication
(以及其他各种ASP.NET后续事件 – 幸运的是,这里没有有趣的错误或警告)的NOTIFY_MODULE_START
行。
谁能告诉我我可能会在这里失踪?
快速更新:
发送整个Wireshark转储,因为它会显示IP,URL和其他东西,但我对本地主机和远程服务器在Fiddler中的HTTP响应进行了并排比较,我似乎有点不自在 – 事实是什么问题是:
本地主机:
HTTP / 1.1 401未经授权 caching控制:私有 Content-Type:text / html; 字符集= utf-8的 服务器:Microsoft-IIS / 7.5 WWW-Authenticate:协商 WWW-Authenticate:NTLM X-Powered-By:ASP.NET date:2011年12月17日(星期六)23:42:34 GMT 内容长度:6399 代理支持:基于会话的authentication
远程:
HTTP / 1.1 401未经授权 内容types:文本/ HTML 服务器:Microsoft-IIS / 7.5 X-Powered-By:ASP.NET date:2011年12月17日(星期六)23:43:13 GMT 内容长度:1293
除了caching控制之类的一些看似无关紧要的区别之外,主要区别在于远程服务器不会将WWW-Authenticate报头发送回客户端。
所以,我想这个问题缩小到: 当Windows身份validation似乎安装,加载,并独占启用IIS为什么不发送WWW-Authenticate标头?
问题解决了。 我终于决定并排比较模块列表,实际上还有一个缺失。 事实certificate,有两个 Windows身份validation模块:
在服务器上,受pipeWindowsAuthentication
模块在那里,但不是上面突出显示的本地WindowsAuthenticationModule
。 为什么这样configuration的方式是任何人的猜测,但显然如果本地模块没有加载,托pipe模块将愉快地加载和静默失败。
因此,对于将来遇到此问题的读者,请确保您已经加载了这两个模块 ,因为如果其中一个丢失,IIS 不会警告您 。
我们发现这并不一定解决在Windows身份validation下运行的ASP.NET网站上本地开发人员的问题。 我们发现一个registry黑客,禁用回环检查; 这固定它:
registry项 – HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Control \ Lsa
创build一个名为“DisableLoopbackCheck”的值为1的DWORD
您必须重新启动机器才能使设置生效