授权
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
值来识别重放请求。 userhash
Optional-
如果用户名已哈希,则为
"true"
。默认情况下为"false"
。
示例
基本身份验证
规范
规范 |
---|
HTTP 语义 # field.authorization |
浏览器兼容性
BCD 表仅在浏览器中加载