PublicKeyCredential: signalAllAcceptedCredentials() 靜態方法

可用性有限

此特性不是基線特性,因為它在一些最廣泛使用的瀏覽器中不起作用。

安全上下文: 此功能僅在安全上下文(HTTPS)中可用,且支援此功能的瀏覽器數量有限。

PublicKeyCredential 介面的 signalAllAcceptedCredentials() 靜態方法會向認證器發出訊號,告知它依賴方(RP)伺服器仍然為特定使用者持有的所有有效的憑據 ID

這允許認證器更新憑據資訊,刪除 RP 不再識別的所有憑據,例如已刪除帳戶的憑據。每次使用者使用 RP 進行身份驗證時都應呼叫此方法。

signalAllAcceptedCredentials() 只能在當前使用者已透過身份驗證時呼叫——在註冊或登入之後,或在使用者刪除憑據時呼叫,因為它會暴露屬於使用者的敏感資訊。

語法

js
signalAllAcceptedCredentials(options)

引數

options

一個代表有效憑據的物件,其中包含以下屬性

allAcceptedCredentialIds

一個 base64url 編碼字串陣列,表示仍然有效的憑據 ID

rpId

一個字串,表示傳送訊號的 RP 的 ID

userId

一個 base64url 編碼字串,表示憑據所屬使用者的 ID

返回值

一個 Promise,解析為 undefined

異常

Promise 會因以下異常而拒絕

SecurityError DOMException

RP 域無效。

TypeError DOMException

userIdallAcceptedCredentialIds 中的任何元素不是有效的 base64url 編碼字串。

描述

使用者認證器中儲存的關於可發現憑據(例如,passkey)的資訊可能會與伺服器不同步。當用戶在 RP Web 應用中刪除憑據而未更新認證器時,通常會發生這種情況。

當用戶嘗試使用可發現憑據登入時,他們會看到認證器提供的一組憑據供選擇,然後所選憑據會返回給 RP Web 應用以進行登入。如果使用者選擇了一個已從 RP 伺服器刪除的憑據,該憑據將不會被識別,登入將失敗。這會給使用者帶來困惑,因為他們期望只會看到應該成功的憑據。

為了緩解此問題,RP Web 應用應在使用者刪除憑據或每次使用者登入時呼叫 signalAllAcceptedCredentials(),以告知認證器哪些憑據對給定使用者仍然有效。認證器如何處理此資訊由其自行決定,但預期它會同步其資訊與提供的憑據列表。未出現在列表中的憑據應被刪除,以便使用者不會看到登入 UI 中不存在的憑據。

警告:呼叫 signalAllAcceptedCredentials() 時要謹慎——列表中未包含的任何有效憑據都將從認證器中刪除,這將阻止使用者使用它們進行登入。傳遞空列表可能會刪除使用者的所有憑據。某些認證器可能支援通過後續呼叫 signalAllAcceptedCredentials() 來恢復憑據,並將先前刪除的憑據 ID 包含在列表中。

signalAllAcceptedCredentials() 只能在當前使用者已透過身份驗證時呼叫,因為它會暴露屬於使用者的敏感資訊。如果使用者因嘗試使用 RP 伺服器上不存在的憑據登入而未透過身份驗證,則應改用 unrecognized 憑據呼叫 PublicKeyCredential.signalUnknownCredential(),以便認證器可以刪除它。有關更詳細的比較,請參閱 可發現憑據同步方法

示例

信令已接受的憑據

在此示例中,我們呼叫 signalAllAcceptedCredentials() 方法,並將使用者擁有的所有憑據(包括他們剛剛登入的憑據)的詳細資訊傳遞給它。因此,認證器應該更新其自身的憑據副本,以便與 RP 保持同步。

js
if (PublicKeyCredential.signalAllAcceptedCredentials) {
  await PublicKeyCredential.signalAllAcceptedCredentials({
    rpId: "example.com",
    userId: "M2YPl-KGnA8", // base64url-encoded user ID
    allAcceptedCredentialIds: [
      // A list of base64url-encoded credential IDs
      "vI0qOggiE3OT01ZRWBYz5l4MEgU0c7PmAA",
      // …
    ],
  });
}

有關更多程式碼示例,請參閱 developer.chrome.com 上的 使用 Signal API 使 passkey 與伺服器上的憑據保持一致 (2024)。

規範

規範
Web Authentication:訪問公鑰憑證的 API - 第 3 級
# dom-publickeycredential-signalallacceptedcredentials

瀏覽器相容性

另見