【发布时间】:2015-10-21 14:10:34
【问题描述】:
我已经完成了一个基于 C++ 的 HTTP 服务器(或者换种说法 - 又是一滴水)并且遇到了 HTTP 摘要身份验证的问题。
根据HTTP authentication RFC,在Authentication-Info 标头中使用nextnonce 指令是实现单次使用随机数机制的有效方式。我已经根据 RFC 完成了这项工作,但 Chrome 和 Firefox 似乎都忽略了该指令,并使用初始随机数发出所有进一步的请求,从而触发了不需要的 401 响应。 Firefox 示例说明:
第一个请求 - 我的服务器返回 401 并发出初始随机数 a1f778b2afc8590e4a64f414f663128b
Firefox 成功验证并获得带有Authentication-Info: nextnonce="0b72e74afbcab33a5aba05d4db03b801" 标头的回复
Firefox 发出一个新请求以从返回的 html 中获取图像 - 仍然使用初始随机数 c1587dd7be6251fa715540e0d6121aa5,因此会发送一个带有新随机数的回复和一个表明提供的随机数已过期的标志。
如图所示 - 即使我在第一个请求成功授权时回复 Authentication-Info: nextnonce="0b72e74afbcab33a5aba05d4db03b801",接下来的两个请求仍然使用原始随机数,而不是提供的 nextnonce 值。有没有人有过类似的经历?我肯定做错了什么——尽管 RFC 说客户端 应该 用提供的 nextnonce 值回复,因此这不是强制性的 我非常怀疑最流行的浏览器不使用这个技术。
【问题讨论】:
标签: c++ http-authentication digest-authentication