PublicKeyCredential: signalAllAcceptedCredentials() statische Methode
Sicherer Kontext: Diese Funktion ist nur in sicheren Kontexten (HTTPS) in einigen oder allen unterstützenden Browsern verfügbar.
Experimentell: Dies ist eine experimentelle Technologie
Überprüfen Sie die Browser-Kompatibilitätstabelle sorgfältig vor der Verwendung auf produktiven Webseiten.
Die signalAllAcceptedCredentials()
statische Methode des PublicKeyCredential
-Interfaces signalisiert dem Authentifikator alle gültigen Credential-IDs, die der Relying Party (RP) Server für einen bestimmten Benutzer noch hält.
Dies ermöglicht es dem Authentifikator, die Anmeldeinformationen zu aktualisieren und alle Anmeldedaten zu entfernen, die nicht mehr von der RP erkannt werden, wie z.B. die der gelöschten Konten. Die Methode sollte jedes Mal aufgerufen werden, wenn sich ein Benutzer bei der RP authentifiziert.
signalAllAcceptedCredentials()
sollte nur aufgerufen werden, wenn der aktuelle Benutzer authentifiziert ist — nach der Anmeldung oder beim Löschen eines Anmeldedatensatzes — da sie sensible Informationen des Benutzers offenlegt.
Syntax
signalAllAcceptedCredentials(options)
Parameter
options
-
Ein Objekt, das die gültigen Anmeldedaten repräsentiert und die folgenden Eigenschaften enthält:
allAcceptedCredentialIds
-
Ein Array von base64url-codierten Zeichenfolgen, die die
IDs der Anmeldedaten
repräsentieren, die noch gültig sind. rpId
-
Eine Zeichenfolge, die die
ID der RP
repräsentiert, die das Signal gesendet hat. userId
-
Eine base64url-codierte Zeichenfolge, die die
ID des Benutzers
repräsentiert, mit dem die Anmeldedaten verbunden sind.
Rückgabewert
Ausnahmen
Das Promise wird mit den folgenden Ausnahmen abgelehnt:
SecurityError
DOMException
-
Die RP-Domain ist nicht gültig.
TypeError
DOMException
-
Die
userId
oder irgendeines derallAcceptedCredentialIds
-Elemente sind keine gültigen base64url-codierten Zeichenfolgen.
Beschreibung
Es ist möglich, dass die Informationen, die in einem Benutzer-Authentifikator über eine entdeckbare Anmeldedaten (zum Beispiel, ein Passkey) gespeichert sind, nicht mehr mit dem Server synchron sind. Dies tritt normalerweise auf, wenn der Benutzer eine Anmeldedaten aus der RP-Web-App löscht, ohne den Authentifikator zu aktualisieren.
Wenn ein Benutzer versucht, sich mit entdeckbaren Anmeldedaten anzumelden, wird ihm eine Auswahl an Anmeldedaten vom Authentifikator präsentiert, aus denen er wählen kann, und die ausgewählte Anmeldedaten wird an die RP-Web-App zurückgesendet, um sich anzumelden. Wenn der Benutzer eine Anmeldedaten auswählt, die vom RP-Server gelöscht wurde, wird sie nicht erkannt, und die Anmeldung schlägt fehl. Dies ist eine verwirrende Erfahrung für Benutzer, die erwarten, dass ihnen nur Anmeldedaten angeboten werden, die funktionieren sollten.
Um dieses Problem zu mildern, sollte signalAllAcceptedCredentials()
von der RP-Web-App jedes Mal aufgerufen werden, wenn ein Benutzer eine Anmeldedaten löscht oder sich anmeldet, um dem Authentifikator mitzuteilen, welche Anmeldedaten für den angegebenen Benutzer noch gültig sind. Es liegt am Authentifikator, wie er mit dieser Information umgeht, aber es wird erwartet, dass er seine Informationen mit der bereitgestellten Anmeldedatenliste synchronisiert. Anmeldedaten, die nicht in der Liste erscheinen, sollten entfernt werden, damit dem Benutzer keine Anmeldedaten angeboten werden, die in der Anmelde-UI nicht existieren.
Warnung:
Seien Sie vorsichtig beim Aufrufen von signalAllAcceptedCredentials()
— alle gültigen Anmeldedaten, die nicht in der Liste enthalten sind, sollen vom Authentifikator entfernt werden, wodurch der Benutzer daran gehindert wird, sich mit ihnen anzumelden. Wenn Sie eine leere Liste übergeben, können alle Anmeldedaten des Benutzers gelöscht werden. Einige Authentifikatoren können das Wiederherstellen von Anmeldedaten durch einen anschließenden Aufruf von signalAllAcceptedCredentials()
mit den zuvor entfernten Credential-IDs, die in der Liste enthalten sind, unterstützen.
signalAllAcceptedCredentials()
sollte nur aufgerufen werden, wenn der aktuelle Benutzer authentifiziert ist, da es sensible Informationen des Benutzers offenlegt. Wenn der Benutzer nicht authentifiziert ist, weil er versucht hat, sich mit einer Anmeldedaten anzumelden, die auf dem RP-Server nicht existiert, sollten Sie stattdessen PublicKeyCredential.signalUnknownCredential()
mit der nicht erkannten Anmeldedaten aufrufen, damit der Authentifikator sie löschen kann. Siehe Methoden zur Synchronisierung entdeckbarer Anmeldedaten für einen detaillierteren Vergleich.
Beispiele
Signalisierung der akzeptierten Anmeldedaten
In diesem Beispiel rufen wir die signalAllAcceptedCredentials()
Methode auf und übergeben ihr die Details aller Anmeldedaten, die dem Benutzer gehören, einschließlich derer, mit denen er sich gerade angemeldet hat. Infolgedessen sollte der Authentifikator seine eigene Kopie der Anmeldedaten aktualisieren, sodass sie mit der RP synchron bleiben.
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",
// ...
],
});
}
Für ein vollständiges Beispiel siehe WebAuthn Signal API Demo (siehe den Quellcode).
Spezifikationen
Specification |
---|
Web Authentication: An API for accessing Public Key Credentials - Level 3 # dom-publickeycredential-signalallacceptedcredentials |
Browser-Kompatibilität
BCD tables only load in the browser