Authorization
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 Authentication > Authentication schemes
除了 <auth-scheme>
之外,其餘指令是特定於每個身份驗證方案的。一般來說,你需要檢查相關的規範(以下列出了一小部分方案的關鍵字)。
基本
- <credentials>
-
根據指定方案編碼的憑證。
备注: 有關編碼演算法的訊息,請參見以下範例:在
WWW-Authenticate
中,在 HTTP Authentication 中,以及在相關規範中。
摘要
- <response>
-
一串十六進位數字,用於證明用戶知道密碼。該演算法編碼用戶名和密碼、realm、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
-
隨機數計數。用戶端發送當前
cnonce
值的請求數的十六進位計數(包括當前請求)。伺服器可以使用重複的nc
值來識別重放請求。 userhash
選擇性-
如果用戶名已被雜湊則為
"true"
。默認為"false"
。
範例
基本身份驗證
對於 "Basic"
身份驗證,憑證首先通過用冒號組合用戶名和密碼(aladdin:opensesame
),然後將生成的字串編碼為 base64
(YWxhZGRpbjpvcGVuc2VzYW1l
)。
Authorization: Basic YWxhZGRpbjpvcGVuc2VzYW1l
另見 HTTP authentication,瞭解如何配置 Apache 或 Nginx 伺服器以使用 HTTP 基本身份驗證來保護你的網站。
規範
Specification |
---|
HTTP Semantics # field.authorization |
瀏覽器相容性
BCD tables only load in the browser