在IIS 7.5中排除Windows身份validation问题(无挑战)?

我知道有数以千计的人无法使用IIS进行集成Windows身份validation的报告,但他们似乎都导致不适用的网页或我已经尝试过的解决scheme。 我之前已经部署了数十个这样的网站,所以无论是服务器/configuration有什么奇怪的事情发生,或者我一直在考虑这个太久而没有看到明显的。

简而言之,在我的本地机器上,一切正常,但在生产服务器上却分崩离析,据我所知,它的configuration完全相同

在本地机器上:

  • 该机器正在运行Windows 7旗舰版,Service Pack 1,IIS 7.5。
  • 使用IIS和VS Web开发服务器,该站点已经testing成功。
  • 除了 Windows身份validation,IIS站点configuration已禁用所有身份validation方法。
  • 本地机器不在任何域上。
  • 提供商设置是协商和NTLM(不协商:Kerberos)。
  • 扩展保护closures。
  • 所有经过testing的浏览器(IE,Firefox,Chrome)均显示挑战提示,并允许我使用本地Windows帐户login本地域。
  • 所有testing的浏览器也使用不透明的本地IP地址工作 – 所以浏览器本身似乎不关心该网站是“本地”还是“远程”。
  • 我在显示当前login的用户的网页上添加了一个显示行,并且显示了我期望的内容(无论我login的是哪个本地用户)。

在远程机器上:

  • 该服务器正在运行Windows Server 2008 R2,IIS 7.5。
  • 加载网页导致立即 401.2错误: 您无权查看此页由于validation标头无效。 没有挑战提示出现。
  • 除了 Windows身份validation,IIS站点configuration已禁用所有身份validation方法。
  • 远程机器不在任何域上。
  • 提供商设置是协商和NTLM(不协商:Kerberos)。
  • 扩展保护closures。
  • 在远程计算机(远程桌面会话)上,无论域是本地主机还是外部IP地址,Internet Explorer中都会出现相同的错误。
  • 如果我尝试从本地机器查看远程网站,则错误仍然是401,但与401略有不同。没有子代码,文本为: 由于证书无效,访问被拒绝。
  • Windows身份validation IISangular色function安装。
  • WindowsAuthentication模块添加(在服务器级别)。
  • 如果我closuresWindows身份validation并启用基本身份validation,则会发生完全相同的错误。
  • 如果我closuresWindows身份validation并启用匿名(显然),该网站加载。
  • 我已经遵循Microsoft支持上的所有疑难解答步骤: 解决IIS中的HTTP 401错误
  • 我已经尝试了另一个Microsoft支持页面上显示的解决方法 (应该强制NTLM作为唯一的方法)。

最后但并非最不重要的一点,我试图打开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

您必须重新启动机器才能使设置生效