只有在 IE 中打开兼容模式时才会发送 Kerberos 票证

Kerberos ticket is sent only when compatibilty mode in IE is turned on

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

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

更新: 我们观察了 wireshark 上的流量,发现当兼容模式关闭时,服务器不会向客户端发起协商。 但是,当兼容性打开时,服务器会通过发送 401 响应来挑战客户端。

非常感谢任何指点。

我们终于确定了这个问题的确切根源和解决方案。

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

IE 11 的 User Agent String 有变化。参考这个 Link

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

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

关闭兼容性
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 库的其他开发人员有所帮助。