URL-embedded 凭据

URL-embedded credentials

Wikipedia says HTTP 基本身份验证依赖于 Authorization header 来提供从客户端到服务器的凭据。

但也可以将凭据嵌入 URL:

http(s)://<user>:<password>@<host>/<path>

它是由浏览器解释并转换成 Authorization header 还是直接发送到服务器?

如果您输入带有凭据的 url,用户体验因浏览器和浏览器设置而异。

假设您请求 http://user:pass@example.com/index.html

浏览器请求 http://example.com/index.html,忽略第一个请求的凭据。服务器给出 401 响应,说明需要基本身份验证。 然后根据您可能遇到的浏览器和配置

  • a non-populated username/password 提示输入凭据,忽略 user/pass
  • 提示用户是否以 user (Firefox)
  • 身份登录 example.com
  • 使用凭据自动登录。

然后将使用 Authorization header.

http://example.com/index.html 发出第二个请求

在给定这样的 URL 时自动登录的任何其他客户端正在使用授权 header,基本身份验证无法正常工作。

But it is also possible to embed the credentials in the URL

仅当浏览器在支持 HTTP 时存在错误,通常是故意向后兼容人们误认为这是个好主意的浏览器。

HTTP 方案从来不允许这样做,尽管更普遍的 URI 语法确实允许那里的用户信息。

Is it something that is interpreted by the browser and converted into a Authorization header.

是的。如果服务器发送 401,浏览器将使用该用户名和密码进行回复。至少有一个人曾经先发制人地尝试 Basic,这显然是在现有坏主意之上的一个坏主意。