0

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

身份验证在 chrome 上始终可以正常工作。

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

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

4

1 回答 1

0

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

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

IE 11的用户代理字符串有变化。参考这个链接

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

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


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

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

解决方法:
覆盖cas3.5.3维护的用户代理列表,增加IE11的用户代理对应的入口。现在请求得到处理属性并且 Kerberos 登录正常工作。

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

于 2017-01-04T05:22:22.883 回答