浏览器未将在深层 url 上设置的“授权”标头发送到根 url

vea*_*top 5 http basic-authentication

当我在某个 URL 上向用户询问 HTTP 基本身份验证时,浏览器Authorization仅发送此 URL 和其他一些 URL 的标头。

用 PHP 编写的测试用例脚本:http : //testauth.veadev.tk/

有三个 URL 可以要求提供凭据(您可以使用任何随机值)。注销链接(在浏览器身份验证表单中按“取消”按钮后删除当前凭据,不适用于 IE)。链接到根 URL 和一些测试更深的 URL。

问题:

  1. 为什么浏览器不在URL发送Authorization标头,/如果HTTP/1.0 401 Unauthorized是在 发送的/system/dev重复:打开干净的http://testauth.veadev.tk/,单击Auth2,输入任何凭据,之后您将被转发到/。您会看到Auth: null这意味着浏览器没有发送凭据标头。

  2. 为什么浏览器Authorization/ifHTTP/1.0 401 Unauthorized发送时发送 标头/dev重复:打开干净的http://testauth.veadev.tk/,单击Auth1,输入任何凭据,之后您将被转发到/。您会看到类似的内容Auth: string 'Basic dHQ6dHQ=' (length=14),这意味着凭据标头是由浏览器发送的。

  3. 如果您重复第一个案例,然后单击Auth1您将在Root所有其他页面上获得凭据。为什么?

  4. 如果您单击Auth3( /some/deep/and/long/url),您将在Page3( /some/deep/and/long/3)处获得凭据,而在其他任何地方都没有。为什么?

要清除证书状态测试之间或者重新启动浏览器或点击LogoutCancel以验证形式Root即可返回(火狐,谷歌Chrome)。

发送Authorizationheader的规则是什么?

Mic*_*ael 1

RFC 2617,第 2 节指出:

客户端应该假设请求 URI 的路径字段中最后一个符号元素的深度或更深的所有路径也在当前挑战的基本领域值指定的保护空间内。客户端可以抢先发送相应的授权标头以及对该空间中资源的请求,而不会收到来自服务器的另一个质询。

如果您使用 Digest Challenge,第 3.2 节规定您可以domainWWW-Authenticate标头中指定 来指示保护空间是什么。我会尝试将其设置为类似的东西domain=/。我不确定这是否适用于基本授权,但尝试一下也没什么坏处;如果没有,摘要授权的使用并不困难,而且更安全。