浏览器在收到 WWW-Authenticate: Negotiate 时挂起

Posted

技术标签:

【中文标题】浏览器在收到 WWW-Authenticate: Negotiate 时挂起【英文标题】:Browser Hangs when receive WWW-Authenticate: Negotiate 【发布时间】:2017-07-14 02:20:03 【问题描述】:

当 Windows7 上的 IE 或 Chrome 收到带有“WWW-Authenticate: Negotiate”标头的响应时,它会挂起几秒钟。

我假设它正在向 KDC 发出网络请求并且请求超时。不过这可能是错误的假设。

服务器keytab 确定浏览器查询哪个KDC?

有什么办法可以调试吗?

谢谢!

【问题讨论】:

【参考方案1】:

要回答您的第一个问题,请避免假设查找 KDC 超时 - 只有网络捕获才能告诉您这一点。虽然它实际上可能正在这样做,但它也可能会故障转移到使用 NTLM,然后因为 Kerberos 在某处被破坏而成功。

要回答您的第二个问题,keytab 不会确定浏览器查询哪个 KDC。 keytab 里面没有任何东西可以做到这一点。我在此答案的底部为您放置了示例 keytab 的图像。现在,被查询的 KDC 由 DNS 控制。该过程只会被 C:\Windows\krb5.ini 中设置的值覆盖 - 如果该文件存在 - 默认情况下它在 Windows 上不存在。要回答您的最后一个问题,您可以使用 Wireshark 捕获进行调试,在 WireShark 搜索字段中过滤“kerberos”以查看 Kerberos 流量可能在做什么或不做什么。这将告诉你所有你需要知道的。

【讨论】:

非常感谢!浏览了您的所有建议,但 Wireshark 完成了这项工作。我发现 KRB5 发送了对错误用户名的请求,然后是大量使用相同错误名称的 LDAP 搜索。我曾经使用没有 krb 名称的 samba 连接到同一个应用服务器的共享驱动器,并且 Windows 以某种方式记住了它。反正问题已经解决了! 干得好。谢谢你回来。

以上是关于浏览器在收到 WWW-Authenticate: Negotiate 时挂起的主要内容,如果未能解决你的问题,请参考以下文章

无法以角度访问 $http 响应中的“WWW-authenticate”标头

如何使用参数(通过 HTTP)向 NTLM 进行身份验证?

PHP www-authenticate基本弹出循环问题

JavaScript/jQuery:无法获得“WWW-Authenticate”响应标头

使用 OWIN 添加多个 WWW-Authenticate 标头

RESTful HTTP API 中的授权,401 WWW-Authenticate