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 statische Methode signalAllAcceptedCredentials()
des PublicKeyCredential
-Interfaces signalisiert dem Authentifikator alle gültigen Credential-IDs, die der relying party (RP) Server für einen bestimmten Benutzer noch besitzt.
Dies ermöglicht dem Authentifikator, Anmeldeinformationen zu aktualisieren, indem alle Anmeldeinformationen entfernt werden, die vom RP nicht mehr erkannt werden, wie z.B. die für gelöschte Konten. Die Methode sollte jedes Mal aufgerufen werden, wenn sich ein Benutzer beim RP authentifiziert.
signalAllAcceptedCredentials()
sollte nur aufgerufen werden, wenn der aktuelle Benutzer authentifiziert ist — nach Registrierung oder Anmeldung, oder wenn der Benutzer ein Anmeldedaten-Element löscht — da es sensible Informationen des Benutzers offenlegt.
Syntax
signalAllAcceptedCredentials(options)
Parameter
options
-
Ein Objekt, das die gültigen Anmeldedaten darstellt und die folgenden Eigenschaften enthält:
allAcceptedCredentialIds
-
Ein Array von base64url-codierten Strings, die die `IDs der Anmeldedaten darstellen, die noch gültig sind.
rpId
-
Ein String, der die `ID des RP darstellt, das das Signal gesendet hat.
userId
-
Ein base64url-codierter String, der die `ID des Benutzers darstellt, auf den sich die Anmeldedaten beziehen.
Rückgabewert
Ausnahmen
Das Promise wird mit folgenden Ausnahmen abgelehnt:
SecurityError
DOMException
-
Die RP-Domain ist nicht gültig.
TypeError
DOMException
-
Die
userId
oder Elemente derallAcceptedCredentialIds
sind keine gültigen base64url-codierten Strings.
Beschreibung
Es ist möglich, dass die im Authentifikator eines Benutzers gespeicherten Informationen über ein erkennbares Anmeldeinformationen (zum Beispiel, ein Passkey) nicht mit dem Server synchron sind. Dies tritt normalerweise auf, wenn der Benutzer eine Anmeldeinformation aus der RP-Web-App löscht, ohne den Authentifikator zu aktualisieren.
Wenn ein Benutzer versucht, sich mit erkennbaren Anmeldedaten einzuloggen, wird ihm eine Reihe von Anmeldedaten aus dem Authentifikator präsentiert, aus denen er auswählen kann, und die ausgewählte Anmeldedaten wird zur Anmeldung an die RP-Web-App zurückgegeben. Wählt der Benutzer eine Anmeldedaten aus, die vom RP-Server gelöscht wurde, wird sie nicht erkannt und der Login schlägt fehl. Dies ist für den Benutzer eine verwirrende Erfahrung, da er erwartet, nur Anmeldedaten angeboten zu bekommen, die erfolgreich sein sollten.
Um dieses Problem zu mindern, sollte die signalAllAcceptedCredentials()
-Methode von der RP-Web-App jedes Mal aufgerufen werden, wenn der Benutzer eine Anmeldeinformation löscht oder sich anmeldet, um dem Authentifikator mitzuteilen, welche Anmeldedaten für den gegebenen Benutzer noch gültig sind. Es liegt am Authentifikator, wie er diese Informationen handhabt, aber die Erwartung ist, dass er seine Informationen mit der bereitgestellten Anmeldedatenliste synchronisiert. Anmeldedaten, die nicht in der Liste erscheinen, sollten entfernt werden, sodass der Benutzer keine Anmeldedaten angeboten bekommt, die im Anmelde-UI nicht existieren.
Warnung:
Üben Sie Vorsicht beim Aufrufen von signalAllAcceptedCredentials()
— jegliche gültige Anmeldedaten, die nicht in der Liste enthalten sind, sollen aus dem Authentifikator entfernt werden, was den Benutzer daran hindern wird, sich damit anzumelden. Das Übergeben einer leeren Liste kann alle Anmeldedaten des Benutzers entfernen. Einige Authenticatoren können das Wiederherstellen von Anmeldedaten über einen nachfolgenden Aufruf von signalAllAcceptedCredentials()
unterstützen, wenn die zuvor entfernten Credential-IDs in die Liste aufgenommen werden.
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 Anmeldeinformation anzumelden, die auf dem RP-Server nicht existiert, sollten Sie stattdessen PublicKeyCredential.signalUnknownCredential()
mit der nicht erkannten Anmeldeinformation aufrufen, damit der Authenticator sie löschen kann. Siehe Methoden zur Synchronisierung erkennbarer Anmeldedaten für einen detaillierteren Vergleich.
Beispiele
Signalisieren 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 eingeloggt hat. Als Ergebnis sollte der Authenticator seine eigene Kopie der Anmeldedaten aktualisieren, sodass sie mit dem 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 |