我有一个内部网站点托管IIS 7,带有Windows身份验证,配置为接受协商。我还将配置设置设置为使用每个连接的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就会表现正常......
答案 0 :(得分:2)
好吧,看起来Fiddler就是问题所在。也许小提琴手加上我们内联网的奇怪之处?我不知道这里的整个故事......
但是当Fiddler捕获流量时,每个IE请求都有所描述的Kerberos票证。由于Fiddler未运行,IE表现为Chrome,并且每次连接仅向Web服务器发送一次票。
我通过运行Fiddler运行netsh trace
并且没有运行来发现这一点。
也许在检查您的Kerberos身份验证时,最好不要使用Fiddler。如果有人对此有更多了解,我会很感激教育。
答案 1 :(得分:2)
您没有提到您对Intranet站点使用的URL类型 - 您是使用主机名还是DNS别名?它是一个简短的(netbios)名称还是完全合格的?使用这些不同类型的URL时,您是否注意到相同的行为?您是否检查过fiddler中的额外标题是否真的是Kerberos,或者SPNEGO是否回退到NTLM?
Fiddler真的像一个代理服务器;它只能因为它以WinInet作为代理注册而拦截您的流量。 CNAME和代理以复杂的方式与Kerberos交互,这使得很难看到实际发生的事情。使用CNAME,IE实际上会为主机名创建Kerberos票证请求。在混合中添加代理将进一步改变此行为。 如果这是您遇到的问题,则特定于Microsoft产品,这就是您发现现代浏览器正常工作的原因。
您通过执行电线跟踪做了正确的事情,因为使用代理对Kerberos进行故障排除并不是一个好主意。