使用集成身份validation的IIS6 Intranet站点在外部访问时无法加载

我为我的组织开发了几个使用集成身份validation的内部站点。 最终,我们希望这些网站可以通过join域的计算机从外部访问。 在内部networking上,这些网站在域计算机上按预期工作。 当我将笔记本电脑带回家并尝试访问这些网站时,问题就来了。

IIS仅对这两个站点启用了集成身份validation。 当我浏览到使用IE8的网站时,我得到一个用户名/密码提示询问域的凭据。 我可以把它们放进去,它会工作,但目标是使用caching的令牌进行集成身份validation。

接下来我推断IE不会响应集成身份validation请求(NTLM是否适用于此?),除非该网站是可信的。 我试图将该网站添加到受信任的站点,但是我得到了与以前相同的行为。 然后,我将该网站添加到本地Intranet网站,这是奇怪的事情。 我从IE获得一个通用的错误页面,没有错误代码或任何东西。

只是为了装上火狐(我之前设置使用集成身份validation),我把这个新的网站添加到network.automatic-ntlm-auth.trusted-uris 。 令我惊讶的是,我能够毫无问题地加载这些页面,准确地看到了我期望的内容(包括validation集成身份validation的工作情况)。

我目前有点难以置信,因为我不确定从哪里出发。 我希望你们中的一些人能够提供一些见解。


更新05/11/10我按照下面的build议搞乱了Fiddler,并且看到Firefox和IE如何处理页面请求之间的差异。 当我testingInternet Explorer时,它发出一个请求,命中401.2(服务器configuration错误)并死亡。 发生这种情况时没有安全日志条目。 Firefox最初遇到同样的错误,但后来发送另一个请求,authentication成功。

记住最初的testing全部来自networking之外,我在IE8里面看到了成功的身份validation,看起来和Firefox在内部和外部的行为一样。 最初的请求是401.2,然后再发送一个401.1(挑战?),然后是200(成功)。

所以问题似乎是,当从networking外部访问“Intranet”站点时,IE8经历了一个401.2,然后在应用程序(通过其他浏览器测量)继续进行身份validation过程时死亡。

有人可以validation我描述的提琴手活动吗?

对我来说,就像你在IE8上遇到一个“bug”一样,就像微软在这里报告的那样,这里 详细讨论 。

我怀疑,如果您使用AdsUtil.vbs脚本将受影响的目录上的身份validation设置为“NTLM”,而不是默认的“Negotiate,NTLM”,则问题可能会消失。

您可以通过使用Wireshark(或您最喜爱的嗅探器)监视客户端计算机并观察它是否尝试在尝试访问该站点时尝试为域控制器执行NetBIOS广播名称parsing来validation是否看到此行为。

有关我正在使用的NTAuthenticationProviders值的一些背景信息,可以从Microsoft KB215383获得 。 对于IIS6,如果未定义该值,则IIS将其视为“协商,NTLM”。 我的猜测是,你正在运行在默认设置。

您可以使用adsutil.vbs脚本(默认安装在%SystemDrive%\ Inetpub \ AdminScripts中)检查此值。 使用以下命令检查机器上第一个网站的值(显然,在本例中更改path以适合您的实际应用程序):

 cscript adsutil.vbs GET W3SVC/1/Root/NTAuthenticationProviders 

请记住 – 如果未定义该值,那么IIS6将使用其编译的默认设置“Negotiate,NTLM”。

要更改机器上第一个Web站点的根目录的NTAuthenticationProviders值,请使用以下命令:

 cscript adsutil.vbs SET W3SVC/1/Root/NTAuthenticationProviders "NTLM" 

Microsoftbuild议您在设置后再次查询“validation”值。

你有权访问IIS服务器的安全日志吗? 如果是这样,这将帮助您找出集成身份validation为什么与IE8失败。 如果您无法访问日志,则可以使用WebFiddler获取客户端的stream量视图,从而可以比较IE8和FireFox之间的HTTP身份validationstream量。