PublicKeyCredential: signalAllAcceptedCredentials() 静态方法
PublicKeyCredential
接口的 signalAllAcceptedCredentials()
静态方法会向认证器发出信号,告知它依赖方(RP)服务器仍然为特定用户持有的所有有效的凭据 ID。
这允许认证器更新凭据信息,删除 RP 不再识别的所有凭据,例如已删除帐户的凭据。每次用户使用 RP 进行身份验证时都应调用此方法。
signalAllAcceptedCredentials()
只能在当前用户已通过身份验证时调用——在注册或登录之后,或在用户删除凭据时调用,因为它会暴露属于用户的敏感信息。
语法
signalAllAcceptedCredentials(options)
参数
返回值
异常
Promise 会因以下异常而拒绝
SecurityError
DOMException
-
RP 域无效。
TypeError
DOMException
-
userId
或allAcceptedCredentialIds
中的任何元素不是有效的 base64url 编码字符串。
描述
用户认证器中存储的关于可发现凭据(例如,passkey)的信息可能会与服务器不同步。当用户在 RP Web 应用中删除凭据而未更新认证器时,通常会发生这种情况。
当用户尝试使用可发现凭据登录时,他们会看到认证器提供的一组凭据供选择,然后所选凭据会返回给 RP Web 应用以进行登录。如果用户选择了一个已从 RP 服务器删除的凭据,该凭据将不会被识别,登录将失败。这会给用户带来困惑,因为他们期望只会看到应该成功的凭据。
为了缓解此问题,RP Web 应用应在用户删除凭据或每次用户登录时调用 signalAllAcceptedCredentials()
,以告知认证器哪些凭据对给定用户仍然有效。认证器如何处理此信息由其自行决定,但预期它会同步其信息与提供的凭据列表。未出现在列表中的凭据应被删除,以便用户不会看到登录 UI 中不存在的凭据。
警告:调用 signalAllAcceptedCredentials()
时要谨慎——列表中未包含的任何有效凭据都将从认证器中删除,这将阻止用户使用它们进行登录。传递空列表可能会删除用户的所有凭据。某些认证器可能支持通过后续调用 signalAllAcceptedCredentials()
来恢复凭据,并将先前删除的凭据 ID 包含在列表中。
signalAllAcceptedCredentials()
只能在当前用户已通过身份验证时调用,因为它会暴露属于用户的敏感信息。如果用户因尝试使用 RP 服务器上不存在的凭据登录而未通过身份验证,则应改用 unrecognized 凭据调用 PublicKeyCredential.signalUnknownCredential()
,以便认证器可以删除它。有关更详细的比较,请参阅 可发现凭据同步方法。
示例
信令已接受的凭据
在此示例中,我们调用 signalAllAcceptedCredentials()
方法,并将用户拥有的所有凭据(包括他们刚刚登录的凭据)的详细信息传递给它。因此,认证器应该更新其自身的凭据副本,以便与 RP 保持同步。
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 |
浏览器兼容性
加载中…
另见
PublicKeyCredential.signalCurrentUserDetails()
PublicKeyCredential.signalUnknownCredential()
- 使用 Signal API 使 passkey 与服务器上的凭据保持一致,来自 developer.chrome.com (2024)