Veröffentlicht am 12. November 2024, zuletzt aktualisiert am 29. November 2024
Mit der WebAuthn Signal API können vertrauende Seiten vorhandene Anmeldedaten an verbundene Passkey-Anbieter signalisieren. So kann ein unterstützender Passkey-Anbieter falsche oder widerrufene Passkeys aus seinem Speicher aktualisieren oder entfernen, damit sie Nutzern nicht mehr angeboten werden.
Kompatibilität
Die Signal API wird in Chrome für Desktop ab Chrome 132 unterstützt. Der Google Passwortmanager kann Passkeys entsprechend dem Signal aktualisieren. Bei Passkey-Anbietern, die auf Chrome-Erweiterungen basieren, liegt es an ihnen, ob sie das Signal berücksichtigen.
Die Unterstützung für Chrome unter Android folgt später.
Safari wird unterstützt, ist aber noch nicht implementiert. Firefox hat noch keine Meinungen geteilt.
Hintergrund
Wenn ein Passkey (auffindbare Anmeldedaten) erstellt wird, werden Metadaten wie ein Nutzername und ein Anzeigename zusammen mit dem privaten Schlüssel beim Passkey-Anbieter (z. B. einem Passwortmanager) gespeichert. Die Anmeldedaten für den öffentlichen Schlüssel werden auf dem Server der vertrauenden Partei (Relying Party, RP) gespeichert. Wenn der Nutzername und der Anzeigename gespeichert werden, kann der Nutzer leichter erkennen, mit welchem der angebotenen Passkeys er sich anmelden soll, wenn er dazu aufgefordert wird. Das ist besonders nützlich, wenn sie mehr als zwei Passkeys von verschiedenen Passkey-Anbietern haben.
Es gibt jedoch einige Fälle, in denen Unstimmigkeiten zwischen der Passkeyliste des Passkeyanbieters und der Liste der Anmeldedaten des Servers zu Verwirrung führen können.
Im ersten Fall löscht ein Nutzer Anmeldedaten auf dem Server, der Passkey im Passkey-Anbieter bleibt jedoch unverändert. Wenn der Nutzer sich das nächste Mal mit einem Passkey anmelden möchte, wird dieser Passkey weiterhin vom Passkey-Anbieter angezeigt. Der Anmeldeversuch schlägt jedoch fehl, da der Server die Identität nicht mit dem gelöschten öffentlichen Schlüssel bestätigen kann.
Der zweite Fall ist, wenn ein Nutzer seinen Nutzernamen oder den Anzeigenamen auf dem Server aktualisiert. Wenn sich der Nutzer das nächste Mal anmeldet, werden im Passkey-Anbieter weiterhin der alte Nutzername und Anzeigename angezeigt, obwohl sie auf dem Server aktualisiert wurden. Idealerweise sollten sie synchronisiert sein.
Signal API
Die Signal API ist eine WebAuthn API, die diese Verwirrung beseitigt, indem sie RPs ermöglicht, Änderungen an den Passkey-Anbieter zu signalisieren. Es gibt drei Methoden:
PublicKeyCredential.signalUnknownCredential
: Signalisiert, dass keine Anmeldedaten vorhanden sindPublicKeyCredential.signalAllAcceptedCredentials
: Eine Liste gespeicherter Anmeldedaten signalisierenPublicKeyCredential.signalCurrentUserDetails
: Signal für aktualisierten Nutzernamen und/oder Anzeigenamen
Signal, dass Anmeldedaten nicht vorhanden sind
const credential = await navigator.credentials.get({ ... });
const payload = credential.toJSON();
const result = await fetch('/login', { ... });
// Detect authentication failure due to lack of the credential
if (result.status === 404) {
// Feature detection
if (PublicKeyCredential.signalUnknownCredential) {
await PublicKeyCredential.signalUnknownCredential({
rpId: "example.com",
credentialId: "vI0qOggiE3OT01ZRWBYz5l4MEgU0c7PmAA" // base64url encoded credential ID
});
} else {
// Encourage the user to delete the passkey from the password manager nevertheless.
...
}
}
Durch Aufrufen von PublicKeyCredential.signalUnknownCredential()
mit einer RP-ID und einer Anmeldedaten-ID kann der RP den Passkey-Anbieter darüber informieren, dass die angegebenen Anmeldedaten entfernt wurden oder nicht vorhanden sind. Es liegt im Ermessen des Passkey-Anbieters, wie er mit diesem Signal umgeht. Es wird jedoch erwartet, dass der zugehörige Passkey entfernt wird, damit sich der Nutzer nicht mit einem Passkey anmelden kann, da die zugehörige Anmeldedaten nicht vorhanden sind.
Diese API kann aufgerufen werden, wenn die Anmeldung mit Passkey aufgrund fehlender Anmeldedaten fehlgeschlagen ist. So kann der RP verhindern, dass der Nutzer versucht, sich mit einem Passkey anzumelden, dem keine Anmeldedaten zugeordnet sind. Anders als bei signalAllAcceptedCredentials
muss bei dieser Methode nicht die gesamte Liste der Anmeldedaten-IDs übergeben werden. Sie sollte daher immer dann verwendet werden, wenn der Nutzer nicht authentifiziert ist, um die Anzahl der Passkeys für einen bestimmten Nutzer nicht preiszugeben.

Liste gespeicherter Anmeldedaten signalisieren
// After a user deletes a passkey or a user is signed in.
// Feature detection
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",
...
]
});
}
Durch Aufrufen von PublicKeyCredential.signalAllAcceptedCredentials()
mit einer RP-ID, einer Nutzer-ID und einer Liste von Anmeldedaten-IDs gespeicherter Anmeldedaten kann der RP den Passkey-Anbieter über die verbleibenden Anmeldedaten in seinem Speicher informieren. Es liegt im Ermessen des Passkey-Anbieters, wie er mit diesem Signal umgeht. Es wird jedoch erwartet, dass die Passkeys, die nicht mit dieser Liste übereinstimmen, entfernt werden, damit der Nutzer bei der Anmeldung keine Passkeys sieht, für die die zugehörigen Anmeldedaten nicht vorhanden sind.
Diese API sollte aufgerufen werden, wenn ein Nutzer einen Passkey beim RP löscht, und bei jeder Anmeldung, damit der Passkey-Anbieter eine synchronisierte Liste der Passkeys führen kann.
Signal für aktualisierten Nutzernamen und Anzeigenamen
// After a user updated their username and/or display name
// or a user is signed in.
// Feature detection
if (PublicKeyCredential.signalCurrentUserDetails) {
await PublicKeyCredential.signalCurrentUserDetails({
rpId: "example.com",
userId: "M2YPl-KGnA8", // base64url encoded user ID
name: "a.new.email.address@example.com", // username
displayName: "J. Doe"
});
} else {
}
Durch Aufrufen von PublicKeyCredential.signalCurrentUserDetails()
mit einer RP-ID, einer Nutzer-ID, einem Nutzernamen und einem Anzeigenamen kann der RP den Passkey-Anbieter über die aktualisierten Nutzerinformationen informieren. Es liegt im Ermessen des Passkey-Anbieters, wie er mit diesem Signal umgeht. Die Passkeys des Nutzers sollten jedoch mit den neuen Nutzerinformationen aktualisiert werden.
Diese API kann aufgerufen werden, wenn der Nutzername oder Anzeigename des Nutzers aktualisiert wird, und bei jeder Anmeldung, damit der Passkey-Anbieter diese Informationen mit dem Server synchronisieren kann.

Zusammenfassung
Mit der Signal API können Sie die Passkey-Anmeldung verbessern, da die Wahrscheinlichkeit eines unerwarteten Anmeldefehlers verringert wird. Mit der Signal API können vertrauende Parteien die Liste der vorhandenen Anmeldedaten und deren Metadaten signalisieren, damit sie Passkeys beim Passkey-Anbieter synchronisieren können.
Weitere Informationen zu Passkeys finden Sie unter Anmeldung ohne Passwort mit Passkeys.