Dieser Inhalt wurde automatisch aus dem Englischen übersetzt, und kann Fehler enthalten. Erfahre mehr über dieses Experiment.

View in English Always switch to English

PublicKeyCredential: signalAllAcceptedCredentials() statische Methode

Limited availability

This feature is not Baseline because it does not work in some of the most widely-used browsers.

Sicherer Kontext: Diese Funktion ist nur in sicheren Kontexten (HTTPS) in einigen oder allen unterstützenden Browsern verfügbar.

Die statische Methode signalAllAcceptedCredentials() des PublicKeyCredential-Interfaces signalisiert dem Authentifikator alle gültigen Credential-IDs, die der Relying Party (RP) Server noch für einen bestimmten Benutzer besitzt.

Dies ermöglicht es dem Authentifikator, Credential-Informationen zu aktualisieren und alle Credentials zu entfernen, die vom RP nicht mehr erkannt werden, wie z. B. solche 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 Anmeldung oder Sign-in oder wenn der Benutzer ein Credential löscht -, da sie sensible Informationen des Benutzers offenlegt.

Syntax

js
signalAllAcceptedCredentials(options)

Parameter

options

Ein Objekt, das die gültigen Credentials repräsentiert und die folgenden Eigenschaften enthält:

allAcceptedCredentialIds

Ein Array von Base64url-kodierten Strings, die die IDs der Credentials darstellen, die noch gültig sind.

rpId

Ein String, der die ID des RP repräsentiert, das das Signal gesendet hat.

userId

Ein Base64url-kodierter String, der die ID des Benutzers repräsentiert, auf den sich die Credentials beziehen.

Rückgabewert

Ein Promise, das auf undefined auflöst.

Ausnahmen

Das Promise wird mit den folgenden Ausnahmen abgelehnt:

SecurityError DOMException

Die RP-Domain ist nicht gültig.

TypeError DOMException

Die userId oder eines der allAcceptedCredentialIds-Elemente sind keine gültigen Base64url-kodierten Strings.

Beschreibung

Es ist möglich, dass die im Authentifikator eines Benutzers gespeicherten Informationen über ein entdeckbares Credential (zum Beispiel einen Passkey) nicht mehr mit dem Server synchron sind. Dies passiert üblicherweise, wenn der Benutzer ein Credential aus der RP-Webanwendung löscht, ohne den Authentifikator zu aktualisieren.

Wenn ein Benutzer versucht, sich mit entdeckbaren Credentials anzumelden, wird ihm eine Auswahl von Credentials aus dem Authentifikator präsentiert, aus denen er wählen kann, und das ausgewählte Credential wird an die RP-Webanwendung zurückgegeben, um sich damit anzumelden. Wenn der Benutzer ein Credential auswählt, das vom RP-Server gelöscht wurde, wird es nicht erkannt und die Anmeldung schlägt fehl. Dies ist eine verwirrende Erfahrung für Benutzer, die erwarten, nur Credentials angeboten zu bekommen, die erfolgreich sein sollten.

Um dieses Problem zu vermeiden, sollte signalAllAcceptedCredentials() jedes Mal von der RP-Webanwendung aufgerufen werden, wenn ein Benutzer ein Credential löscht oder sich anmeldet, um dem Authentifikator mitzuteilen, welche Credentials noch für den gegebenen Benutzer gültig sind. Es liegt am Authentifikator, wie er mit diesen Informationen umgeht, aber die Erwartung ist, dass er seine Informationen mit der bereitgestellten Liste der Credentials synchronisiert. Credentials, die nicht in der Liste erscheinen, sollten entfernt werden, damit dem Benutzer keine Credentials angeboten werden, die in der Anmelde-UI nicht existieren.

Warnung: Seien Sie vorsichtig beim Aufrufen von signalAllAcceptedCredentials() — alle gültigen Credentials, die nicht in der Liste enthalten sind, sollen vom Authentifikator entfernt werden, was den Benutzer daran hindert, sich mit ihnen anzumelden. Das Übergeben einer leeren Liste kann alle Credentials des Benutzers entfernen. Einige Authentifikatoren könnten das Wiederherstellen von Credentials unterstützen, indem signalAllAcceptedCredentials() mit den zuvor entfernten Credential-IDs in der Liste erneut aufgerufen wird.

signalAllAcceptedCredentials() sollte nur dann 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 einem Credential anzumelden, das auf dem RP-Server nicht existiert, sollten Sie stattdessen PublicKeyCredential.signalUnknownCredential() mit dem nicht erkannten Credential aufrufen, damit der Authentifikator es löschen kann. Siehe Entdeckbare Credential-Synchronisierungsmethoden für einen detaillierteren Vergleich.

Beispiele

Signalisierung der akzeptierten Credentials

In diesem Beispiel rufen wir die Methode signalAllAcceptedCredentials() auf und übergeben ihr die Details aller zum Benutzer gehörenden Credentials, einschließlich derjenigen, mit denen er sich gerade angemeldet hat. Infolgedessen sollte der Authentifikator seine eigene Kopie der Credentials aktualisieren, damit sie mit dem RP synchron bleiben.

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",
      // …
    ],
  });
}

Für weitere Code-Beispiele siehe Passkeys auf Ihrem Server mit den Credentials im Einklang halten mittels der Signal-API auf developer.chrome.com (2024).

Spezifikationen

Specification
Web Authentication: An API for accessing Public Key Credentials - Level 3
# dom-publickeycredential-signalallacceptedcredentials

Browser-Kompatibilität

Siehe auch