Nutzern die Nutzung von Passkeys erleichtern

Veröffentlicht: 9. Mai 2025

Passkeys bieten eine starke Authentifizierung, die vor Phishing schützt. Nutzer dazu zu bewegen, sie zu übernehmen, kann jedoch schwierig sein. Mit der automatischen Passkey-Erstellung können Sie Passkeys für Ihre Nutzer im richtigen Moment erstellen, sofern sie bereits ein Passwort für Ihre Website gespeichert haben. Die bedingte Erstellung, die die automatische Passkey-Erstellung ermöglicht, ist Teil der WebAuthn-Spezifikation.

Funktionsweise

Um Nutzern die Einführung von Passkeys zu erleichtern, können Sie die WebAuthn API-Funktion Conditional Create (Bedingtes Erstellen) verwenden. Mit „Conditional Create“ kann Ihre Website einen Passkey für den Nutzer anfordern, ohne dass dieser etwas tun muss.

Dieser Ablauf funktioniert, wenn die folgenden Bedingungen erfüllt sind:

  • Der Nutzer hat ein Passwort in seinem Standardpasswortmanager gespeichert.
  • Das Passwort wurde vor Kurzem verwendet. Rufen Sie „Conditional Create“ idealerweise direkt nach einer erfolgreichen passwortbasierten Anmeldung auf.

Wenn beide Bedingungen erfüllt sind, können Sie den Passwortmanager auffordern, einen Passkey für den Nutzer zu erstellen, indem Sie „Conditional Create“ aufrufen. Nachdem der Passkey erfolgreich erstellt wurde, wird der Nutzer je nach Passwortmanager benachrichtigt.

Ablauf für Passkey-Anfragen mit bedingter Erstellung.

Kompatibilität

„Conditional Create“ wird von Safari unter macOS und allen Browsern unter iOS sowie von Chrome für Desktop und Chrome für Android unterstützt.

Bedingtes Erstellen implementieren

Die automatische Passkey-Erstellung basiert auf einer WebAuthn API-Funktion namens Conditional Create. Dies sind reguläre create()-WebAuthn-Anfragen, bei denen der Parameter mediation auf "conditional" gesetzt ist. Das funktioniert ähnlich wie das automatische Ausfüllen von Passkeys für get()-Anfragen.

Verwenden Sie „Conditional Create“, nachdem sich der Nutzer mit einem Passwort angemeldet hat. Ob die Erstellung erfolgreich ist, hängt vom Passwortmanager und bestimmten Bedingungen ab. Diese Bedingungen können je nach Passwortmanager variieren und sich im Laufe der Zeit ändern. In Chrome mit dem Google Passwortmanager (GPM) muss sich der Nutzer beispielsweise vor Kurzem mit einem gespeicherten Passwort für die Website angemeldet haben.

Wenn der Browser den Passkey erfolgreich erstellt, wird ein Anmeldedatenobjekt mit dem öffentlichen Schlüssel zurückgegeben. Senden Sie diese Anmeldedaten an Ihr Backend, um die Registrierung abzuschließen und die zukünftige Authentifizierung zu ermöglichen.

Funktionserkennung

Sie können feststellen, ob „Conditional Create“ im Browser verfügbar ist, indem Sie PublicKeyCredential.getClientCapabilities() aufrufen. Prüfen Sie, ob ein zurückgegebenes Objekt true für das Attribut conditionalCreate enthält.

if (window.PublicKeyCredential && PublicKeyCredential.getClientCapabilities) {
  const capabilities = await PublicKeyCredential.getClientCapabilities();
  if (capabilities.conditionalCreate) {
    // Conditional create is available
  }
}

Wenn getClientCapabilities nicht verfügbar ist, ist auch „Bedingtes Erstellen“ nicht verfügbar.

Passkey bedingt erstellen

Um einen Passkey automatisch zu erstellen, rufen Sie navigator.credentials.create() auf, aber mit mediation: "conditional" wie unten gezeigt.

const cred = await navigator.credentials.create({
  publicKey: options,
  // Request conditional creation
  mediation: 'conditional'
});

Sie sollten die automatische Passkey-Erstellung unmittelbar nach der Anmeldung des Nutzers verwenden, um die Kriterien des Passwortmanagers für die automatische Erstellung bestmöglich zu erfüllen.

Sie können die resultierende Anmeldedaten für den öffentlichen Schlüssel an den Server senden, um den Passkey zu bestätigen und zu registrieren. Achten Sie darauf, dass der Nutzer auf dem Server angemeldet ist.

Vorsichtsmaßnahmen

Die bedingte Erstellung an sich ist nicht schwierig zu implementieren, aber es gibt einige Einschränkungen, wenn diese Funktion in ein bestehendes System integriert wird.

Anwesenheit und Überprüfung von Nutzern auf dem Server ignorieren

Die Registrierungsantwort gibt sowohl „User Presence“ (Nutzerpräsenz) als auch „User Verified“ (Nutzer bestätigt) als false zurück. Der Server sollte diese Flags bei der Anmeldedatenbestätigung ignorieren.

Laufenden WebAuthn-Aufruf abbrechen, bevor ein Passkey automatisch erstellt wird

Wenn der RP erwartet, dass sich der Nutzer entweder mit einem Passkey oder einem Passwort anmeldet, ist ein bedingter GET-Vorgang die beste Wahl. Dies kann dazu führen, dass der bedingte GET-Aufruf abgebrochen wird, bevor ein bedingter CREATE-Vorgang ausgeführt wird.

Dazu müssen Sie AbortController verwenden und .abort() aufrufen.

// To abort a WebAuthn call, instantiate an AbortController.
const controller = new AbortController();

const cred = await navigator.credentials.get({
  publicKey: options,
  signal: controller.signal,
  // Request conditional get
  mediation: 'conditional'
});

// Abort the call
controller.abort();

Ausnahmen ordnungsgemäß ignorieren

Wenn ein bedingter Passkey erstellt wird, gibt es einige Fälle, in denen Sie Ausnahmen ignorieren sollten:

  • InvalidStateError: Ein Passkey ist bereits beim Passkey-Anbieter vorhanden. Vergessen Sie nicht, excludeCredentials anzugeben.
  • NotAllowedError: Das Erstellen eines Passkeys erfüllt die Bedingung nicht.
  • AbortError: Der WebAuthn-Aufruf wird abgebrochen.

Wenn in diesen Fällen Fehler angezeigt werden, kann das den Nutzer verwirren, da der Browser sie im Hintergrund verarbeitet: Er zeigt nur bei Erfolg eine Benachrichtigung an und bei Fehlern werden keine sichtbaren Meldungen ausgelöst.

Signal, wenn die Registrierung eines Passkeys fehlschlägt

Wenn ein Passkey erstellt, aber nicht auf dem Server registriert wurde, schlägt der Anmeldeversuch des Nutzers fehl. Das kann passieren, wenn die Liste der Passkeys zwischen dem Passkey-Anbieter und dem Server nicht übereinstimmt.

Um solche Umstände zu vermeiden, verwenden Sie die Signal API, um sie konsistent zu halten.

Upgrade von der passwortlosen Anmeldung wird nicht unterstützt

Zu diesem Zeitpunkt ist das bedingte Erstellen eines Passkeys davon abhängig, dass der Nutzer ein gültiges Passwort eingibt. Das bedeutet, dass passwortlose Anmeldemethoden wie Magic Links, die Bestätigung der Telefonnummer oder die Identitätsföderation die Bedingung nicht erfüllen.

Zusammenfassung

Durch die automatische Passkey-Erstellung kann die Einführung von Passkeys auf Ihrer Website beschleunigt werden. So können Nutzer Ihrer Website von Passwörtern auf eine sicherere Authentifizierungsmethode umsteigen.

Weitere Informationen zu Passkeys finden Sie unter Anmeldung ohne Passwort mit Passkeys.