1

我有一个使用 Windows 身份验证托管 IIS 7 的 Intranet 站点,配置为接受协商。我还将配置设置设置为使用每个连接的 Kerberos(非 NTLM)身份验证:

 <system.webServer>
   <security>
     <authentication>
       <windowsAuthentication authPersistNonNTLM="true" />
     </authentication>
   </security>
 </system.webServer>

现在 Chrome 使用 Kerberos 票证正确地进行了一次身份验证,然后不会在后续请求中发送任何授权标头。

然而,Internet Explorer 确实会随每个请求发送一个大的 Kerberos 票证。服务器正在发回正确的Persist-Auth: true标头。所以 IE 应该知道不要打扰预认证。这种行为至少可以在 Windows 7 64 位的 IE9 和 IE10 中观察到。

这种行为还有其他原因吗?有办法解决吗?

另请注意,我在 IIS7 上使用内核模式并且没有虚拟目录安全性。

如果我有 IE9/IE10 与 NTLM 连接,它不会预先进行身份验证(这是正确的行为)。

我希望有一些神奇的标题可以手动添加到我的服务器响应中,这样 IE 就会正常运行......

4

2 回答 2

2

好吧,看起来 Fiddler 是问题所在。也许 fiddler 结合了我们内部网的一些奇怪的东西?我不知道这里的整个故事...

但是当 Fiddler 捕获流量时,每个 IE 请求都具有所描述的 Kerberos 票证。在 Fiddler 未运行的情况下,IE 的行为是 Chrome,并且每次连接到 Web 服务器时只发送一次票证。

我通过在netsh traceFiddler 运行和不运行的情况下运行两者来发现这一点。

也许在检查您的 Kerberos 身份验证时最好不要使用 Fiddler。如果有人对此了解更多,我将不胜感激。

于 2013-05-23T01:02:54.840 回答
2

您没有提及您为 Intranet 站点使用的 URL 类型 - 您使用的是主机名还是 DNS 别名?它是一个简短的(netbios)名称还是完全限定的名称?在使用这些不同类型的 URL 时,您是否注意到相同的行为?您是否检查过 fiddler 中那些额外的标头是否真的是 Kerberos,或者 SPNEGO 是否正在回退到 NTLM?

Fiddler 确实充当代理服务器;它只能拦截您的流量,因为它向 WinInet 注册为代理。CNAME 和代理以复杂的方式与 Kerberos 交互,这使得很难看到真正发生的事情。使用 CNAME,IE 实际上会为主机名创建一个 Kerberos 票证请求。在混合中添加代理将进一步改变这种行为。如果这是您遇到的问题,它是特定于 Microsoft 产品的,这就是您发现现代浏览器可以正常工作的原因。

通过进行线路跟踪,您做了正确的事情,因为使用代理对 Kerberos 进行故障排除不是一个好主意。

于 2013-10-08T04:43:42.953 回答