在我们的Kerberos设置中,当使用IE 11访问我们的应用程序URL时,Kerberos票证不会随请求一起发送。 但是,当打开兼容模式(在兼容性视图中显示Intranet站点)时,将发送Kerberos票证并且身份验证正常工作。我们正在使用IE 11。 使用开发人员工具时,用户代理字符串从Default更改为Internet Explorer 10,然后也可以。
验证在Chrome上始终可以正常工作。
更新: 我们观察了wireshark上的流量,发现当兼容模式为OFF时,服务器不会挑战客户端进行协商。 但是,当兼容性为ON时,服务器会通过发送401响应来质询客户端。
任何指针都受到高度赞赏。
答案 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 库的开发人员有所帮助。