Ein Deep Dive in die WebAuthn Immediate Mediation. Erfahren Sie, wie sie eine einzige Anmelde-Schaltfläche schafft, verwirrende QR-Codes vermeidet und einen intelligenteren Login-Flow aufbaut.
Vincent
Created: August 8, 2025
Updated: August 13, 2025
See the original blog version in English here.
60-page Enterprise Passkey Whitepaper:
Learn how leaders get +80% passkey adoption. Trusted by Rakuten, Klarna & Oracle
Der Übergang zu Passkeys schafft ein „Passkey-Paradoxon“: Einige User haben bereits Passkeys, während viele noch traditionelle Passwörter verwenden. Dies führt zu überladenen Anmeldebildschirmen mit mehreren Schaltflächen: „Mit Passwort anmelden“, „Mit Google anmelden“ und „Mit Passkey anmelden“. Diese Fragmentierung erzeugt Reibungsverluste. Ein User könnte auf einem neuen Gerät auf „Mit Passkey anmelden“ klicken, nur um dann mit einer verwirrenden QR-Code-Aufforderung konfrontiert zu werden, weil sein Passkey nicht lokal verfügbar ist. Das Kernproblem ist, dass die Website den Kontext des Users nicht kennt, bevor sie einen Authentifizierungs-Flow startet.
Eine Lösung besteht darin, zuerst die Identität abzufragen (Identifier-First) und dann die beste Anmeldemethode für den User zu bestimmen. Eine weitere potenzielle Lösung ist eine einzige, intelligente „Anmelden“-Schaltfläche, die für jeden User den nahtlosesten Flow orchestriert. Sie sollte direkt zur Eingabe eines Passkeys auffordern, wenn einer auf dem Gerät verfügbar ist, oder andernfalls reibungslos auf andere Methoden zurückgreifen.
Es wurde eine neue WebAuthn-Funktion angekündigt, die dies ermöglichen könnte:
Immediate Mediation (mediation: 'immediate'
).
Durch das Setzen dieser Eigenschaft in einem WebAuthn-API-Aufruf können Entwickler eine
intelligente, einheitliche Anmeldeerfahrung schaffen, die das Passkey-Paradoxon löst.
Dieser Artikel bietet eine entwicklerorientierte Analyse von mediation: 'immediate'
und
untersucht, was es ist, wie es funktioniert und wie man es implementiert.
Um Immediate Mediation zu verstehen, ist es hilfreich, zuerst die anderen Optionen zu kennen. User-Mediation in WebAuthn beschreibt, wie der Browser die Interaktion zwischen Ihrer Website (der Relying Party) und dem Authenticator des Users (z. B. Face ID, YubiKey) steuert.
Dies ist der klassische, explizite WebAuthn-Flow. Wenn eine
Relying Party navigator.credentials.get()
aufruft, ohne eine
mediation
-Präferenz anzugeben, zeigt der Browser immer ein modales Dialogfeld an.
Dieses Dialogfeld überlagert den Seiteninhalt, erfordert die sofortige Aufmerksamkeit des
Users und unterbricht jede andere Interaktion mit der Website.
mediation: 'conditional'
#Dieser Modus wurde eingeführt, um Usern den
Übergang zu Passkeys zu erleichtern,
und ist subtiler. Bei mediation: 'conditional'
wird die WebAuthn-Anfrage an ein
Eingabefeld (z. B. Benutzername) mit dem Attribut autocomplete="webauthn"
angehängt.
Wenn der User auf das Feld klickt, schlägt die Autofill-Benutzeroberfläche des Browsers
alle verfügbaren Passkeys vor.
mediation: 'immediate'
ist die Lösung für das Problem der „einzigen
Anmelde-Schaltfläche“. Es bietet einer Website eine zuverlässige Möglichkeit, die
Verfügbarkeit eines Passkeys zu prüfen, bevor eine Benutzeroberfläche angezeigt wird.
Anstatt den User über ein modales Fenster anzuweisen, sich mit einem Passkey zu
authentifizieren, fragt immediate
Mediation den Browser: „Ist für diesen User auf
diesem Gerät genau jetzt ein Passkey direkt verfügbar?“
Entscheidend ist, dass diese Abfrage nur nach lokal verfügbaren Anmeldedaten sucht (z. B. geräteinterne Authenticatoren wie Windows Hello oder Passkeys, die über einen Passwort-Manager synchronisiert wurden). Es ist darauf ausgelegt, den geräteübergreifenden QR-Code-Flow zu vermeiden, der ein häufiger Reibungspunkt ist.
Die Stärke dieser Funktion liegt in ihrem klaren, binären Ergebnis. Das von
navigator.credentials.get()
zurückgegebene Promise wird entweder erfolgreich sein oder
fehlschlagen, was dem Entwickler ein klares Signal gibt.
PublicKeyCredential
-Objekt
aufgelöst.navigator.credentials.get()
-Promise sofort mit einer DOMException
namens
NotAllowedError
abgelehnt.Der NotAllowedError
ist kein Bug, sondern eher ein Feature. Er ist ein zuverlässiges,
sofortiges Signal dafür, dass die Website mit einer alternativen Authentifizierungsmethode
fortfahren sollte. Dies ermöglicht es Entwicklern, einen einfachen try...catch
-Block zu
verwenden: Der try
-Block versucht den nahtlosen Passkey-Flow, und der catch
-Block
lauscht auf NotAllowedError
, um ein traditionelles Anmeldeformular zu rendern. Es löst
das Problem der einzigen Anmelde-Schaltfläche elegant, indem es einen einzigen
Einstiegspunkt schafft, der sich intelligent an den Kontext des Users anpasst.
Die Wahl des richtigen Mediation-Modus ist eine entscheidende UX-Entscheidung. Diese Tabelle bietet einen direkten Vergleich.
Merkmal / Verhalten | Modal (Standard) | Conditional UI (conditional ) | Immediate (immediate ) |
---|---|---|---|
API-Aufruf | navigator.credentials.get() | navigator.credentials.get({ mediation: 'conditional' }) | navigator.credentials.get({ mediation: 'immediate' }) |
Auslöser | Explizite User-Aktion (z. B. Klick auf Schaltfläche) | Seitenaufbau; UI bei Fokus auf Eingabefeld | Explizite User-Aktion (z. B. Klick auf Schaltfläche) |
UI-Präsentation | Zeigt immer sofort ein modales Dialogfeld an. | Zeigt eine nicht-modale Autofill-ähnliche UI an. | Zeigt nur dann ein modales Dialogfeld an, wenn ein lokales Credential gefunden wird. |
Verhalten bei keinem lokalen Credential | Zeigt UI für geräteübergreifende Flows (z. B. QR-Code) an. | Promise bleibt ausstehend, wird nie aufgelöst, kein Fehler wird geworfen. | Promise wird sofort mit NotAllowedError abgelehnt. |
Wissen der Website | Erfährt nichts, bis der User den Flow abschließt. | Erfährt nichts, wenn der User nicht interagiert. Höchste Privatsphäre. | Erfährt eine Information: ob ein lokales Credential existiert. |
Primärer Anwendungsfall | Dedizierte „Mit Passkey anmelden“-Schaltfläche. Explizite 2FA. | Einheitliche Anmelde-/Registrierungsformulare. Progressive Verbesserung von Passwortformularen. | Eine einzige, primäre „Anmelden“-Schaltfläche für eine gemischte User-Basis. |
Aktion des Entwicklers | Erfolg oder Abbruch durch den User behandeln. | Erfolg behandeln. Kein Fehlersignal, auf das reagiert werden kann. | Erfolg oder NotAllowedError behandeln, um eine Fallback-UI auszulösen. |
Hier ist eine praktische Schritt-für-Schritt-Anleitung zur Implementierung von
mediation: 'immediate'
.
Da mediation: 'immediate'
eine neue Funktion ist, ist eine robuste Feature-Erkennung
entscheidend.
// Feature-Erkennung ist für die progressive Verbesserung unerlässlich. let immediateMediationAvailable = false; if (window.PublicKeyCredential && PublicKeyCredential.getClientCapabilities) { try { const capabilities = await PublicKeyCredential.getClientCapabilities(); // Die 'immediateGet'-Fähigkeit signalisiert die Browser-Unterstützung. immediateMediationAvailable = capabilities.immediateGet === true; } catch (e) { console.error("Fehler beim Abrufen der Client-Fähigkeiten:", e); } }
navigator.credentials.get()
-Aufruf#Dieser Aufruf muss durch eine User-Aktion, wie einen Klick auf eine Schaltfläche, ausgelöst werden.
// Diese Funktion sollte der Event-Handler für Ihre primäre „Anmelden“-Schaltfläche sein. async function handleSignInClick() { if (!immediateMediationAvailable) { // Fallback auf die Anzeige eines alten Anmeldeformulars, wenn die Funktion nicht unterstützt wird. showLegacyLoginForm(); return; } try { // Fordern Sie bei jedem Versuch eine frische, zufällige Challenge von Ihrem Server an. const challenge = await fetchChallengeFromServer(); const publicKeyCredentialRequestOptions = { challenge: challenge, // Die vom Server bereitgestellte Challenge als Uint8Array rpId: "example.com", // Die allowCredentials-Liste MUSS für Immediate Mediation leer sein, // um die Privatsphäre des Users zu schützen. allowCredentials: [], }; const credential = await navigator.credentials.get({ publicKey: publicKeyCredentialRequestOptions, // Dies ist der Schlüssel, der den Immediate-Mediation-Flow aktiviert. mediation: "immediate", }); // Wenn das Promise aufgelöst wird, senden Sie das Credential zur Überprüfung an Ihren Server. await verifyCredentialOnServer(credential); } catch (error) { // Der catch-Block ist ein entscheidender Teil des Kontrollflusses. handleAuthError(error); } }
NotAllowedError
für einen reibungslosen Fallback behandeln#Im catch
-Block wird die „Intelligenz“ der einzigen Anmelde-Schaltfläche realisiert.
// Die Behandlung des NotAllowedError ist der Schlüssel zum Fallback-Mechanismus. function handleAuthError(error) { // Überprüfen Sie die 'name'-Eigenschaft der DOMException. if (error.name === "NotAllowedError") { // Dies ist das erwartete Signal, um das traditionelle Anmeldeformular anzuzeigen. console.log("Kein lokaler Passkey gefunden. Zeige altes Anmeldeformular an."); showLegacyLoginForm(); } else { // Dies behandelt andere potenzielle Fehler, wie z. B. wenn der User die Aufforderung ablehnt. console.error("Authentifizierungsfehler:", error); } }
Für die nahtloseste Erfahrung können Sie den Browser bitten, in derselben Anfrage sowohl
nach Passkeys als auch nach gespeicherten Passwörtern zu suchen, indem Sie
password: true
hinzufügen.
// Kombination von Passkeys und Passwörtern für eine wirklich einheitliche Anmeldeerfahrung. const credential = await navigator.credentials.get({ publicKey: publicKeyCredentialRequestOptions, password: true, // Bitten Sie den Browser, gespeicherte Passwörter einzubeziehen. mediation: "immediate", }); // Das zurückgegebene 'credential'-Objekt ist entweder ein PublicKeyCredential // oder ein PasswordCredential. Ihre serverseitige Logik muss beide behandeln.
conditional
-Anfrage (oft beim
Laden der Seite gestartet) kann eine neue immediate
-Anfrage blockieren. Erwägen Sie
die Verwendung eines AbortController
, um alle ausstehenden Anfragen abzubrechen,
bevor Sie eine neue starten.allowCredentials
-Einschränkung: Das allowCredentials
-Array muss leer
sein. Die Angabe von Credential-IDs führt zum Scheitern des Aufrufs. Dies ist eine
entscheidende Datenschutzmaßnahme, um zu verhindern, dass Websites nach bestimmten,
bekannten Usern suchen.mediation: 'immediate'
wurde mit einem klaren Verständnis seiner Sicherheits- und
Datenschutzkompromisse entwickelt.
Der Kernkompromiss ist ein „Ein-Bit-Leak“. Durch das Timing der Auflösung des Promise kann eine Relying Party eine Information ableiten: ob das Promise sofort abgelehnt wurde (kein lokales Credential) oder verzögert wurde (eine UI-Aufforderung wurde angezeigt, weil ein lokales Credential gefunden wurde). Der Zweck dieses Leaks ist es, eine bessere UX zu ermöglichen.
Die Entwickler haben das Missbrauchspotenzial (z. B. User-Tracking) vorhergesehen und mehrere nicht verhandelbare Schutzmaßnahmen eingebaut:
allowCredentials
-Liste: Das allowCredentials
-Array muss leer sein.
Dies verhindert, dass eine Website diese Funktion nutzt, um zu prüfen, ob ein
bestimmter bekannter User die Seite besucht.iframe
von einer anderen Herkunft) nicht erlaubt, um seitenübergreifendes
Tracking zu verhindern.Diese Maßnahmen stellen sicher, dass die zentralen Sicherheitsgarantien von WebAuthn unangetastet bleiben. Die Authentifizierungszeremonie selbst bleibt unverändert und Phishing-resistent.
mediation: 'immediate'
ist eine erweiterte Funktion aus der
WebAuthn Level 3 Spezifikation, und ihre Einführung ist
noch im Gange. Stand Mitte 2025 ist eine Strategie der progressiven Verbesserung
unerlässlich.
Browser | Status | Anmerkungen & Quelle |
---|---|---|
Chrome | Entwickler-Testphase | Verfügbar über das Flag experimental-web-platform-features . Tracking-Bug. |
Edge | In Entwicklung (erwartet) | Als Chromium-Browser sollte die Unterstützung der von Chrome folgen. |
Safari (WebKit) | In Prüfung | WebKit Standards Positions. Keine öffentliche Zusage. |
Firefox (Gecko) | In Prüfung | Mozilla Standards Positions. Keine öffentliche Zusage. |
Obwohl mediation: 'immediate'
ein großartiges, grundlegendes Werkzeug für eine
intelligentere Anmelde-Schaltfläche bietet, ist es wichtig, es von einer umfassenderen
„Passkey Intelligence“-Lösung
zu unterscheiden, wie sie von Corbado angeboten wird. Beide zielen darauf ab, das
Passkey-Paradoxon zu lösen und die Akzeptanz zu erhöhen, tun dies aber auf
unterschiedliche Weise.
Merkmal | mediation: 'immediate' | Passkey Intelligence (z. B. Corbado) |
---|---|---|
Funktionsweise | Ein nativer Browser-API-Aufruf, der nach lokal verfügbaren Passkeys auf dem aktuellen Gerät sucht. | Ein Backend-Dienst, der Daten über User-Geräte, Authenticatoren und die Anmeldehistorie über Sitzungen hinweg sammelt und analysiert. |
Geliefertes Signal | Ein einfaches, binäres Signal: Ein lokaler Passkey existiert (UI-Aufforderung ) oder nicht (NotAllowedError ). | Umfassende, kontextbezogene Einblicke, z. B. „Dieser User hat sich gerade mit einem Passwort auf einem Passkey-fähigen Gerät angemeldet, das er oft benutzt.“ |
Hauptvorteil | Sehr schnelle, native Prüfung mit minimalem Netzwerk-Overhead. | Universelle Verfügbarkeit, unabhängig von der Browser-/Betriebssystem-Unterstützung für neue WebAuthn-Funktionen. Tiefere Einblicke für eine maßgeschneiderte UX. |
Hauptabhängigkeit | Erfordert aktuelle Browser- und Betriebssystem-Unterstützung, die noch nicht universell ist. | Integration mit einem Backend-Dienst. |
Passkey Intelligence geht einen Schritt weiter, indem es Daten über die Zeit sammelt und auswertet. Dies ermöglicht anspruchsvollere und zeitnahe User-Interventionen. Zum Beispiel kann ein Passkey Intelligence-Backend erkennen:
Dieser datengesteuerte Ansatz ist unabhängig von der Browser-Unterstützung für
mediation: 'immediate'
, was bedeutet, dass er einen intelligenteren Anmelde-Flow für
alle Ihre User bereitstellen kann, und zwar sofort.
Das Beste aus beiden Welten
Letztendlich schließen sich diese beiden Ansätze nicht gegenseitig aus; sie ergänzen sich. Die ideale Lösung kombiniert sie:
mediation: 'immediate'
als eines seiner Signale auf
unterstützten Browsern verwenden, um eine schnelle, erste Prüfung durchzuführen.Indem Sie die native Geschwindigkeit von mediation: 'immediate'
mit den tiefen
Einblicken eines
Passkey Intelligence-Backends
kombinieren, können Sie die nahtloseste, anpassungsfähigste und effektivste
Anmeldeerfahrung bieten und jeden User sanft in eine passwortlose Zukunft führen.
Immediate Mediation ist ein großartiges Upgrade für die Anmeldeerfahrung. Es liefert die nötige Intelligenz, um häufige Reibungs- und Verwirrungspunkte für User während des Übergangs zu Passkeys zu beseitigen.
immediate
Mediation die kognitive Last des Users. Er
muss sich nicht mehr daran erinnern, welche Authentifizierungsmethode er eingerichtet
hat, oder aus einer überladenen Liste von Optionen wählen. Der Anmeldeprozess wird
einfacher und intuitiver.mediation: 'immediate'
nur nach lokalen Anmeldedaten sucht, wird dieser verwirrende
Zustand vollständig vermieden. Anstatt dass der User den Flow abbricht, erhält die
Anwendung ein klares Signal (NotAllowedError
), um reibungslos auf eine andere Methode
zurückzugreifen, was zu einer reibungsloseren User Journey führt.Immediate Mediation ist eine neue WebAuthn-Funktion, die die fragmentierte Anmeldeerfahrung während der Übergangsphase zu Passkeys löst. Sie ermöglicht die Schaffung einer einzigen, intelligenten „Anmelden“-Schaltfläche, die sich an den Kontext des Users anpasst und so Verwirrung und Reibungsverluste beseitigt. Obwohl sie einen kalkulierten Datenschutzkompromiss eingeht, enthält sie robuste Schutzmaßnahmen, um Risiken zu mindern, ohne die Kernsicherheit von WebAuthn zu beeinträchtigen.
Für Entwickler ist der Weg nach vorne die progressive Verbesserung. Bauen Sie eine solide
Basiserfahrung auf und ergänzen Sie diese mit immediate
Mediation für unterstützte
Browser. Die Einführung dieser Funktion ist ein strategischer Schritt, um die
Passkey-Akzeptanz zu beschleunigen, die
Sicherheit zu erhöhen, Betriebskosten zu senken und
die Konversion zu verbessern.
Die Implementierung dieser fortschrittlichen Authentifizierungs-Flows kann komplex sein.
Die Enterprise Passkey Platform von Corbado abstrahiert diese Komplexität. Unsere
Infrastruktur übernimmt die optimale
Flow-Orchestrierung – einschließlich bedingter und immediate
Mediation – und ermöglicht
es Ihrem Team, eine hochmoderne, reibungslose Authentifizierungserfahrung mit Zuversicht
bereitzustellen.
Enjoyed this read?
🤝 Join our Passkeys Community
Share passkeys implementation tips and get support to free the world from passwords.
🚀 Subscribe to Substack
Get the latest news, strategies, and insights about passkeys sent straight to your inbox.
Related Articles
Table of Contents