仅当IE中的兼容模式打开时,才会发送Kerberos票证

时间:2016-12-27 13:28:48

标签: internet-explorer kerberos kdc

在我们的Kerberos设置中,当使用IE 11访问我们的应用程序URL时,Kerberos票证不会随请求一起发送。 但是,当打开兼容模式(在兼容性视图中显示Intranet站点)时,将发送Kerberos票证并且身份验证正常工作。我们正在使用IE 11。 使用开发人员工具时,用户代理字符串从Default更改为Internet Explorer 10,然后也可以。

验证在Chrome上始终可以正常工作。

更新: 我们观察了wireshark上的流量,发现当兼容模式为OFF时,服务器不会挑战客户端进行协商。 但是,当兼容性为ON时,服务器会通过发送401响应来质询客户端。

任何指针都受到高度赞赏。

1 个答案:

答案 0 :(得分:0)

最后,我们确定了此问题的确切根本原因和解决方案。

根本原因:
我们正在使用Kerberos的cas 3.5.3实现。该库维护用户代理列表;准确地说是User-Agent字符串的子串。 此列表用于检查浏览器是否兼容Kerberos身份验证。

IE 11的用户代理字符串发生了变化。请参阅此Link

我们正在使用的CAS 3.5.3实现不支持IE 11发送的用户代理字符串(在非兼容模式下)。

两个请求的用户代理字符串之间的差异(IE 11兼容模式ON和OFF)如下:
兼容性为
Mozilla / 4.0(兼容; MSIE 7.0; Windows NT 10.0; WOW64; Trident / 8.0; .NET4.0C; .NET4.0E)

兼容性OFF
Mozilla / 5.0(Windows NT 10.0; WOW64; Trident / 7.0; rv:11.0),如Gecko

第一个用户代理由库处理(它搜索支持的用户代理列表中的“MSIE”字样),而其他代理则被丢弃,因为它不包含单词“MSIE”。 IE 9/10没有出现这个问题,因为它们对应的用户代理包含字符串'MSIE'。

<强>解决方案:
将覆盖由cas3.5.3维护的用户代理列表,并将与IE11的用户代理对应的条目添加到其中。 现在请求获得处理属性,Kerberos登录正常工作。

我希望这对其他开发 cas 库的开发人员有所帮助。