首页 > 解决方案 > 摘要式身份验证请求中的 HTTP 无授权字段

问题描述

我的 SOC 上有一个带有摘要式身份验证的 http 服务器。在尝试正确验证服务器时,发送带有 401 代码和 WWW-Authenticate 标头的响应,带有 nonce 和 Digest 模式。但是,在某些主机上,浏览器在它们应该包含的后续请求中不包含带有 nonce 等的授权字段。

这是 Edge 登录尝试:

使用 WWW-Authenticate - https://i.imgur.com/tcw1XYL.png响应。在上面的屏幕中,服务器返回的正确 WWW-Authenticate 字段。

未经授权的请求 - https://i.imgur.com/4z61rU5.png。我希望下一个请求中有授权字段,但没有!

Chrome 尝试类似,只是它立即显示 401 页面而没有登录提示,因为标题中没有授权字段。

Chrome 和 Edge 都是 Windows 10 上的最新 64 位版本。

哪些可能的问题会导致这种行为?

标签: google-chromehttpmicrosoft-edge

解决方案


显然问题是多行 WWW-Authenticate 标头。您可以在屏幕截图中看到标题字段值之间的“/r/n”分隔符(0x0d 0x0a 字节)。

这种多行在原始 RFC 2616 中被允许,然后被较新的 RFC 7230 弃用。有关详细信息和链接,请参阅https://stackoverflow.com/a/31324422/8876135

通过使其成为单行来修复标题字段后,问题就消失了。我仍然不知道为什么完全相同的浏览器在某些主机上的标头存在此问题,但在我的工作/家用 PC 上却完全没问题。


推荐阅读