授权

HTTP Authorization 请求标头可用于提供凭据,以对用户代理进行服务器身份验证,从而允许访问受保护的资源。

Authorization 标头通常(但不总是)在用户代理首次尝试在没有凭据的情况下请求受保护的资源后发送。服务器将响应一个401 Unauthorized 消息,其中至少包含一个 WWW-Authenticate 标头。此标头指示可以使用哪些身份验证方案来访问资源(以及客户端使用这些方案所需的任何其他信息)。用户代理应该从提供的方案中选择其支持的最安全的方案,提示用户输入其凭据,然后重新请求资源(包括在 Authorization 标头中编码的凭据)。

此标头将从跨域重定向中剥离。

注意:此标头是 通用 HTTP 身份验证框架 的一部分。它可以与许多 身份验证方案 一起使用。

标头类型 请求标头
禁止的标头名称

语法

http
Authorization: <auth-scheme> <authorization-parameters>

基本身份验证

http
Authorization: Basic <credentials>

摘要身份验证

http
Authorization: Digest username=<username>,
    realm="<realm>",
    uri="<url>",
    algorithm=<algorithm>,
    nonce="<nonce>",
    nc=<nc>,
    cnonce="<cnonce>",
    qop=<qop>,
    response="<response>",
    opaque="<opaque>"

指令

<auth-scheme>

定义如何对凭据进行编码的 身份验证方案。一些更常见的类型是(不区分大小写):BasicDigestNegotiateAWS4-HMAC-SHA256

注意:有关更多信息/选项,请参阅 HTTP 身份验证 > 身份验证方案

除了 <auth-scheme> 之外,其余指令特定于每个 身份验证方案。通常,您需要检查相关规范才能了解这些指令(下面列出了部分方案的密钥)。

基本

<credentials>

根据指定的方案编码的凭据。

注意:有关编码算法的信息,请参阅以下示例:在 WWW-Authenticate 中、在 HTTP 身份验证 中以及在相关规范中。

摘要

<response>

十六进制数字字符串,证明用户知道密码。该算法对用户名和密码、领域、cnonce、qop、nc 等进行编码。规范中对此进行了详细说明。

username

包含指定realm 中用户名的带引号字符串,可以使用纯文本或十六进制表示的哈希码。如果名称包含字段中不允许的字符,则可以使用 username* 代替(而不是“以及”)。

username*

使用 RFC5987 中定义的扩展表示法格式化的用户名。仅当名称无法在 username 中编码且 userhash 设置为 "false" 时才应使用此表示法。

uri

有效请求 URI。有关更多信息,请参阅规范。

realm

请求的用户名/密码的领域(再次,应该与请求的资源的相应 WWW-Authenticate 响应中的值匹配)。

opaque

请求的资源的相应 WWW-Authenticate 响应中的值。

algorithm

用于计算摘要的算法。必须是从请求的资源的 WWW-Authenticate 响应中指定的受支持算法之一。

qop

指示应用于消息的保护质量的令牌。必须与请求的资源的 WWW-Authenticate 响应中指定的一组值中的一个值匹配。

  • "auth":身份验证
  • "auth-int":具有完整性保护的身份验证
cnonce

客户端提供的带引号的 ASCII 字符串值。客户端和服务器都使用它来提供相互身份验证,提供一些消息完整性保护,并避免“已知明文攻击”。有关更多信息,请参阅规范。

nc

Nonce 计数。客户端发送当前 cnonce 值(包括当前请求)的请求的十六进制计数。服务器可以使用重复的 nc 值来识别重放请求。

userhash Optional

如果用户名已哈希,则为 "true"。默认情况下为 "false"

示例

基本身份验证

对于 "Basic" 身份验证,凭据的构建方式是:首先使用冒号 (aladdin:opensesame) 将用户名和密码组合在一起,然后使用 base64 (YWxhZGRpbjpvcGVuc2VzYW1l) 对生成的字符串进行编码。

http
Authorization: Basic YWxhZGRpbjpvcGVuc2VzYW1l

警告:Base64 编码很容易被反转以获取原始名称和密码,因此基本身份验证完全不安全。使用身份验证时始终推荐使用 HTTPS,但使用 Basic 身份验证时尤其如此。

另请参阅 HTTP 身份验证,以了解如何配置 Apache 或 Nginx 服务器以使用 HTTP 基本身份验证对您的站点进行密码保护。

规范

规范
HTTP 语义
# field.authorization

浏览器兼容性

BCD 表仅在浏览器中加载

另请参阅