Diese Seite wurde automatisch übersetzt. Lesen Sie die englische Originalversion hier.
| Ansatz | Verbreitung | Passkeys erstellen | Passkeys nutzen | Passkeys verwalten | Technische Komplexität | OAuth-Unterstützung |
|---|---|---|---|---|---|---|
| Native Implementierung | 🟢🟢🟢 | Hohe Verbreitung, beste UX, nahtlose Biometrie | Sofortige, stille Authentifizierung | Volle native Kontrolle | Mittel-Hoch | Erfordert separaten Flow |
| System-WebView | 🟢🟢 | Gute Verbreitung, browserähnliches Erlebnis | Standard-Browser-UX, geteilter Schlüsselbund | Browserbasiertes Management | Niedrig | Hervorragend |
| Embedded-WebView | 🟢 | Geringere Verbreitung, erfordert mehr Setup | Native Unterstützung iOS & Android (WebKit 1.12.1+), keine Conditional UI | Begrenzte Kontrolle | Mittel-Hoch | N/A |
Hinweis: System- und Embedded-WebView werden oft kombiniert, wobei System-WebView den Login übernimmt (mit automatischem Teilen der Anmeldedaten), und Embedded-WebView dann das Passkey-Management in den Einstellungen rendert.
Wichtige Entscheidungsfaktoren:
Moderne mobile Plattformen bieten drei verschiedene Ansätze zur Integration von Passkeys in Ihre native App, jeweils mit unterschiedlichen Vor- und Nachteilen für UX, technische Komplexität und OAuth-Kompatibilität:
Native Implementierung: Erstellen Sie Passkey-Flows direkt in Ihrer App mithilfe von Plattform-APIs (iOS AuthenticationServices, Android Credential Manager). Bietet die beste UX mit nahtloser biometrischer Authentifizierung, erfordert jedoch einen mittleren bis hohen technischen Implementierungsaufwand.
System-WebView: Verwenden Sie die Browser-Komponente der Plattform (iOS ASWebAuthenticationSession / SFSafariViewController, Android Chrome Custom Tabs), um die Authentifizierung zu handhaben. Hervorragend geeignet für OAuth-basierte Login-Flows und teilt Anmeldedaten mit dem Systembrowser.
Embedded-WebView: Betten Sie einen anpassbaren Web View (iOS WKWebView, Android WebView) in Ihre App ein, um Web-Authentifizierung in einem nativen App-Rahmen wiederzuverwenden. Bietet ein natives Erscheinungsbild ohne URL-Leisten und volle Kontrolle über die WebView-UI. Erfordert zusätzliches Setup einschließlich Berechtigungen und Entitlements (iOS) sowie WebView-Konfiguration mit AndroidX WebKit 1.12.1+ (Android), um Passkey-Funktionalität zu aktivieren.
Die richtige Wahl hängt von der Authentifizierungsarchitektur Ihrer App ab, ob Sie OAuth-Anbieter nutzen, wie viel Kontrolle Sie über die UI benötigen und ob Sie Native-First entwickeln oder Web-Komponenten wiederverwenden.
Enterprise-Passkey-Whitepaper. Praxisnahe Leitfäden, Rollout-Muster und KPIs für Passkey-Programme.
Aktuelle Artikel
Eine native Passkey-Implementierung bietet die optimale UX, mit Authentifizierungs-Flows, die direkt über plattformspezifische APIs in die Benutzeroberfläche Ihrer App integriert sind. Nutzer profitieren von nativen Plattform-Dialogen, nahtloser biometrischer Verifizierung und den schnellstmöglichen Login-Zeiten.
Wann Sie die native Implementierung wählen sollten:
preferImmediatelyAvailableCredentials nutzen, um
automatisch ein Passkey-Overlay anzuzeigen,
wenn Passkeys verfügbar sind, was das schnellste Login-Erlebnis bietet, ohne dass eine
Kennung eingegeben werden mussWichtiger Vorteil: preferImmediatelyAvailableCredentials()
Native Implementierungen können preferImmediatelyAvailableCredentials() nutzen, um ein
automatisches Passkey-Overlay
zu erstellen, das direkt beim App-Start erscheint, wenn Passkeys verfügbar sind. Dieser
usernameless Flow bietet das schnellstmögliche Login-Erlebnis – Nutzer sehen ihre Passkeys
sofort, ohne vorher eine Kennung eingeben zu müssen. Diese Fähigkeit ist exklusiv für
native Implementierungen und in WebView-Varianten nicht verfügbar.
Das untenstehende Diagramm veranschaulicht, wie die native Authentifizierung einen schnelleren Nutzerpfad im Vergleich zum Conditional-UI-Ansatz des WebViews bietet:
Das automatische Overlay von Native bietet eine überlegene UX mit höheren Passkey-Nutzungsraten, da die Authentifizierung sofort beim App-Start beginnt, während WebView-Implementierungen erfordern, dass Nutzer zuerst mit Eingabefeldern interagieren.
Technische Anforderungen im Überblick:
Die native Passkey-Integration erfordert kryptografisches Vertrauen zwischen Ihrer App und Ihrer Webdomain. Ohne dieses wird das OS alle WebAuthn-Operationen ablehnen. Wichtige Anforderungen:
/.well-known/Der große Vorteil: Auf Ihrer Website erstellte Passkeys funktionieren nahtlos in Ihrer App und umgekehrt.
Die native Implementierung von Passkeys unter iOS umfasst das AuthenticationServices-Framework von Apple, das eine API für WebAuthn-Operationen bereitstellt:
Schlüsselkomponenten:
ASAuthorizationController: Verwaltet den Authentifizierungs-FlowASAuthorizationPlatformPublicKeyCredentialProvider: Erstellt Passkey-AnfragenEntwickler-Tipps
?mode=developer an Ihre AASA-URL an, um ein frisches
Abrufen zu erzwingenAndroids native Passkey-Implementierung nutzt die Credential Manager API (oder die ältere FIDO2 API für Abwärtskompatibilität):
Schlüsselkomponenten:
CredentialManager: Zentrale API für alle Credential-OperationenCreatePublicKeyCredentialRequest: Für die
Passkey-RegistrierungGetCredentialRequest: Für die Passkey-AuthentifizierungHinweis: Unter Android fehlen derzeit die iOS-Conditional-UI-Tastaturvorschläge in nativen Apps (obwohl Conditional UI in Web-Apps funktioniert)
Die native Implementierung von Passkeys bringt wichtige Herausforderungen und Lektionen mit sich: Die Integration auf Betriebssystemebene kann Probleme über verschiedene Geräte und OS-Versionen hinweg aufdecken.
Obwohl Sie Passkeys mit rohen Plattform-APIs implementieren können, beschleunigen speziell dafür entwickelte SDKs die Entwicklung erheblich, indem sie die Komplexität von WebAuthn, Edge-Cases und integrierte Telemetrie handhaben. SDKs bieten auch mockbare Schnittstellen für Unit-Tests (entscheidend, da Sie Biometrie in Simulatoren nicht testen können).
Empfehlung: Für native Implementierungen empfehlen wir die Verwendung der Corbado SDKs (iOS Swift Passkey SDK, Android Kotlin Passkey SDK), die zahlreiche Edge-Cases abdecken, die durch Produktions-Deployments entdeckt wurden, und zusätzliche Telemetrie und Testmöglichkeiten bieten.
Igor Gjorgjioski
Head of Digital Channels & Platform Enablement, VicRoads
We hit 80% mobile passkey activation across 5M+ users without replacing our IDP.
See how VicRoads scaled passkeys to 5M+ users — alongside their existing IDP.
Read the case studySystem-WebViews verwenden die native Browser-Komponente der Plattform, um die Authentifizierung innerhalb Ihrer App zu handhaben. Im Gegensatz zu vollständig nativen Implementierungen zeigen System-WebViews Webinhalte mit dem eigentlichen Systembrowser (Safari unter iOS, Chrome unter Android) an und behalten geteilte Cookies, gespeicherte Anmeldedaten und die bekannten Browser-Sicherheitsindikatoren bei.
Wann Sie System-WebView wählen sollten:
Wichtige Vorteile:
Plattform-Komponenten:
ASWebAuthenticationSession (empfohlen für Auth-Flows) oder
SFSafariViewController (allgemeines Browsen)Große Unternehmen wie Google und GitHub haben diesen Ansatz übernommen, um ihren mobilen Apps den Passkey-Login über WebView-Overlays auf bestehenden Web-Authentifizierungsseiten hinzuzufügen. Dies funktioniert gut, wenn vollständig native Authentifizierungs-Neubauten nicht sofort machbar sind.
iOS bietet zwei primäre System-WebView-Komponenten für die Authentifizierung:
ASWebAuthenticationSession (Empfohlen für Authentifizierung):
SFSafariViewController (Allgemeines Browsen):
| Feature | ASWebAuthenticationSession | SFSafariViewController |
|---|---|---|
| Primärer Anwendungsfall | Authentifizierungs-Flows | Allgemeines Web-Browsen |
| OAuth/OIDC | Hervorragend | Gut |
| Passkey-Unterstützung | Ja | Ja |
| Anpassbarkeit | Begrenzt | Minimal |
Wenn Ihre App OAuth-basierten Login verwendet, ist ASWebAuthenticationSession die
empfohlene Wahl, da es speziell für Authentifizierungsszenarien entwickelt wurde und die
beste Balance aus Sicherheit und UX bietet.
Chrome Custom Tabs (CCT) bieten ein Chrome-basiertes Authentifizierungserlebnis innerhalb Ihrer App:
Wichtige Funktionen:
OAuth-Integration: Chrome Custom Tabs sind das Android-Äquivalent zur iOS ASWebAuthenticationSession und bieten exzellente OAuth-Unterstützung bei gleichzeitigem Zugriff auf gespeicherte Passkeys.
Testen Sie Passkeys in einer Live-Demo.
Embedded-WebViews bieten volle Kontrolle über das Rendering von Webinhalten innerhalb Ihrer App und ermöglichen die direkte Manipulation von Cookies, Sitzungen und Navigation ohne URL-Leiste. Diese Kontrolle geht jedoch mit zusätzlichen technischen Anforderungen einher, um Passkey-Funktionalität zu aktivieren.
Wann Sie Embedded-WebView wählen sollten:
Wichtiger Kontext:
Viele Apps verwenden einen hybriden Ansatz: System-WebView übernimmt die anfängliche OAuth-Authentifizierung (wo Passkeys nahtlos funktionieren), dann wird zu Embedded-WebView für den Post-Auth-Bereich gewechselt, um Passkeys in den Einstellungen zu verwalten. Herausforderungen entstehen, wenn man versucht, Passkeys direkt innerhalb von Embedded-WebViews zu verwenden.
Technische Anforderungen:
Embedded-WebViews erfordern im Vergleich zu System-WebViews ein zusätzliches Setup:
Plattform-Komponenten:
WKWebViewandroid.webkit.WebViewKompromisse:
Bei der Implementierung von Passkeys über WebViews ist das Verständnis der Unterscheidung zwischen System-WebViews und Embedded-WebViews entscheidend. Die drei oben skizzierten Ansätze (Native Implementierung, System-WebView und Embedded-WebView) bedienen jeweils unterschiedliche Anwendungsfälle.
Unter iOS haben Sie mehrere Optionen zur Anzeige von Webinhalten in der App:
Unter Android sind die Hauptoptionen:
android.webkit.WebView), im
Wesentlichen ein Mini-Browser, der in Ihre Activities eingebettet werden kann. Er ist
stark anpassbar, läuft aber im Prozess Ihrer App.In den folgenden Abschnitten werden wir uns etwas eingehender mit diesen WebView-Typen für iOS und Android befassen und diskutieren, welche für Passkey-Authentifizierungs-Flows am besten geeignet sein könnten.
Abonnieren Sie unseren Passkeys Substack für aktuelle News.
Apples Plattform bietet die drei oben genannten WebView-Optionen. Ihre Wahl beeinflusst, wie reibungslos Passkeys innerhalb der App genutzt werden können:
Um das unterschiedliche WebView-Verhalten in iOS zu testen, empfehlen wir die App WebView - WKWebView and UIWebView rendering.
WKWebView ist eine vielseitige WebView-Komponente für iOS. Entwickler können ein WKWebView einbetten, um Webinhalte mit hohem Maß an Kontrolle über UI und Verhalten zu rendern. WKWebView verwendet dieselbe Rendering-Engine wie Safari, ist also sehr performant und unterstützt moderne Webfunktionen. Theoretisch kann WKWebView WebAuthn (und damit Passkeys) verarbeiten, wenn es richtig konfiguriert ist, beachten Sie jedoch, dass einige erweiterte Browserfunktionen aus Sicherheitsgründen eingeschränkt sein könnten. Worauf man achten muss, ist, dass WKWebView standardmäßig keine Cookies oder Schlüsselbunddaten mit Mobile Safari teilt. Nutzer müssen sich möglicherweise neu anmelden, da ihre WebView-Sitzung von der Safari-Sitzung isoliert ist. Da der WKWebView-Inhalt von der App vollständig angepasst werden kann, sieht der Nutzer auch keine Adressleiste oder Safari-UI – was großartig fürs Branding ist, aber bedeutet, dass der Nutzer weniger Hinweise hat, um die Legitimität der Seite zu überprüfen (ein Anliegen bezüglich Anti-Phishing). Einige Apps haben WKWebView sogar missbraucht, um Skripte einzuschleusen oder Inhalte zu verändern (z. B. wurde bei TikTok festgestellt, dass es Tracking-JS über seinen In-App-Browser injiziert), man muss also vorsichtig sein, WKWebView auf sichere und vertrauenswürdige Weise zu nutzen.
SFSafariViewController bietet ein In-App-Safari-Erlebnis. Wenn Sie eine URL mit dem SFSafariViewController öffnen, ist es fast so, als ob Sie sie im echten Safari-Browser öffnen, außer dass der Nutzer innerhalb der UI Ihrer App bleibt. Der Vorteil für Passkeys ist erheblich: Da es im Wesentlichen Safari ist, sind der iCloud-Schlüsselbund und gespeicherte Passkeys des Nutzers zugänglich. Beachten Sie, dass Cookies unter iOS 11+ nicht geteilt werden. Das bedeutet, wenn der Nutzer bereits einen Passkey für Ihre Website hat, kann Safari ihn finden und sogar das Conditional UI Autocomplete für einen einfachen Login anzeigen. SFSafariViewController ist weniger anpassbar (Sie können die Toolbar nicht großartig ändern), handhabt aber automatisch viele Sicherheits- und Datenschutzfunktionen. Die URL-Leiste wird zusammen mit dem Vorhängeschloss-Symbol für HTTPS angezeigt, was Nutzern das Vertrauen gibt, dass sie sich auf der richtigen Domain befinden. Generell gilt SFSafariViewController als sicherer als ein rohes WKWebView und ist einfacher zu implementieren (Apple stellt es als Drop-in zur Verfügung). Der größte Kompromiss besteht darin, dass Sie etwas Kontrolle über das Look & Feel opfern. Für einen Authentifizierungs-Flow ist das normalerweise akzeptabel. Die Priorität liegt hier bei Sicherheit und einfacher Anmeldung, was SFSafariViewController hervorragend macht, indem er den Safari-Kontext nutzt.
| WKWebView | SFSafariViewController | |
|---|---|---|
| User experience | - Natives Gefühl: Nutzer könnten das Gefühl haben, dass der Webinhalt ein nativer Teil der App ist, da Entwickler das Look and Feel an das App-Design anpassen können. - Autofill: Autofill mit Daten aus Safari ist möglich | - Nahtlos: Nahtloses UX unter Nutzung der Safari-Einstellungen des Nutzers, was ein konsistentes Web-Browsen zwischen nativer App und Browser gewährleistet. |
| Developer experience | - Stark anpassbar: Umfangreiche Anpassungen und Konfigurationen verfügbar - Flexibel: Viele APIs für die Interaktion mit Webinhalten | - Mäßig anpassbar: Begrenzte Anpassungsoptionen, besonders im Vergleich zu WKWebView - Einfach: Einfacher zu implementieren im Vergleich zu WKWebView |
| Performance | - Eher langsam: Abhängig von der Implementierung und dem Webinhalt können die Ladezeiten optimiert werden, sind aber möglicherweise dennoch langsamer als SFSafariViewController aufgrund der zusätzlichen Verarbeitung benutzerdefinierter Features und Interaktionen. | - Eher schnell: Bietet typischerweise eine bessere Performance, da es die Safari-Engine nutzt, die für Geschwindigkeit und Effizienz optimiert ist und schnelle Ladezeiten für Webseiten liefert. |
| Trust and recognition | - URL-Anzeige nicht erforderlich: WKWebView zeigt oft die URL nicht an, was es für Nutzer schwieriger macht, die Webseite zu verifizieren. Potenzial für bösartige Apps, dieses Verhalten nachzuahmen und Anmeldedaten abzufischen. | - Browserähnliches Erlebnis: Rendert Webseiten mittels Safari und bietet ein "browserähnliches" Erlebnis. Nutzer können die URL sehen und auf Safaris Auto-Fill-Funktionen zugreifen, was durch die vertraute Oberfläche potenziell mehr Vertrauen schafft. |
| Isolation | - Getrennt: Cookies und Sessions sind von Safari getrennt; Nutzer werden nicht automatisch in einem WKWebView eingeloggt sein. | - Getrennt: Cookies und Sessions sind von Safari getrennt; Nutzer werden auch in SFSafariViewController nicht automatisch eingeloggt sein. |
| Vulnerabilities | - Sicher: Von Natur aus sicher dank Apples App-Sandboxing, aber Verhalten und Sicherheit hängen von der App-Implementierung ab. Potenzielle Schwachstellen, falls nicht korrekt implementiert. | - Sicherer: Profitiert von Safaris eingebauten Sicherheitsfunktionen, einschließlich Anti-Phishing und Warnungen vor bösartigen Websites. Generell als sicherer für die Anzeige von Webinhalten betrachtet als WKWebView aufgrund dieser Funktionen und der Vertrautheit der Nutzer mit Safari. |
| Other | - Funktionen nicht verfügbar: Einige Browserfunktionen (z. B. WebAuthn) könnten aufgrund von Sicherheitsbedenken und dem Ausführen von WKWebView im App-Kontext nicht vollständig zugänglich sein. - JavaScript-Injektion: Einige Apps, z. B. TikTok, injizieren Tracking-JavaScript in ihr In-App-WKWebView oder beschränken die Nutzerkontrolle (z. B. Facebook) - Datenschutzprobleme: Mehr Community-Feedback bezüglich Datenschutz | - Keine JavaScript-Injektion: Erlaubt nicht die Ausführung von JavaScript aus der App, was Sicherheit und Datenschutz verbessert. Unterstützt außerdem keine JavaScript-Alerts oder -Bestätigungen, was die UX auf bestimmten Webseiten beeinträchtigen kann. - Reader Mode: Bietet einen Reader-Modus für eine saubere, leicht lesbare Version von Artikeln. |
SFAuthenticationSession / ASWebAuthenticationSession – Diese Klassen (letzteres ist der neuere, Swift-freundliche Name) sind speziell für Login-Flows wie OAuth oder OpenID Connect entwickelt. Wenn Sie einen Nutzer über eine Webseite (vielleicht bei einem externen IdP) authentifizieren müssen, sind diese Sitzungen die empfohlene Wahl unter iOS. Sie sind SFSafariViewController sehr ähnlich, da sie unter der Haube den Safari-Browser nutzen und Cookies/Speicher mit Safari teilen. Der entscheidende Unterschied ist, dass SFAuthenticationSession den Nutzer immer darauf hinweist, dass die App sich über eine Webseite authentifizieren möchte (für das Nutzerbewusstsein) und automatisch die vorhandene Safari-Sitzung des Nutzers verwendet, falls verfügbar.
Der Vorteil ist ein nahtloses SSO-Erlebnis – wenn der Nutzer bereits beim Anbieter in Safari eingeloggt ist, kann diese Sitzung das Cookie nutzen, um einen erneuten Login zu vermeiden. Für Passkeys ist dies wichtig, da dies bedeutet, dass jeder Passkey, der in Safari/im iCloud-Schlüsselbund gespeichert ist, auch hier verwendet werden kann. Apples offizielle Richtlinie lautet, ASWebAuthenticationSession für alles zu verwenden, was wie ein Login-Flow aussieht. Die Vorteile sind verbesserter Datenschutz (Ihre App sieht nie die Anmeldedaten oder Cookies, Safari handhabt das) und integrierter SSO-Support. Der Nachteil ist, dass es auf Auth-Flows beschränkt ist (Sie würden es nicht verwenden, um einfach nur beliebige Webinhalte in Ihrer App zu rendern). Zusammenfassend lässt sich sagen: Wenn Sie sich unter iOS für einen WebView-Ansatz entscheiden, ist ASWebAuthenticationSession typischerweise die beste Wahl für die Implementierung von Passkeys, da es sicher ist, den Status mit Safari teilt und speziell für die Authentifizierung entwickelt wurde.
Sehen Sie, wie viele Menschen Passkeys tatsächlich nutzen.
Unter Android liegt die Entscheidung für ein WebView zwischen dem klassischen WebView und Chrome Custom Tabs:
Um das unterschiedliche WebView-Verhalten unter Android zu testen, empfehlen wir die App WebView vs Chrome Custom Tabs.
Android WebView (android.webkit.WebView) ist eine Komponente, mit der Sie Webseiten in Ihr Activity-Layout einbetten können. Es ist ähnlich wie WKWebView, da es Ihnen volle Kontrolle gibt: Sie können Navigation abfangen, JavaScript einfügen, die UI anpassen usw. Es läuft ebenfalls innerhalb des Prozesses Ihrer App. Die Verwendung eines WebViews für Passkeys bedeutet, dass Ihre App Ihre Web-Login-Seite lädt und diese Seite eine WebAuthn-Passkey-Zeremonie einleiten kann. Modernes Android-WebView unterstützt WebAuthn (vorausgesetzt, die WebView-Implementierung des Geräts ist über das Android System WebView oder die Chrome-Komponente auf dem neuesten Stand). Ein wichtiger Aspekt: Standardmäßig teilt ein Android-WebView keine Cookies oder gespeicherten Anmeldedaten mit dem Chrome-Browser des Nutzers. Daher könnte jeder im WebView erstellte oder verwendete Passkey Chrome nicht bekannt sein und umgekehrt. Diese Isolation kann gut für die Sicherheit sein (Ihre App kann keine Browser-Cookies lesen), könnte Nutzer aber dazu zwingen, sich erneut anzumelden, wenn sie sich bereits in Chrome authentifiziert haben. Ein weiteres Problem ist Vertrauen. Ein einfaches WebView zeigt keine URL oder SSL-Schlosssymbol an, sodass Nutzer Ihrer App vollständig vertrauen müssen, dass sie sie nicht phishen. Google hat die Verwendung von WebView für Google OAuth-Logins wegen potenzieller Phishing-Risiken sogar verboten. Hinsichtlich Performance sind WebViews in Ordnung, können aber langsamer oder speicherintensiver sein als die Nutzung des Standardbrowsers des Nutzers, besonders beim Laden von schweren Seiten.
Chrome Custom Tabs (CCT) sind ein hybrider Ansatz. Sie ermöglichen Ihrer App, eine Chrome-gerenderte Seite zu öffnen, die so aussieht, als wäre sie Teil Ihrer App. Sie können die Toolbar-Farbe anpassen, ein App-Logo hinzufügen usw., aber der Inhalt wird von Chrome in einem separaten Prozess gerendert. Für Passkeys haben CCTs mehrere Vorteile: Sie teilen die Cookies und Anmeldedaten des Nutzers mit dem Chrome-Browser, was bedeutet, dass, wenn der Nutzer einen Passkey über Chrome (Google Passwortmanager) gespeichert hat, der Custom Tab darauf zugreifen kann. Der Nutzer wird auch die tatsächliche URL und Sicherheitsindikatoren sehen, was Vertrauen schafft. Die Performance ist oft besser – Chrome kann im Hintergrund "aufgewärmt" werden für schnelleres Laden. Und ganz wichtig, die Sicherheit ist stark: Da es sich im Wesentlichen um die Chrome-App handelt, schützen Dinge wie Google Safe Browsing die Sitzung, und Ihre App kann keine beliebigen Skripte in die Seite injizieren (was bestimmte Angriffe verhindert).
Der Nachteil ist, dass der Nutzer Chrome (oder einen unterstützten Browser) installiert und auf dem neuesten Stand haben muss. Das haben die meisten Android-Nutzer, aber auf einigen Geräten in bestimmten Regionen könnte dies ein Problem sein. Insgesamt, wenn Sie sich für einen eingebetteten Web-Ansatz unter Android entscheiden, werden Chrome Custom Tabs für Passkey-Flows empfohlen, da sie eine gute Balance aus Integration und Sicherheit bieten. Tatsächlich sind sie iOS's SFSafariViewController/ASWebAuthSession in vielerlei Hinsicht analog – indem sie den Standardbrowser zur Authentifizierung nutzen.
(Exkurs: Apples WKWebView vs SFSafariViewController und Androids WebView vs CCT weisen viele Parallelen auf. Sowohl Safari VC als auch Chrome Tabs teilen den Browserstatus und bieten bessere Sicherheit, während WKWebView/Android WebView mehr Kontrolle bieten, aber den Webinhalt isolieren. Für Passkeys ist das Teilen des Status (Cookies, Credential-Stores) in der Regel wünschenswert, damit der Passkey nahtlos abgerufen und erstellt werden kann.)
| Feature | WebView | Chrome Custom Tab |
|---|---|---|
| User experience | - Flexibilität: Bietet ein reichhaltiges Set an APIs für die Interaktion mit Webinhalten und die Verwaltung von Nutzerinteraktionen, einschließlich der Handhabung von JavaScript-Dialogen und Berechtigungsanfragen. - Konsistenz: Die Verwaltung einer konsistenten UX, besonders bei unterschiedlichen Webinhalten, kann herausfordernd sein. | - Browserfunktionen: Teilt Funktionen wie Data Saver und synchronisiertes AutoComplete über Geräte hinweg. - Zurück-Button: Erlaubt Nutzern die einfache Rückkehr zur App mit einem integrierten Zurück-Button. - Abhängigkeit: Stützt sich auf die Chrome-App, die möglicherweise nicht auf allen Geräten verfügbar oder aktuell ist - Weiterleitung zum Browser: Bestimmte Funktionalitäten könnten Nutzer zur Chrome-App weiterleiten, was potenziell die UX stört. - Partielle Custom Tabs: Nur ein Teil des Bildschirms kann für den Chrome Custom Tab genutzt werden, während der Rest die native App zeigt - Side-Sheet: Im Querformat und auf großformatigen Geräten wird der Chrome Custom Tab nur auf einer Seite des Bildschirms angezeigt, während der Rest des Bildschirms die native App zeigt |
| Developer experience | - Hochgradig anpassbar: Bietet umfangreiche Anpassungsoptionen/-bedürfnisse. - Interaktivität: Bietet zahlreiche APIs zur Interaktion mit Webinhalten und zur Verwaltung von Nutzerinteraktionen. | - Anpassbar: Erlaubt Anpassung von Toolbar-Farbe, Action-Button, unterer Toolbar, Custom-Menu-Items und In/Out-Animationen. - Callback: Liefert ein Callback an die Anwendung bei einer externen Navigation. - Sicherheitsfeatures: Bietet Out-of-the-Box-Funktionen, wodurch die Verwaltung von Anfragen, Berechtigungsvergaben oder Cookie-Speichern entfällt. |
| Performance | - Mäßige Performance: Bietet möglicherweise nicht das gleiche Performance-Level wie Chrome Custom Tabs (CCT) | - Pre-Warming: Beinhaltet Pre-Warming des Browsers im Hintergrund und spekulatives Laden von URLs, um die Seitenladezeit zu verbessern. - Priorität: Verhindert, dass Apps, die einen Custom Tab starten, während der Nutzung verdrängt werden, indem ihre Wichtigkeit auf die "Foreground"-Ebene angehoben wird. |
| Trust and recognition | - URL & SSL nicht sichtbar: Die URL- und SSL-Informationen sind in einem WebView nicht inhärent sichtbar. Wenn der App-Entwickler diese Funktionen nicht implementiert, wissen Nutzer nicht, ob sie auf der richtigen Website oder einer Phishing-Seite sind. | - URL & SSL sichtbar: Verwendet den echten Chrome-Browser, um Seiten zu rendern. Nutzer können die URL und das SSL-Zertifikat sehen (das anzeigt, ob die Verbindung sicher ist). Dies kann Nutzern das Vertrauen geben, dass sie sich nicht auf einer Phishing-Site befinden. |
| Isolation | - Läuft im Prozess der App: Wenn eine App eine Schwachstelle hat, die die Ausführung bösartigen Codes erlaubt, besteht das Risiko, dass das WebView kompromittiert werden könnte. WebView erhält jedoch auch Updates, aber Verhalten und Sicherheit können abhängiger von der App sein, die es nutzt. - Kein Teilen von Cookies / Sessions: Teilt keine Cookies oder Sessions mit dem Hauptbrowser des Geräts, bietet Isolation, erfordert aber möglicherweise, dass Nutzer sich erneut einloggen müssen. | - Läuft in Chromes Prozess: Da sie Teil von Chrome sind, laufen Custom Tabs im selben Prozess und haben dieselben Sicherheitsupdates und -funktionen wie Chrome. - Shared Cookie Jar und Permissions Model: Stellt sicher, dass sich Nutzer nicht neu bei Websites anmelden oder Berechtigungen neu vergeben müssen. - Chrome Settings & Preferences: Nutzt die Einstellungen und Präferenzen von Chrome. |
| Vulnerabilities | - Callbacks zum Stehlen von Anmeldedaten: Potenzielle Schwachstellen bestehen darin, dass manchmal JavaScript erforderlich ist, was anderen Apps Tür und Tor öffnet, um bösartigen Code auszuführen, z. B. Callbacks registrieren, die versuchen, Benutzernamen und Passwörter abzufangen. - Phishing: Außerdem könnte eine bösartige App eine andere Webseite öffnen, die den Link-Flow in einem Phishing-Versuch imitiert. | - Google Safe Browsing: Setzt Google Safe Browsing ein, um Nutzer und Gerät vor gefährlichen Websites zu schützen. - Sichere Browserdekoration: Stellt sicher, dass der Nutzer immer die exakte URL sieht, mit der er interagiert, und die Zertifikatsinformationen der Website einsehen kann, was das Phishing-Risiko reduziert. Darüber hinaus erlauben Custom Tabs keine JavaScript-Injektion. |
| Other | - Google hat WebViews für den Login von Nutzern in Google-Konten verboten |
Unabhängig davon, welchen Implementierungsansatz Sie wählen, müssen bestimmte technische Anforderungen erfüllt sein, um die Passkey-Funktionalität zu aktivieren. Dieser Abschnitt bietet umfassende Anleitungen zur Konfiguration von Well-known Association-Dateien, iOS Entitlements und der Android WebView-Konfiguration.
Hinweis zu verwalteten Geräten: Das Passkey-Verhalten ändert sich erheblich auf verwalteten Geräten, wo Mobile Device Management (MDM)-Richtlinien die Speicherung von Anmeldedaten kontrollieren. Für das Testen von Passkeys auf verwalteten Geräten, siehe Passkeys auf verwalteten iOS- und Android-Geräten.
Native- und Embedded-WebView-Flows erfordern Association-Dateien, um kryptografisches Vertrauen zwischen Ihrer App und der Webdomain herzustellen. System-WebView (ASWebAuthenticationSession) und Chrome Custom Tabs erfordern keine App-to-Site-Association.
Die AASA-Datei stellt die Verbindung zwischen Ihrer iOS-App und Ihrer Webdomain her, sodass Passkeys plattformübergreifend funktionieren.
Speicherort der Datei: https://yourdomain.com/.well-known/apple-app-site-association
Konfigurationsanforderungen:
/.well-known/apple-app-site-association auf Ihrer Domainapplication/json.well-known-PfadBeispielhafte AASA-Datei:
{ "webcredentials": { "apps": ["TEAMID123.com.example.app"] } }
AASA Caching und Testing:
Apple speichert AASA-Dateien aggressiv (bis zu 24-48 Stunden) mittels eines CDNs im Cache, was Entwicklung und Tests frustrieren kann. So umgehen Sie das Caching während der Entwicklung:
?mode=developer an Ihre zugehörige Domain in Xcode an⚠️ Wichtig: Verwenden Sie ?mode=developer NICHT in Produktions-Releases. Dieser
Parameter ist nur für die Entwicklung gedacht – die Verwendung in der Produktion hindert
iOS daran, Ihre AASA-Datei ordnungsgemäß zu erkennen, was die Passkey-Funktionalität
unterbricht.
Validierung: Verwenden Sie Apples AASA Validator, um Ihre Konfiguration zu überprüfen.
Android nutzt Digital Asset Links, um die Beziehung zwischen Ihrer App und Website zu verifizieren.
Speicherort der Datei: https://yourdomain.com/.well-known/assetlinks.json
Konfigurationsanforderungen:
/.well-known/assetlinks.json auf Ihrer Domainapplication/jsonBeispielhafte assetlinks.json Datei:
[ { "relation": [ "delegate_permission/common.handle_all_urls", "delegate_permission/common.get_login_creds" ], "target": { "namespace": "android_app", "package_name": "com.example.app", "sha256_cert_fingerprints": [ "AA:BB:CC:DD:EE:FF:00:11:22:33:44:55:66:77:88:99:AA:BB:CC:DD:EE:FF:00:11:22:33:44:55:66:77:88:99" ] } } ]
Validierung: Verwenden Sie Googles Digital Asset Links Generator, um Ihre Konfiguration zu erstellen und zu überprüfen.
iOS-Apps benötigen korrekte Entitlements, um auf die Passkey-Funktionalität zugreifen zu können. Die Anforderungen unterscheiden sich je nach Implementierungsansatz leicht.
Die Entitlements-Datei (oft Runner.entitlements in
Flutter-Apps oder YourApp.entitlements in nativen
iOS-Projekten genannt) definiert spezielle Berechtigungen und Capabilities, die vom
Apple-System gewährt werden. Für Passkeys konfiguriert diese Datei die Associated Domains.
Speicherort der Datei: Typischerweise in Ihrem Xcode-Projekt unter
ios/Runner/Runner.entitlements
Die native Implementierung und Embedded-WebView erfordern die Associated Domains Capability, um Ihre App mit Ihrer Webdomain zu verknüpfen. System-WebView (ASWebAuthenticationSession) benötigt dies nicht, da es im Safari-Kontext läuft.
Setup in Xcode:
webcredentials: hinzuBeispiel-Konfiguration:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>com.apple.developer.associated-domains</key> <array> <string>webcredentials:yourdomain.com</string> <string>webcredentials:subdomain.yourdomain.com</string> </array> </dict> </plist>
| Ansatz | Associated Domains erforderlich | Zusätzliche Konfiguration |
|---|---|---|
| Native Implementierung | Ja | Dedizierte Implementierung |
| System-WebView | Nicht erforderlich | Standard-Web-Setup funktioniert |
| Embedded-WebView | Ja | Erfordert AndroidX WebKit 1.12.1+ Konfiguration |
Mehrere Domains: Wenn Ihre App mit mehreren Domains funktionieren muss, benötigen Sie möglicherweise Related Origin Requests (ROR).
Android Embedded-WebViews unterstützen Passkeys durch zwei unterschiedliche Ansätze: den neueren WebKit-basierten Ansatz (Abschnitt 5.3.1) und den älteren JavaScript-Bridge-Ansatz (Abschnitt 5.3.2). System-WebView (Chrome Custom Tabs) erfordert keine Konfiguration – Anmeldedaten funktionieren automatisch.
Android bietet offizielle WebView-Passkey-Beispiele, die beide Implementierungsansätze demonstrieren.
Moderne WebKit-Integration mit nativer Passkey-Handhabung. Dieser Ansatz bietet nativen WebAuthn-Support, ohne dass benutzerdefinierter Bridge-Code erforderlich ist.
Offizielles Beispiel: Webkit WebView MainActivity
Anforderungen:
Implementierung:
import androidx.webkit.WebSettingsCompat import androidx.webkit.WebViewFeature // Check if Web Authentication is supported if (WebViewFeature.isFeatureSupported(WebViewFeature.WEB_AUTHENTICATION)) { // Enable Web Authentication WebSettingsCompat.setWebAuthenticationSupport( webView.settings, WebSettingsCompat.WEB_AUTHENTICATION_SUPPORT_FOR_APP ) // Enable JavaScript webView.settings.javaScriptEnabled = true }
Wichtige Punkte:
WebViewFeature.WEB_AUTHENTICATIONmediation:"conditional" (Passkey-Autofill in
Eingabefeldern) funktioniert nicht in Embedded-WebViewsVersionshinweise:
Vor AndroidX WebKit 1.12.0 existierte kein nativer WebAuthn-Support in Embedded-WebViews. Dieser ältere Ansatz verwendet eine Web-to-Native-Bridge, um Passkeys für Geräte ohne nativen WebView-WebAuthn-Support zu handhaben.
Offizielle Beispiele:
Wann Sie dies nutzen sollten: Um ältere Android-Versionen oder Geräte mit veralteten WebView-Implementierungen zu unterstützen.
Teams mussten entweder:
Für eine detaillierte Implementierung, siehe den Android Credential Manager WebView Integration Guide. Jedoch empfehlen wir dringend die Nutzung des nativen WebKit 1.12.1+ Ansatzes für moderne Apps.
Empfehlung: Verwenden Sie nativen WebAuthn-Support mit AndroidX WebKit 1.12.1+. Falls zur Laufzeit nicht verfügbar, greifen Sie auf Chrome Custom Tabs zurück, die hervorragenden Passkey-Support mit geteilten Anmeldedaten bieten.
Wenn Sie Passkeys in nativen Apps implementieren, müssen Sie Vertrauen zwischen Ihrer App und der/den Webdomain(s) herstellen. Dieser Abschnitt behandelt, wie man mit einzelnen Domains umgeht, mehrere verwandte Domains (ROR) handhabt und wie Sie überprüfen können, ob Ihre Well-known Association-Dateien richtig konfiguriert sind.
Für Apps, die eine einzelne Domain (z. B. kayak.com) verwenden, benötigen Sie:
webcredentials:kayak.comRelated Origins (ROR) ist ein
WebAuthn-Feature, das es ermöglicht, dass ein einziger Satz von Passkeys über mehrere
verwandte Domains (z. B. kayak.com, kayak.de, kayak.co.uk) hinweg funktioniert.
ROR nutzt den
/.well-known/webauthn Endpunkt auf jeder Seite, um verwandte Origins zu definieren,
NICHT die AASA- oder assetlinks-Dateien.
Wichtige Punkte:
/.well-known/webauthn mit der Liste verwandter OriginsKonfigurationsbeispiel:
Wenn Ihre App mit kayak.com und kayak.de funktioniert, müssen beide Domains:
Bevor Sie live gehen, verifizieren Sie, dass Ihre Well-known Dateien richtig konfiguriert und zugänglich sind. Apple und Google bieten CDN-basierte Test-URLs an, um die Verfügbarkeit der Datei zu prüfen:
| Domain | Apple AASA Überprüfung | Google Digital Asset Links Überprüfung |
|---|---|---|
| kayak.com | Test AASA file Prüfen Sie, ob das Apple CDN Ihre Datei abrufen kann | Test assetlinks.json Verifizieren Sie, ob Google auf Ihre Asset Links zugreifen kann |
| kayak.de | Test AASA file Prüfen Sie, ob das Apple CDN Ihre Datei abrufen kann | Test assetlinks.json Verifizieren Sie, ob Google auf Ihre Asset Links zugreifen kann |
Verwendung dieser Test-URLs:
?nocache=1 Parameter erzwingt den frischen Abruf und umgeht den CDN-Cachekayak.com oder kayak.de durch Ihre eigene(n) Domain(s) in den oben
genannten URL-MusternTücke beim Testen: Stellen Sie sicher, dass alle Domains ordnungsgemäß konfigurierte Well-known Dateien haben. Eine fehlende oder falsch konfigurierte Datei auf nur einer Domain kann die Passkey-Funktionalität für diese Domain unterbrechen.
Weitere Informationen: WebAuthn Relying Party ID in nativen Apps
Die Wahl des richtigen Implementierungsansatzes hängt von der Authentifizierungsarchitektur Ihrer App, den OAuth-Anforderungen und dem Bedarf an Session-Kontrolle ab. Verwenden Sie diesen Entscheidungsbaum, um den besten Weg zu bestimmen.
Das folgende Flussdiagramm führt Sie durch die Auswahl des richtigen Implementierungsansatzes basierend auf den Anforderungen Ihrer App:
Kurzreferenz für jeden Pfad:
So schneidet jeder Ansatz in wichtigen Dimensionen ab:
| Ansatz | Passkeys erstellen | Passkeys nutzen | Passkeys verwalten | Technische Komplexität | OAuth-Unterstützung | Setup-Zeit |
|---|---|---|---|---|---|---|
| Native Implementierung | Hohe Verbreitung Nahtlose Biometrie, beste UX | Sofort, stillpreferImmediatelyAvailableCredentials ermöglicht automatisches Overlay beim App-Start | Volle native Kontrolle Integration in App-Einstellungen | Mittel-Hoch Plattformspezifische APIs | Erfordert separate OAuth-Flow-Implementierung | Wochen bis Monate |
| System-WebView | Gute Verbreitung Browserähnliches Erlebnis, vertraut | Standard-Browser-UX Conditional UI in Eingabefeldern, geteilter Schlüsselbund | Browserbasiert Nutzer verwalten via Browser | Niedrig Minimaler nativer Code | Hervorragend Speziell für OAuth entwickelt | Tage bis Wochen |
| Embedded-WebView | Geringere Verbreitung Erfordert Konfiguration | Native WebAuthn-Unterstützung WebKit 1.12.1+, keine Conditional UI | Begrenzte Kontrolle Keine native Integration | Mittel-Hoch WebView-Konfig + Berechtigungen | Erfordert Konfiguration | 1-2 Wochen |
Erklärungen der Dimensionen:
Empfohlen: System-WebView
Wenn Ihre App sich über OAuth2, OIDC oder Social-Login-Anbieter (Google, GitHub, Microsoft, etc.) authentifiziert, ist System-WebView die optimale Wahl:
ASWebAuthenticationSession ist speziell für OAuth-Flows entwickeltBeispiel: Reise-Apps wie kayak.com und kayak.de nutzen OAuth für die Authentifizierung. System-WebView erlaubt es ihnen, ihre bestehende OAuth-Infrastruktur beizubehalten, während sie Passkey-Unterstützung über ihre Web-Authentifizierungsseiten hinzufügen.
Empfohlen: Hybrider Ansatz
Verwenden Sie System-WebView für die anfängliche OAuth-Authentifizierung und wechseln Sie dann für Post-Auth-Sessions zu Embedded-WebView:
Wann zu verwenden: Apps, die sich via OAuth authentifizieren, danach aber authentifizierte Webinhalte anzeigen müssen, bei denen direkte Session-Manipulation notwendig ist.
Empfohlen: Native Implementierung
Wenn Sie von Grund auf neu bauen oder native Screens haben, gehen Sie komplett nativ:
preferImmediatelyAvailableCredentials, um ein
automatisches Passkey-Overlay beim App-Start
anzuzeigen - exklusiv für native Implementierungen und bietet die höchsten
KonversionsratenFür neue Apps: Wir empfehlen dringend, von Tag eins an native Logins zu bauen. Dies bringt Sie in Position für eine optimale UX und vermeidet zukünftige WebView-zu-Nativ-Migrationen.
Empfohlen: Phasenweise Migration
Das folgende Diagramm zeigt den inkrementellen Migrationspfad:
Jede Phase baut auf der vorherigen auf und ermöglicht inkrementelle Verbesserungen ohne Störung bestehender Nutzer.
| Anforderung | Native | System-WebView | Embedded-WebView |
|---|---|---|---|
| Well-known Dateien (AASA/assetlinks) | Erforderlich | Nicht erforderlich | Erforderlich |
| iOS Associated Domains | Erforderlich | Nicht erforderlich | Erforderlich |
| Android WebKit Library | Nicht anwendbar | Nicht erforderlich | Erforderlich (1.12.1+) |
| Relying Party ID | Muss mit Domain übereinstimmen | Muss mit Domain übereinstimmen | Muss mit Domain übereinstimmen |
Siehe Abschnitt 5 für detaillierte Konfigurationsanweisungen.
Das Testen von Passkeys in nativen Apps erfordert einen strukturierten, vielschichtigen Ansatz. Folgen Sie der Testpyramide: Unit-Tests (isolierte Logik), Integrationstests (WebAuthn-Zeremonie auf Simulatoren/Emulatoren) und Systemtests (End-to-End auf physischen Geräten).
Wesentliche Test-Kategorien:
Für umfassende Testanleitungen einschließlich Automatisierungsstrategien, plattformspezifischer Stolpersteine und einer kompletten Pre-Flight-Checkliste, siehe unseren dedizierten Leitfaden: Testing von Passkey-Flows in nativen iOS- und Android-Apps.
Erwägen Sie, Nutzer nach einem erfolgreichen traditionellen Login (Passwort, OAuth) zur Erstellung von Passkeys aufzufordern. Dieser graduelle Konversionsansatz:
Beispiel: Zeigen Sie nach einem OAuth-Login über System-WebView einen nativen Prompt: "Schnelleren Login mit Face ID aktivieren?" Bei Annahme wird der Passkey über die im System-WebView geladene Webseite erstellt.
Die Entscheidung, wie Passkeys implementiert werden sollen - via Native Implementierung, System-WebView oder Embedded-WebView - ist eine wichtige Designentscheidung, die Sicherheit, UX und Entwicklungskomplexität beeinflusst. Es gibt keine One-size-fits-all-Lösung.
Für OAuth-basierte Apps: System-WebView (ASWebAuthenticationSession, Chrome Custom Tabs) ist der empfohlene Ausgangspunkt. Es bietet exzellente OAuth-Unterstützung, minimalen Implementierungsaufwand und automatisches Teilen der Anmeldedaten.
Für Native-First-Apps: Gehen Sie lieber früher als später den nativen Weg. Ein nativer
Passkey-Login bietet die nahtloseste UX mit exklusiven Funktionen wie
preferImmediatelyAvailableCredentials, das ein
automatisches Passkey-Overlay beim App-Start
ermöglicht - etwas, was WebView-Implementierungen nicht bieten können. Da iOS und Android
nun erstklassige Unterstützung für Passkeys bieten, zeigen reale Erfolge eine hohe
Verbreitung. Das Tooling (einschließlich Open-Source SDKs und Plattform-Bibliotheken) ist
ausgereift genug, um native Integration in vernünftigen Zeitrahmen realisierbar zu machen.
Obwohl Sie auf Geräteverwaltungsrichtlinien, geräteübergreifendes Synchronisieren und
Drittanbieter achten müssen, können diese Herausforderungen durch sorgfältiges Engineering
und Testing bewältigt werden. Das Ergebnis ist ein App-Login, der Nutzer durch Einfachheit
und Schnelligkeit begeistert und gleichzeitig die Sicherheit deutlich erhöht.
Für Embedded-WebView-Anforderungen: Embedded-WebView wird häufig in zwei Praxis-Szenarien verwendet. Erstens nutzen OAuth-basierte Apps oft System-WebView für den anfänglichen Login-Flow und wechseln dann zu Embedded-WebView, um Passkey-Verwaltungsoptionen in Einstellungsbildschirmen zu rendern, in denen Session-Kontrolle benötigt wird – wobei einige Apps dies vereinfachen, indem sie System-WebView für beide Flows beibehalten. Zweitens setzen Apps, die ihren Authentifizierungs-Flow bereits vor der Einführung von Passkeys in WebView-Frames eingebettet haben, dieses Muster aus Konsistenzgründen fort. Embedded-WebView mit nativer WebAuthn-Unterstützung (AndroidX WebKit 1.12.1+) erfordert Konfiguration und Setup (Berechtigungen, Entitlements, WebView-Einstellungen), benötigt aber keinen benutzerdefinierten JavaScript-Bridge-Code mehr. Beachten Sie, dass Conditional UI in Embedded-WebViews nicht unterstützt wird. Wählen Sie diesen Ansatz, wenn Sie bestehende eingebettete Authentifizierungsmuster beibehalten möchten oder wenn Sie Session/Cookie-Kontrolle für Post-Auth-Screens benötigen.
Letztendlich stellen Passkeys in nativen Apps einen großen Sprung nach vorn in puncto Benutzerkomfort und Sicherheit dar. Egal ob über Native, System-WebView oder Embedded-WebView implementiert, sie eliminieren Phishing-Risiken und Passwortverwaltungs-Belastungen für Ihre Nutzer. Reale Implementierungen wie die native Passkey-Integration in der VicRoads-App zeigen, dass Native-First-Ansätze die höchste Nutzerakzeptanz und Zufriedenheit liefern, wenn sie richtig mit Features wie automatischen Passkey-Overlays umgesetzt werden. Wenn Sie die Best Practices für benutzerfreundliche Authentifizierung befolgen und den Implementierungsansatz wählen, der zur Architektur Ihrer App passt – Native-First für neue Apps, System-WebView für OAuth-Flows oder Embedded-WebView für bestehende eingebettete Muster –, können Sie passwortlose, biometrische Logins anbieten, die die Vision von Passkeys wirklich verwirklichen: einfache, sichere und begeisternde Authentifizierung für alle.
Wenn Passkeys in Ihrer nativen App nicht funktionieren, überprüfen Sie diese häufigen Probleme je nach Implementierungsansatz:
application/json.well-known-Pfadhttps://your-domain.com (nicht app://)webcredentials:yourdomain.comASWebAuthenticationSession (empfohlen) oder
SFSafariViewController?mode=developer während der Entwicklung (für Produktion
entfernen)WebViewFeature.WEB_AUTHENTICATIONsetWebAuthenticationSupport() aufgerufen mit
WEB_AUTHENTICATION_SUPPORT_FOR_APP"NotAllowedError: The request is not allowed by the user agent or the platform in the current context"
setWebAuthenticationSupport()Es erscheint kein Passkey-Prompt
?mode=developer auf iOS zum Testen
nutzen, WebView-Typ verifizierenFür detailliertes Debugging, siehe unseren Artikel zu Relying Party IDs in nativen Apps.
Eine häufige Falle: Staging-Umgebungen mit eingeschränktem Zugriff (IP-Whitelisting, nur VPN) werden fehlschlagen, da Apple- und Google-CDNs in der Lage sein müssen, Ihre Association-Dateien abzurufen.
https://app-site-association.cdn-apple.com/a/v1/your-staging-domain.com?nocache=1https://digitalassetlinks.googleapis.com/v1/statements:list/?source.web.site=https://your-staging-domain.com&relation=delegate_permission/common.handle_all_urlsStaging-Subdomain mit Produktions-rpID:
Wenn Ihre Staging-Umgebung (z. B. stg.login.example.com) die Produktions-Domain als rpID
nutzt (z. B. example.com), erfolgt der AASA-Lookup auf der rpID-Domain, nicht auf
Ihrer Staging-Subdomain. Dies bedeutet:
Beispiel (mehrere Umgebungen, die sich eine AASA teilen):
{ "webcredentials": { "apps": [ "TEAMID123.com.example.app", "TEAMID123.com.example.app.dev", "TEAMID123.com.example.app.stg", "TEAMID123.com.example.app.pre" ] } }
Empfehlung: Nutzen Sie eine separate Staging-rpID passend zu Ihrer Staging-Domain, um Credential-Überschneidungen zwischen Umgebungen zu vermeiden. Dies erfordert öffentlich zugängliche AASA-Dateien auf der Staging-Domain.
?mode=developer Klärung:
Der ?mode=developer Parameter in Associated Domains umgeht Apples CDN-Cache, aber
umgeht nicht die Zugänglichkeitsanforderung. Ihre AASA-Datei muss für das Gerät immer
noch erreichbar sein (nicht über Apples CDN, sondern direkt). Dies hilft während der
Entwicklung, wenn über AASA-Änderungen iteriert wird, hilft aber nicht, wenn Ihr
Staging-Server durch IP-Whitelisting geschützt ist.
Corbado Native SDKs:
Plattform-Dokumentation:
Validierungs-Tools:
Corbado ist die Passkey Intelligence Platform für CIAM-Teams, die Consumer-Authentifizierung im großen Maßstab betreiben. Wir zeigen Ihnen, was IDP-Logs und generische Analytics-Tools nicht sehen können: welche Geräte, OS-Versionen, Browser und Credential-Manager Passkeys unterstützen, warum Enrollments nicht zu Logins werden, wo der WebAuthn-Flow scheitert und wann ein OS- oder Browser-Update den Login still und leise unterbricht – und das alles, ohne Okta, Auth0, Ping, Cognito oder Ihren In-House-IDP zu ersetzen. Zwei Produkte: Corbado Observe ergänzt Observability für Passkeys und jede andere Login-Methode. Corbado Connect bringt Managed Passkeys mit integrierter Analytics (neben Ihrem IDP). VicRoads betreibt Passkeys für über 5 Mio. Nutzer mit Corbado (+80 % Passkey-Aktivierung). Mit einem Passkey-Experten sprechen →
Die Wahl hängt von Ihrer Authentifizierungsarchitektur ab. Wenn Ihre App OAuth2 oder OIDC nutzt, erfordert System-WebView (ASWebAuthenticationSession unter iOS oder Chrome Custom Tabs unter Android) den geringsten Implementierungsaufwand und keine Einrichtung von Association-Dateien. Für neue Native-First-Apps bietet die native Implementierung eine überlegene UX, während Embedded-WebView für Apps geeignet ist, die Authentifizierung bereits in einem WebView-Frame einbetten und nach dem Login Sitzungs- oder Cookie-Kontrolle benötigen.
SFSafariViewController nutzt die Safari-Engine, zeigt die URL-Leiste mit SSL-Indikatoren an und bietet Phishing-Schutz, was ihn für Authentifizierungsabläufe vertrauenswürdiger macht. WKWebView bietet mehr UI-Anpassung, hat aber einen isolierten, von Safari getrennten Cookie-Speicher, erfordert Associated-Domains-Berechtigungen und eine AASA-Datei, um Passkeys zu aktivieren, und zeigt die URL-Leiste nicht an, was Vertrauenssignale für Nutzer verringert.
Chrome Custom Tabs teilen Cookies und gespeicherte Anmeldedaten mit dem Chrome-Browser des Nutzers, was bedeutet, dass im Google Passwortmanager gespeicherte Passkeys während der Authentifizierung zugänglich sind. Das Standard-Android-WebView hat einen isolierten Cookie-Speicher, zeigt weder die URL noch SSL-Indikatoren an und wurde von Google wegen Phishing-Risiken ausdrücklich für Google-Konto-Anmeldungen gesperrt.
Wenn ein Nutzer einen Drittanbieter-Passwortmanager wie 1Password als aktiven Provider festgelegt hat, fängt dieser oft die Erstellung und Speicherung von Passkeys ab und hat Vorrang vor dem nativen Credential Manager der Plattform (iCloud-Schlüsselbund oder Google Passwortmanager). Dies bedeutet, dass Passkeys möglicherweise in der Drittanbieter-App statt im Plattform-Schlüsselbund gespeichert werden, was sich auf das geräteübergreifende Synchronisieren und das Passkey-Management auswirkt.
Wenn MDM-Richtlinien die Synchronisation von Anmeldedaten deaktivieren, werden Passkeys gerätegebunden und können nicht auf ein Ersatzgerät übertragen werden, anders als in typischen Verbraucherszenarien. Apps, die auf Unternehmensumgebungen abzielen, sollten Fallback-Authentifizierungsmechanismen wie Passwort- oder Magic-Link-Login planen, um Fälle zu handhaben, in denen ein Nutzer ein neues verwaltetes Gerät erhält.
Sehen Sie, wie Corbado zu Ihrem Passkey-Rollout und bestehenden Authentifizierungs-Stack passt.
Console ansehen
Ähnliche Artikel
Inhaltsverzeichnis