

Passkeys sind großartig! Nur ein öffentliches/privates Schlüsselpaar, mit dem Sie sich mit einer Website (oder einer zugehörigen App) authentifizieren können.
Sie sind viel bequemer als Passwörter, da Sie sich nicht daran erinnern oder etwas auswählen müssen, das immer komplexere Regeln entspricht. Sie sind auch sicherer , weil sie an die Website gebunden sind, mit der Sie sich authentifizieren, und potenziell das Phishing beseitigen, und nur ein öffentlicher Schlüssel wird auf dem Server gespeichert, sodass es nichts wert ist, das es wert ist, gestohlen zu werden (der öffentliche Schlüssel ist, Sie haben es öffentlich erraten).
Der private Schlüssel wird von Ihnen gehalten. Oder besser gesagt, Ihr Passwort -Manager, damit er zwischen Geräten geteilt werden kann. Apple, Google, Microsoft und Amazon fördern aktiv die Aufnahme. Wenn Sie einen PassKey in einem Passwort -Manager (z. B. Dashlane, 1Password oder Apple Keychain) speichern, können Sie ihn auch mit Freunden teilen.
Die Registrierung bei Websites und Apps, die sich mit und anmelden, war bisher eine riesige Barriere, aber mit Passkeys ist es endlich gelöst. Lassen Sie sie überall implementieren, damit wir endlich Passwörter in den Mülleimer senden können. Passkeys sind einfacher und sicherer - was kann man nicht mögen?
Bei Red Badger führen wir das Open-Source-Multi-Plattform-App-Entwicklungs-Toolkit namens CRUX. Es verwendet Rust und WebAssembly, um es einfach zu machen, Apps zu erstellen, die auf iOS, Android und Web (und Befehlszeile sowie Terminal -Apps und ...) ausgeführt werden.
Crux ermöglicht es uns, die Funktionen unserer App einmal zu erstellen und in Millisekunden zu testen, sodass wir sicherstellen können, dass unsere App auf allen Plattformen korrekt und genauso funktioniert.
In diesem Repo geht es darum, Passkeys in Crux -Apps zu bringen.
Es ist nicht massiv kompliziert, dies zu tun, aber es gibt einige Schritte sowohl für die Registrierung als auch für die Anmeldung, die Sie für richtig machen müssen. Es ist etwas schwierig, es zu vorhandenen Webanwendungen (und iOS -Apps und Android -Apps) hinzuzufügen und sicherzustellen, dass die Implementierung in allen drei korrekt ist. Crux hilft hier. Wir können es einfach einmal bauen und testen.
Das shared Verzeichnis in diesem Repo enthält eine Crux-Passkey-Funktion, die zusammen mit der crux_http Funktion durch eine Crux-Auth-App mit Tests orchestriert wird, die als "Sub-App" verwendet werden können-in einer anderen Crux-App verschachtelt werden.
Mein Plan war großartig - wirklich coole Technologien wie Passkeys, Rost, WebAssembly und Crux zusammenzubringen -, aber ich wollte mehr.
Also fügte ich Fermyon Spin in die Gleichung hinzu. Spin ist großartig! Es ist serverlos ohne den kalten Start. Ultra -leichte Dienste, die als Reaktion auf eine eingehende Anfrage (in Mikrosekunden) und sterben, nachdem die Anfrage bearbeitet wurde.
Um PassKeys zu unterstützen, benötigen wir ein Backend, das das WebAuthn -Protokoll enthüllt. Es ist in Rost geschrieben und für WebAssembly ( wasm32-wasi ) zusammengestellt. Ich musste durch ein paar Reifen springen, wie eine WASM-kompatible Version von OpenSSL-wir sind hier am Blutungsrand-, aber es funktioniert!.
Der Server hostet außerdem eine Leptos -Web -App in Rost.
Es kann, wie es ist, für Fermyon Cloud bereitgestellt werden.
Wechseln Sie zum Verzeichnis des crux-passkey-server :
cd crux-passkey-server Erstellen Sie eine .env -Datei mit folgenden Inhalten:
export SPIN_VARIABLE_DOMAIN_LOCAL=localhost
export SPIN_VARIABLE_DOMAIN_REMOTE=crux-passkey-server-8sdh7f6w.fermyon.app # Change this to your own domain Erstellen Sie ein SSL -Zertifikat (vorzugsweise aus einer vertrauenswürdigen CA) und geben Sie sie in das certs -Verzeichnis. Die Dateinamen sollten cert.pem und key.pem sein. Sie können die Anweisungen hier befolgen (möglicherweise müssen Sie die CA zum Trust-Shop Ihres Browsers hinzufügen-oder sie in Schlüsselbund auf macOS vertrauen-Spin 2.0-Abstürze bei der Verwendung von selbstsignierten Zertifikaten).
Starten Sie den lokalen Spinserver:
./run.shUnd dann öffnen Sie Ihren Browser unter https: // localhost
Oder in Fermyon Cloud veröffentlichen (Sie müssen über ein Fermyon -Konto verfügen und die Fermyon CLI installiert haben):
./cloud_create_db.sh # Only need to do this once
./deploy.shUnd dann öffnen Sie Ihren Browser unter https://crux-passkey-server-8sdh7f6w.fermyon.app (oder was auch immer Ihre Domain ist)

Das obige Diagramm zeigt den Registrierungsprozess.
Der Benutzer gibt seine E -Mail -Adresse ein und klickt auf "Register" (Web) oder "Anmeldung" (iOS -App).
Die auth -App sendet über das GetCreationChallenge -Ereignis und die crux_http -Fähigkeit eine POST an das Backend.
Das Backend reagiert über das CreationChallenge -Ereignis mit einem Objekt PublicKeyCredentialCreationOptions über das Ereignis.
Für die iOS-App wird dies über die passkey -Funktion an die iOS-Shell-Seite der passkey Capability-Implementierung übergeben, die einen ASAuthorizationController verwendet, um den Benutzer zu erstellen, einen PassKey zu erstellen.
Für die Web-Shell wird dies über die passkey -Funktion an die Methode des Browsers navigator.credentials.create über die Web-Shell-Seite der passkey Capability-Implementierung übergeben, die den Benutzer auffordert, einen PassKey zu erstellen.
Der Benutzer erstellt einen Passkey und die passkey -Funktion gibt ein RegisterPublicKeyCredential -Objekt über das RegisterCredential -Ereignis zurück, das den öffentlichen Schlüssel, die unterschriebene Herausforderung und andere Informationen enthält.
Das RequestCredential -Ereignis wird von der App verarbeitet, wobei eine POST über die crux_http -Fähigkeit zum Backend mit dem RegisterPublicKeyCredential -Objekt sendet.
Das Backend überprüft die Informationen und registriert den Benutzer, indem der öffentliche Schlüssel des Benutzers in der Datenbank gespeichert wird und mit einem 201 Created Statuscode antwortet.
Das Ereignis CredentialRegistered wird von der App behandelt, die seinen Status aktualisiert, um anzuzeigen, dass der Benutzer registriert ist.

Der Benutzer gibt seine E -Mail -Adresse ein und klickt auf "Login" (Web) oder "Anmelden" (iOS -App).
Die auth -App sendet über das GetRequestChallenge -Ereignis und die crux_http -Funktion eine POST an das Backend.
Das Backend antwortet über das RequestChallenge -Ereignis mit einem PublicKeyCredentialRequestOptions -Objekt.
Für die iOS-App wird dies über die passkey -Funktion an die iOS-Shell-Seite der passkey Capability-Implementierung übergeben, die einen ASAuthorizationController verwendet, um den Benutzer zu veranlassen, sich mit ihrem PassKey anzumelden.
Für die Web-Shell wird dies über die passkey -Funktion an die Browser- navigator.credentials.get -Methode über die Web-Shell-Seite der passkey Capability-Implementierung übergeben, die den Benutzer auffordert, sich mit ihrem PassKey anzumelden.
Der Benutzer tritt seinen Passkey ein und die passkey -Funktion gibt ein PublicKeyCredential -Objekt über das Credential zurück, das die unterschriebene Herausforderung und andere Informationen enthält.
Das RequestCredential -Ereignis wird von der App verarbeitet, wobei eine POST über die crux_http -Funktion mit dem Backend mit dem PublicKeyCredential -Objekt sendet.
Das Backend überprüft die Informationen und antwortet mit einem 200 OK -Statuscode.
Das Ereignis CredentialVerified wird von der App behandelt, die seinen Status aktualisiert, um anzuzeigen, dass der Benutzer angemeldet ist.
Das shared Verzeichnis enthält den Kern der Implementierung. Es ist ein Beispiel für eine Root Crux -App, die eine auth Crux -App nistet. Die auth -App orchestriert die Funktionen crux_http und passkey , um die Registrierung von Passkey und die Anmeldung gegen das Backend bereitzustellen.