授权
HTTP Authorization 请求标头可用于提供凭据,以对用户代理进行服务器身份验证,从而允许访问受保护的资源。
Authorization 标头通常(但不总是)在用户代理首次尝试在没有凭据的情况下请求受保护的资源后发送。服务器将响应一个401 Unauthorized 消息,其中至少包含一个 WWW-Authenticate 标头。此标头指示可以使用哪些身份验证方案来访问资源(以及客户端使用这些方案所需的任何其他信息)。用户代理应该从提供的方案中选择其支持的最安全的方案,提示用户输入其凭据,然后重新请求资源(包括在 Authorization 标头中编码的凭据)。
此标头将从跨域重定向中剥离。
注意:此标头是 通用 HTTP 身份验证框架 的一部分。它可以与许多 身份验证方案 一起使用。
语法
Authorization: <auth-scheme> <authorization-parameters>
基本身份验证
Authorization: Basic <credentials>
摘要身份验证
Authorization: Digest username=<username>,
realm="<realm>",
uri="<url>",
algorithm=<algorithm>,
nonce="<nonce>",
nc=<nc>,
cnonce="<cnonce>",
qop=<qop>,
response="<response>",
opaque="<opaque>"
指令
<auth-scheme>-
定义如何对凭据进行编码的 身份验证方案。一些更常见的类型是(不区分大小写):
Basic、Digest、Negotiate和AWS4-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值来识别重放请求。 userhashOptional-
如果用户名已哈希,则为
"true"。默认情况下为"false"。
示例
基本身份验证
规范
| 规范 |
|---|
| HTTP 语义 # field.authorization |
浏览器兼容性
BCD 表仅在浏览器中加载