WWW-Authenticate

HTTP 的 WWW-Authenticate 響應頭定義了用於訪問特定資源的 HTTP 身份驗證 方法(“挑戰”)。

注意:此標頭是 通用 HTTP 身份驗證框架 的一部分,可與多種 身份驗證方案 一起使用。每個“挑戰”都列出了伺服器支援的方案以及為該方案型別定義的其他引數。

使用 HTTP 身份驗證 的伺服器將對受保護資源的請求以 401 Unauthorized 響應進行響應。此響應必須至少包含一個 WWW-Authenticate 標頭和至少一個 挑戰,以指示可以使用哪些身份驗證方案訪問資源(以及每個特定方案需要的任何其他資料)。

在一個 WWW-Authenticate 標頭中允許使用多個挑戰,在一個響應中也允許使用多個 WWW-Authenticate 標頭。伺服器還可以在其他響應訊息中包含 WWW-Authenticate 標頭,以指示提供憑據可能會影響響應。

在收到 WWW-Authenticate 標頭後,客戶端通常會提示使用者輸入憑據,然後重新請求資源。此新請求使用 Authorization 標頭向伺服器提供憑據,並根據所選“挑戰”身份驗證方法進行適當編碼。客戶端應選擇其理解的安全性最高的挑戰(請注意,在某些情況下,“安全性最高”的方法存在爭議)。

標頭型別 響應標頭
禁止的標頭名稱

語法

必須指定至少一個挑戰。可以在單個標頭或各個標頭中指定多個挑戰,以逗號分隔。

http
// Challenges specified in single header
WWW-Authenticate: challenge1, ..., challengeN

// Challenges specified in multiple headers
WWW-Authenticate: challenge1
...
WWW-Authenticate: challengeN

單個挑戰具有以下格式。請注意,方案令牌(<auth-scheme>)是必需的。realmtoken68 和任何其他引數的存在取決於所選方案的定義。

http
// Possible challenge formats (scheme dependent)
WWW-Authenticate: <auth-scheme>
WWW-Authenticate: <auth-scheme> realm=<realm>
WWW-Authenticate: <auth-scheme> token68
WWW-Authenticate: <auth-scheme> auth-param1=token1, ..., auth-paramN=auth-paramN-token
WWW-Authenticate: <auth-scheme> realm=<realm> token68
WWW-Authenticate: <auth-scheme> realm=<realm> token68 auth-param1=auth-param1-token , ..., auth-paramN=auth-paramN-token
WWW-Authenticate: <auth-scheme> realm=<realm> auth-param1=auth-param1-token, ..., auth-paramN=auth-paramN-token
WWW-Authenticate: <auth-scheme> token68 auth-param1=auth-param1-token, ..., auth-paramN=auth-paramN-token

例如,基本身份驗證 需要 realm 並允許可選使用 charset 金鑰,但不支援 token68

http
WWW-Authenticate: Basic realm=<realm>
WWW-Authenticate: Basic realm=<realm>, charset="UTF-8"

指令

<auth-scheme>

身份驗證方案。一些更常見的型別(不區分大小寫)為:BasicDigestNegotiateAWS4-HMAC-SHA256

注意:有關更多資訊/選項,請參閱 HTTP 身份驗證 > 身份驗證方案

realm=<realm> 可選

描述受保護區域的字串。領域允許伺服器將其保護的區域進行分割槽(如果所選方案支援此類分割槽)。一些客戶端會將此值顯示給使用者,以告知他們需要哪些特定憑據——儘管大多數瀏覽器已停止這樣做以防止網路釣魚。此值的唯一可靠支援字元集為 us-ascii。如果未指定領域,客戶端通常會改顯示格式化的主機名。

<token68> 可選

可能對某些方案有用的令牌。該令牌允許 66 個未保留的 URI 字元以及其他一些字元。根據規範,它可以儲存 base64、base64url、base32 或 base16(十六進位制)編碼,帶或不帶填充,但不包括空格。

<auth-scheme> 和金鑰 realm 外,授權引數特定於每個 身份驗證方案。通常,您需要檢查相關規範以獲取這些資訊(下面列出了少量方案的金鑰)。

基本

<realm>

上文 所述。請注意,基本身份驗證需要領域。

charset="UTF-8" 可選

告訴客戶端伺服器在提交使用者名稱和密碼時的首選編碼方案。唯一允許的值是不區分大小寫的字串“UTF-8”。這與領域的編碼無關。

摘要

<realm> 可選

指示要使用哪個使用者名稱/密碼的字串。至少應包含主機名,但可能指示具有訪問許可權的使用者或組。

domain 可選

定義可以使用身份驗證資訊的 所有位置的 URI 字首的帶引號的空格分隔列表。如果未指定此金鑰,則身份驗證資訊可以在 Web 根目錄的任何位置使用。

nonce

伺服器指定的帶引號的字串,伺服器可以使用它來控制特定憑據將被視為有效的生命週期。每次發出 401 響應時都必須唯一生成此字串,並且可以更頻繁地重新生成(例如,允許摘要僅使用一次)。規範包含有關生成此值的可能演算法的建議。nonce 值對客戶端是不可見的。

opaque

伺服器指定的帶引號的字串,應在 Authorization 中保持不變地返回。這對客戶端是不可見的。建議伺服器包含 Base64 或十六進位制資料。

stale 可選

指示客戶端的先前請求被拒絕(因為使用的 nonce 過時)的不區分大小寫的標誌。如果此值為 true,則可以使用相同的使用者名稱/密碼(使用新的 nonce 加密)重試請求。如果此值為任何其他值,則使用者名稱/密碼無效,必須重新向用戶請求。

algorithm 可選

用於生成摘要的演算法。有效的非會話值為:"MD5"(如果未指定則為預設值)、"SHA-256""SHA-512"。有效的會話值為:"MD5-sess""SHA-256-sess""SHA-512-sess"

qop

帶引號的字串,指示伺服器支援的保護質量。必須提供此字串,並且必須忽略無法識別的選項。

  • "auth":身份驗證
  • "auth-int":具有完整性保護的身份驗證
charset="UTF-8" 可選

告訴客戶端伺服器在提交使用者名稱和密碼時的首選編碼方案。唯一允許的值是不區分大小寫的字串“UTF-8”。

userhash 可選

伺服器可以指定 "true" 以指示其支援使用者名稱雜湊(預設為 "false"

HTTP 繫結源身份驗證 (HOBA)

<challenge>

一組格式為“<len>:<value>”的配對,連線在一起提供給客戶端。挑戰由 nonce、演算法、源、領域、金鑰識別符號和挑戰組成。

<max-age>

從發出 HTTP 響應的時間開始,可以接受對該挑戰的響應的秒數。

realm 可選

指令 部分中的上文所述。

示例

基本身份驗證

僅支援基本身份驗證的伺服器可能具有如下所示的 WWW-Authenticate 響應標頭

http
WWW-Authenticate: Basic realm="Access to the staging site", charset="UTF-8"

接收此標頭的使用者代理首先會提示使用者輸入使用者名稱和密碼,然後重新請求資源:這次在 Authorization 標頭中包含(編碼的)憑據。Authorization 標頭可能如下所示

http
Authorization: Basic YWxhZGRpbjpvcGVuc2VzYW1l

對於 "Basic" 身份驗證,憑據是透過首先將使用者名稱和密碼與冒號(aladdin:opensesame)組合,然後對生成的字串進行 base64 編碼(YWxhZGRpbjpvcGVuc2VzYW1l)來構建的。

注意:另請參閱 HTTP 身份驗證,以獲取有關如何配置 Apache 或 Nginx 伺服器以使用 HTTP 基本身份驗證保護站點的示例。

使用 SHA-256 和 MD5 的摘要身份驗證

注意:此示例取自 RFC 7616“HTTP 摘要訪問身份驗證”(規範中的其他示例顯示了 SHA-512charsetuserhash 的用法)。

客戶端嘗試訪問 URI http://www.example.org/dir/index.html 處的文件,該文件透過摘要身份驗證進行保護。此文件的使用者名稱為“Mufasa”,密碼為“Circle of Life”(請注意單詞之間的單個空格)。

客戶端第一次請求文件時,不會發送 Authorization 標頭欄位。在此,伺服器將以包含對每個摘要演算法的挑戰(按其優先順序順序:SHA256 然後是 MD5)的 HTTP 401 訊息進行響應

http
HTTP/1.1 401 Unauthorized
WWW-Authenticate: Digest
    realm="http-auth@example.org",
    qop="auth, auth-int",
    algorithm=SHA-256,
    nonce="7ypf/xlj9XXwfDPEoM4URrv/xwf94BcCAzFZH4GiTo0v",
    opaque="FQhe/qaU925kfnzjCev0ciny7QMkPqMAFRtzCUYo5tdS"
WWW-Authenticate: Digest
    realm="http-auth@example.org",
    qop="auth, auth-int",
    algorithm=MD5,
    nonce="7ypf/xlj9XXwfDPEoM4URrv/xwf94BcCAzFZH4GiTo0v",
    opaque="FQhe/qaU925kfnzjCev0ciny7QMkPqMAFRtzCUYo5tdS"

客戶端會提示使用者輸入使用者名稱和密碼,然後以新的請求進行響應,該請求在 Authorization 標頭欄位中對憑據進行編碼。如果客戶端選擇了 MD5 摘要,則 Authorization 標頭欄位可能如下所示

http
Authorization: Digest username="Mufasa",
    realm="http-auth@example.org",
    uri="/dir/index.html",
    algorithm=MD5,
    nonce="7ypf/xlj9XXwfDPEoM4URrv/xwf94BcCAzFZH4GiTo0v",
    nc=00000001,
    cnonce="f2/wE4q74E6zIJEtWaHKaf5wv/H5QzzpXusqGemxURZJ",
    qop=auth,
    response="8ca523f5e9506fed4657c9700eebdbec",
    opaque="FQhe/qaU925kfnzjCev0ciny7QMkPqMAFRtzCUYo5tdS"

如果客戶端選擇了 SHA-256 摘要,則 Authorization 標頭欄位可能如下所示

http
Authorization: Digest username="Mufasa",
    realm="http-auth@example.org",
    uri="/dir/index.html",
    algorithm=SHA-256,
    nonce="7ypf/xlj9XXwfDPEoM4URrv/xwf94BcCAzFZH4GiTo0v",
    nc=00000001,
    cnonce="f2/wE4q74E6zIJEtWaHKaf5wv/H5QzzpXusqGemxURZJ",
    qop=auth,
    response="753927fa0e85d155564e2e272a28d1802ca10daf449
        6794697cf8db5856cb6c1",
    opaque="FQhe/qaU925kfnzjCev0ciny7QMkPqMAFRtzCUYo5tdS"

HOBA 身份驗證

支援 HOBA 身份驗證的伺服器可能具有如下所示的 WWW-Authenticate 響應標頭

http
WWW-Authenticate: HOBA max-age="180", challenge="16:MTEyMzEyMzEyMw==1:028:https://www.example.com:80800:3:MTI48:NjgxNDdjOTctNDYxYi00MzEwLWJlOWItNGM3MDcyMzdhYjUz"

待簽名的 Blob 挑戰由以下部分組成:使用埠 8080 的 www.example.com,nonce 為“1123123123”,簽名演算法為 RSA-SHA256,金鑰識別符號為 123,最後挑戰為“68147c97-461b-4310-be9b-4c707237ab53”。

客戶端將收到此標頭,提取挑戰,使用其在我們的示例中對應於密鑰識別符號 123 的私鑰(使用 RSA-SHA256)對其進行簽名,然後將結果作為點分隔的金鑰 ID、挑戰、nonce 和簽名傳送到 Authorization 標頭中。

http
Authorization: 123.16:MTEyMzEyMzEyMw==1:028:https://www.example.com:80800:3:MTI48:NjgxNDdjOTctNDYxYi00MzEwLWJlOWItNGM3MDcyMzdhYjUz.1123123123.<signature-of-challenge>

規範

規範
HTTP 語義
# field.www-authenticate

瀏覽器相容性

BCD 表僅在啟用了 JavaScript 的瀏覽器中載入。

另請參閱