身份驗證器資料

認證器資料結構包含來自認證器的有關憑證建立或身份驗證請求處理的資訊 — 例如 Relying Party ID 雜湊 (rpIdHash)、簽名計數器、使用者存在性測試、使用者驗證標誌以及認證器處理的任何擴充套件。本頁將解釋資料結構中包含的內容。

訪問認證器資料

認證器資料以 ArrayBuffer 的形式提供給瀏覽器,可以透過多種方式訪問。最方便的兩種方式是

資料結構

認證器資料的 ArrayBuffer 長度至少為 37 位元組,幷包含以下欄位:

rpIdHash (32 位元組)

憑證所歸屬的 Relying Party ID 的 SHA-256 雜湊。伺服器將確保此雜湊與自身 Relying Party ID 的 SHA256 雜湊匹配,以防止網路釣魚或其他中間人攻擊。

flags (1 位元組)

一個位欄位,指示認證器聲稱的各種屬性。位如下所示,其中位 0 是最低有效位,所有未特別提及的位都“保留供將來使用”。

  • 位 0,使用者存在性 (UP): 如果設定 (即為 1),則認證器透過某種使用者存在性測試 (TUP),例如觸控認證器上的按鈕,驗證了使用者的存在。
  • 位 2,使用者驗證 (UV): 如果設定,則認證器透過生物識別、PIN 或其他方法驗證了實際使用者。
  • 位 3,備份可用性 (BE): 如果設定,則認證器用於生成斷言的公鑰憑證源是可備份的。這意味著它可以以某種方式進行備份(例如透過雲或本地網路同步),因此可能會出現在生成器認證器以外的認證器上。因此,可備份的憑證源也稱為多裝置憑證。
  • 位 4,備份狀態 (BS): 如果設定,則公鑰憑證源當前已備份(有關上下文,請參閱位 3)。
  • 位 6,認證憑證資料 (AT): 如果設定,則認證憑證資料將緊跟在此 authenticatorData 的前 37 個位元組之後。
  • 位 7,擴充套件資料 (ED): 如果設定,則存在擴充套件資料。如果存在認證憑證資料,則擴充套件資料將緊跟在認證憑證資料之後;如果不存在認證憑證資料,則擴充套件資料將緊跟在 authenticatorData 的前 37 個位元組之後。
signCount (4 位元組)

簽名計數器(如果認證器支援)(否則設定為 0)。伺服器可以選擇使用此計數器來檢測認證器克隆。

attestedCredentialData (可變長度)

已建立的憑證。此項僅在呼叫 navigator.credentials.create() 時存在。這是一個位元組序列,格式如下:

  • AAGUID (16 位元組): 認證器歸屬全域性唯一識別符號,一個唯一的數字,用於標識認證器的型號(而不是認證器的特定例項)。Relying Party 可以透過 FIDO 元資料服務查詢其元資料語句來使用此識別符號來了解認證器的特性。這在某些情況下(例如企業部署或法規要求必須使用特定型別的認證器時)很重要;否則應忽略。

  • credentialIdLength (2 位元組): 緊跟在這些位元組之後的憑證 ID 的長度。

  • credentialId (可變長度): 此憑證的唯一識別符號,以便將來進行身份驗證時請求。憑證的長度為“credentialIdLength”位元組。

  • credentialPublicKey (可變長度): 一個 COSE 編碼的公鑰。此公鑰將儲存在伺服器上,與使用者的帳戶關聯,並用於將來的身份驗證。Relying Party 可以透過 AuthenticatorAttestationResponse.getPublicKey() 方法檢索其 DER 編碼形式,而無需解析 COSE 編碼的認證器資料。

extensions (可變長度)

一個可選的 CBOR 對映,包含認證器處理的擴充套件的響應輸出。

擴充套件是可選的,不同的瀏覽器可能支援不同的擴充套件。瀏覽器始終可以忽略擴充套件:如果瀏覽器不識別某個擴充套件,它將直接忽略它。有關使用擴充套件以及哪些擴充套件受哪些瀏覽器支援的資訊,請參閱 Web Authentication 擴充套件

注意: 認證器資料僅包含認證器處理的擴充套件的結果。瀏覽器(客戶端)處理的擴充套件的結果可以透過 PublicKeyCredential.getClientExtensionResults 訪問。

另見

WebAuthn 規範中的認證器資料定義