Get your free and exclusive +45-page Authentication Analytics Whitepaper
Zur Übersicht

9 WebAuthn-Server-Implementierungsbibliotheken im Vergleich

Dieser Beitrag hilft Ihnen, die richtige WebAuthn-Server-Bibliothek für das Anbieten von Passkeys zu finden. Wir vergleichen 9 Bibliotheken.

Blog-Post-Author
Nicolai

Erstellt: 15. Dezember 2023

Aktualisiert: 27. Juli 2026

9 WebAuthn-Server-Implementierungsbibliotheken im Vergleich

Diese Seite wurde automatisch übersetzt. Lesen Sie die englische Originalversion hier.

PasskeysCheatsheet Icon

Passkeys-Cheatsheet. Praxisnahe Leitfäden, Rollout-Muster und KPIs für Passkey-Programme.

Cheat Sheet erhalten
Wichtige Fakten
  • SimpleWebAuthn (TypeScript, 1.000 GitHub-Sterne) wird als am intuitivsten bewertet und bietet als einzige sowohl eine Server-Bibliothek als auch eine Frontend-Browser-Bibliothek für die Passkey-Implementierung.
  • Die Passkey-Authentifizierung erfordert mindestens vier Backend-API-Endpunkte im Gegensatz zu einem für die Passwort-Authentifizierung. Dies macht eine WebAuthn-Server-Bibliothek unerlässlich, um die kryptografische Komplexität zu bewältigen.
  • py_webauthn (Python) ist ideal für schnelle Tests: Authentifizierungsoptionen werden mit einem einzigen Methodenaufruf generiert und erfordern keine Framework-Konfiguration.
  • webauthn-framework (PHP/Symfony, 347 Sterne) bietet die umfangreichste konzeptionelle Dokumentation und eignet sich daher am besten für Entwickler, die Passkey-Grundlagen von Grund auf lernen möchten.
  • Wenn keine Bibliothek zu Ihrer Sprache passt, sind go-webauthn oder SimpleWebAuthn die empfohlenen Fallback-Lösungen, da sie über die breiteste Akzeptanz in kommerziellen und Open-Source-Projekten verfügen.

1. Einführung: WebAuthn-Server-Implementierung#

Die Bereitstellung einer sicheren und einfachen Benutzerauthentifizierung ist für digitale Unternehmen im Jahr 2024 ein Muss. Passkeys als neuer Login-Standard sind die ideale Lösung, um diese Anforderungen zu erfüllen. Die verbesserte Benutzererfahrung und Sicherheit von Passkeys hat jedoch ihren Preis bei der Implementierung für Entwickler. Die Schwierigkeit bei der Implementierung rührt daher, dass Passkeys relativ neu sind – für Benutzer, aber auch für Entwickler – und dass ihre Implementierung im Vergleich zur passwortbasierten Authentifizierung recht anspruchsvoll sein kann. Tatsächlich benötigen Sie mindestens vier API-Endpunkte für die Passkey-Authentifizierung im Vergleich zu einem API-Endpunkt für die Passwort-Authentifizierung.

Eine der Kernkomponenten auf der Serverseite zur Bereitstellung der Passkey-Authentifizierung ist der WebAuthn-Server (grüner Bibliotheksteil). Für einen umfassenden Leitfaden, wie sich der WebAuthn-Server in die breitere Integration des Enterprise-Stacks einfügt, lesen Sie unseren speziellen Artikel.

Quelle: Yubico

In diesem Blogbeitrag vergleichen wir verschiedene WebAuthn-Server-Bibliotheken / Pakete / SDKs, analysieren Unterschiede und geben eine Empfehlung für Entwickler, die neu in der Passkey-Implementierung sind.

2. Wie kann ich Passkeys selbst implementieren?#

Um besser zu verstehen, warum überhaupt eine WebAuthn-Server-Bibliothek benötigt wird, lassen Sie uns einen Blick darauf werfen, wie Passkeys implementiert werden können. Im Prinzip gibt es zwei Möglichkeiten, Passkeys in Websites und Apps zu integrieren:

  1. Verwenden Sie eine Passkey-Lösung von Drittanbietern (z. B. Corbado)
  2. Implementieren Sie Passkeys selbst mithilfe einer der unten aufgeführten WebAuthn-Server-Bibliotheken

Während eine Drittanbieter-Lösung für Passkeys einfach zu integrieren ist und in der Regel viel Entwicklungszeit spart (insbesondere bei Edge-Cases, Wartung, Wiederherstellung, Fallbacks und verbesserter Passkey-UX), ziehen es einige Entwickler vor, alles selbst zu implementieren.

Demo Icon

Testen Sie Passkeys in einer Live-Demo.

Passkeys testen

Lassen Sie uns ansehen, wie die Do-it-yourself-Passkey-Implementierung funktioniert. In einem sehr grundlegenden Setup wird ein Mechanismus zur Registrierung (Sign-up) und Authentifizierung (Login) benötigt. Beide Prozesse, auch WebAuthn-Zeremonien genannt, werden unterschiedlich gehandhabt, auch wenn der Gesamtablauf einem ähnlichen Schema folgt:

  1. Das Frontend (der Browser) initiiert eine Registrierungs- oder Login-Anfrage und ruft einen Backend-API-Endpunkt auf.
  2. Das Backend generiert WebAuthn-Parameter für die Registrierung oder das Login. Diese werden entsprechend PublicKeyCredentialCreationOptions und PublicKeyCredentialRequestOptions genannt. Einer der wichtigsten Teile dieser WebAuthn-Parameter ist die Challenge. Die WebAuthn-Parameter werden dann zurück an das Frontend gesendet.
  3. Das Frontend empfängt diese WebAuthn-Parameter und verwendet sie, um die Identität des Benutzers zu verifizieren, indem es das lokale Geräteauthentifizierungssystem (z. B. über Face ID, Touch ID, Windows Hello) nutzt. Bei Registrierungsprozessen wird ein neues Public-Private-Key-Paar erstellt; der private Schlüssel wird lokal gespeichert, während der öffentliche Schlüssel an den Server gesendet wird. Bei Login-Prozessen wird die Challenge mit dem privaten Schlüssel des Passkeys signiert und an einen anderen Backend-API-Endpunkt gesendet.
  4. Bei Registrierungsprozessen empfängt das Backend den öffentlichen Schlüssel und speichert ihn. Bei Logins empfängt das Backend die signierte Challenge und verifiziert ihre Integrität mithilfe des WebAuthn-Servers.

Da jeder Registrierungs- / Login-Prozess diese Schritte umfasst, muss das Backend den Überblick über Benutzer, Passkeys und Registrierungs- / Login-Anfragen behalten.

Igor Gjorgjioski Testimonial

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 study

Wenn Sie tiefergehendes Wissen über die Funktionsweise von Passkeys erlangen möchten und sehen wollen, wie eine einfache Implementierung aussieht (ohne eine Passkey-Lösung von Drittanbietern zu verwenden), können Sie unseren Blogartikel hier lesen.

In realen Szenarien sollten Sie bei der eigenen Implementierung von Passkeys bedenken, dass es nicht nur darum geht, die notwendigen API-Endpunkte und die grundlegende Implementierung für Registrierung und Login bereitzustellen. Darüber hinaus müssen Sie sich mit den folgenden Themen und Anwendungsfällen befassen:

  • Geräteverwaltung
  • Plattformübergreifende und geräteübergreifende Login-Abläufe
  • Benutzerverwaltung
  • Sitzungsverwaltung
  • Erkennung der Passkey-Bereitschaft von Geräten
  • Benutzeraufklärung
  • Fallback-Authentifizierungsoptionen
  • Wiederherstellungsmechanismen
  • Optionen für das Account-Sharing
  • Optimierte Abläufe zur Passkey-Erstellung und Passkey-Logins für eine hohe Akzeptanz

Für die grundlegende Passkey-Implementierung müssen Sie sich jedoch nur an den WebAuthn-Standard halten. Die Implementierung einer bekannten und unterstützten WebAuthn-Server-Bibliothek ist in der Regel ausreichend. Die Bibliothek generiert die WebAuthn-Server-Parameter und verifiziert Login-Challenges, womit sie im Wesentlichen den kryptografischen und komplexesten Teil für Sie übernimmt.

Slack Icon

Werden Sie Teil unserer Passkeys Community für Updates und Support.

Beitreten

3. WebAuthn-Server-Backend-Bibliotheken: Ein Vergleich#

Alle analysierten WebAuthn-Server-Bibliotheken bieten die notwendigen Funktionalitäten, um eine Passkey-Authentifizierung anzubieten. Daher haben wir besonderes Augenmerk auf folgende Kriterien gelegt:

  • Kriterien für die Auswahl des Authentikators: Wie können Sie Präferenzen für bestimmte Verhaltensweisen und Sicherheitsfunktionen festlegen (z. B. Erzwingen der Erstellung von residenten Schlüsseln)?
  • Globale Einstellungen: Wie stark können Sie die benötigte Konfiguration zentralisieren?
  • Dokumentation: Wie gut ist die WebAuthn-Server-Bibliothek dokumentiert und wie leicht ist sie zu verstehen?
  • Beispiele: Gibt es Beispielimplementierungen, die Sie als Referenz verwenden können?

Die folgenden WebAuthn-Server-Bibliotheken wurden analysiert (geordnet nach absteigender Anzahl von GitHub-Sternen im Dezember 2023):

StateOfPasskeys Icon

Sehen Sie, wie viele Menschen Passkeys tatsächlich nutzen.

Adoptionsdaten ansehen

3.1 TypeScript: SimpleWebAuthn#

  • Programmiersprache: Typescript
  • Framework: Node.js
  • Autor: Matthew Miller (Duo Security / Cisco)
  • Sterne: 1.000
  • Verwendet von: 781
  • Mitwirkende: 19
  • FIDO-Konformität: Ja
  • Globale Einstellungen: Nein
  • Kriterien für die Auswahl des Authentikators: Wie vom W3C vorgeschlagen (sollte die Variablen authenticatorAttachment, residentKey, requireResidentKey und userVerification enthalten, die auch auf der W3C-Seite erklärt werden)
  • Dokumentation: Schön strukturiert mit Fokus auf schnelle Einrichtung und Benutzerfreundlichkeit, beinhaltet Passkey-Wissen, z. B. wird erklärt, was Passkeys sind und wie sie funktionieren
  • Beispiele: Beispielprojekt verfügbar in den Dokumentationen
  • Empfohlene Datenstrukturen:
type UserModel = { id: string; username: string; currentChallenge?: string; }; /** * It is strongly advised that authenticators get their own DB * table, ideally with a foreign key to a specific UserModel. * * "SQL" tags below are suggestions for column data types and * how best to store data received during registration for use * in subsequent authentications. */ type Authenticator = { // SQL: Encode to base64url then store as `TEXT`. Index this column credentialID: Uint8Array; // SQL: Store raw bytes as `BYTEA`/`BLOB`/etc... credentialPublicKey: Uint8Array; // SQL: Consider `BIGINT` since some authenticators return atomic timestamps as counters counter: number; // SQL: `VARCHAR(32)` or similar, longest possible value is currently 12 characters // Ex: 'singleDevice' | 'multiDevice' credentialDeviceType: CredentialDeviceType; // SQL: `BOOL` or whatever similar type is supported credentialBackedUp: boolean; // SQL: `VARCHAR(255)` and store string array as a CSV string // Ex: ['usb' | 'ble' | 'nfc' | 'internal'] transports?: AuthenticatorTransport[]; };
  • Weitere Merkmale: Großartiger WebAuthn-Debugger für WebAuthn-Antworten und bietet nicht nur eine Backend-/Server-Bibliothek, sondern auch eine Bibliothek für das Frontend (im Grunde genommen werden einige der Web-Authentication-APIs vom Client gewrappt)
  • Persönliche Einschätzung: Intuitivstes Setup, das wir bisher gesehen haben, und sehr unkompliziert. Darüber hinaus ist es eine der wenigen Bibliotheken, die auch eine Browser-Bibliothek anbietet, um bei Client-Implementierungen zu helfen, was sie ziemlich herausragend macht. Der Autor der Bibliothek ist sehr aktiv in der WebAuthn-/Passkey-Community.
  • GitHub-Link: https://github.com/MasterKale/SimpleWebAuthn

3.2 .NET: fido2-net-lib#

  • Programmiersprache: C#
  • Framework: .NET
  • Autoren: Anders Åberg, Alex Seigler
  • Sterne: 962
  • Verwendet von: 200
  • Mitwirkende: 40
  • FIDO-Konformität: Ja
  • Globale Einstellungen: Ja
  • Kriterien für die Auswahl des Authentikators: Wie vom W3C vorgeschlagen
  • Dokumentation: Nur die Readme mit ein paar Beispielen, etwas Passkey Intelligence auf der Website der Bibliothek
  • Beispiele: Ein Demo-Controller und ein beispielhafter Credential Store stehen zur Verfügung, um eine Beispielintegration zu zeigen
  • Empfohlene Datenstruktur:
public class StoredCredential { /// <summary> /// The Credential ID of the public key credential source. /// </summary> public byte[] Id { get; set; } /// <summary> /// The credential public key of the public key credential source. /// </summary> public byte[] PublicKey { get; set; } /// <summary> /// The latest value of the signature counter in the authenticator data from any ceremony using the public key credential source. /// </summary> public uint SignCount { get; set; } /// <summary> /// The value returned from getTransports() when the public key credential source was registered. /// </summary> public AuthenticatorTransport[] Transports { get; set; } /// <summary> /// The value of the BE flag when the public key credential source was created. /// </summary> public bool IsBackupEligible { get; set; } /// <summary> /// The latest value of the BS flag in the authenticator data from any ceremony using the public key credential source. /// </summary> public bool IsBackedUp { get; set; } /// <summary> /// The value of the attestationObject attribute when the public key credential source was registered. /// Storing this enables the Relying Party to reference the credent’al's attestation statement at a later time. /// </summary> public byte[] AttestationObject { get; set; } /// <summary> /// The value of the clientDataJSON attribute when the public key credential source was registered. /// Storing this in combination with the above attestationObject item enables the Relying Party to re-verify the attestation signature at a later time. /// </summary> public byte[] AttestationClientDataJson { get; set; } public List<byte[]> DevicePublicKeys { get; set; } public byte[] UserId { get; set; } public PublicKeyCredentialDescriptor Descriptor { get; set; } public byte[] UserHandle { get; set; } public string AttestationFormat { get; set; } public DateTimeOffset RegDate { get; set; } public Guid AaGuid { get; set; } }
  • Weitere Merkmale: Wird von Bitwarden verwendet (das Startup passwordless.dev wurde von Bitwarden übernommen)
  • Persönliche Einschätzung: Entwicklerfreundliche Bibliothek mit einer guten Menge an ergänzendem Material
  • GitHub-Link: https://github.com/passwordless-lib/fido2-net-lib

3.3 Python: py_webauthn#

  • Programmiersprache: Python
  • Framework: kein spezifisches
  • Autor: Duo Labs
  • Sterne: 727
  • Verwendet von: 912
  • Mitwirkende: 23
  • FIDO-Konformität: N/A
  • Globale Einstellungen: Nein
  • Kriterien für die Auswahl des Authentikators: Wie vom W3C vorgeschlagen
  • Dokumentation: Wenig bis gar keine, vorheriges Passkey-Wissen ist erforderlich
  • Beispiele: Kleine Codebeispiele für Registrierung und Login sind enthalten
  • Empfohlene Datenstruktur: N/A
  • Weitere Merkmale: Benötigt Python >= 3.8
  • Persönliche Einschätzung: Vergleichsweise kompakte Bibliothek mit einer kleinen Anzahl von Dateien, man kann sich in kurzer Zeit einen Überblick verschaffen.
  • GitHub-Link: https://github.com/duo-labs/py_webauthn

3.4 Ruby: webauthn-ruby#

  • Programmiersprache: Ruby
  • Framework: Ruby on Rails
  • Autor: Cedarcode
  • Sterne: 580
  • Verwendet von: 679
  • Gem-Downloads: 18 Mio
  • Mitwirkende: 27
  • FIDO-Konformität: Ja
  • Globale Einstellungen: Ja
  • Kriterien für die Auswahl des Authentikators: Wie vom W3C vorgeschlagen
  • Dokumentation: Readme ist die einzige Dokumentationsquelle
  • Beispiele: N/A
  • Empfohlene Datenstruktur: N/A
  • Weitere Merkmale: Wrapper für diese Bibliothek sind ebenfalls verfügbar (warden-webauthn, devise-passkeys)
  • Persönliche Einschätzung: Da das ergänzende Material recht begrenzt ist, würden wir diese Bibliothek nur empfehlen, wenn Sie sowohl mit Ruby als auch mit Passkeys vertraut sind.
  • GitHub-Link: https://github.com/cedarcode/webauthn-ruby

3.5 Go: go-webauthn#

  • Programmiersprache: Go
  • Framework: Go-basierte Frameworks wie Gin, Echo, …
  • Autor: Ursprünglich von Duo Labs / fortgeführt von James Elliott
  • Sterne: 480
  • Verwendet von: 280
  • Mitwirkende: 18
  • FIDO-Konformität: Ja
  • Globale Einstellungen: Ja
  • Kriterien für die Auswahl des Authentikators: Wie vom W3C vorgeschlagen
  • Dokumentation: Readme mit einigen Beispielen ist die einzige Dokumentationsquelle
  • Beispiele: Beispiel-Repository verfügbar
  • Empfohlene Datenstruktur: N/A
  • Weitere Merkmale: Große Anzahl von Dateien, einen Überblick zu bekommen dauert etwas Zeit
  • Persönliche Einschätzung: Beliebte Bibliothek, die einfach zu verwenden ist, sobald man sich damit vertraut gemacht hat. Wir empfehlen jedoch, sich vorher etwas Passkey-Wissen anzueignen (wie sie funktionieren, wie die Abläufe aussehen usw.).
  • GitHub-Link: https://github.com/go-webauthn/webauthn

3.6 Java: java-webauthn-server#

  • Programmiersprache: Java
  • Framework: Maven / Gradle
  • Autor: Yubico
  • Sterne: 391
  • Verwendet von: N/A
  • Mitwirkende: 27
  • FIDO-Konformität: N/A
  • Globale Einstellungen: Ja
  • Kriterien für die Auswahl des Authentikators: Wie vom W3C vorgeschlagen.
  • Dokumentation: Readme ist die einzige Dokumentation, aber ziemlich detailliert
  • Beispiele: N/A
  • Empfohlene Datenstruktur: N/A
  • Weitere Merkmale: Kommt mit einem Credential-Repository-Interface, das klare Anweisungen zu erforderlichen Datenbankabrufmethoden gibt.
  • Persönliche Einschätzung: Obwohl Sie die Datenbank selbst verwalten müssen, hilft das Credential-Repository erheblich beim Datenbankdesign. Naturgemäß kommen Java-Implementierungen mit einer umfangreichen Anzahl von Dateien, da jedes Attribut eine Klasse benötigt, die normalerweise in einer eigenen Datei gespeichert wird. Dies macht es zeitaufwändiger, sich einen Überblick zu verschaffen.
  • GitHub-Link: https://github.com/Yubico/java-webauthn-server

3.7 Rust: webauthn-rs#

  • Programmiersprache: Rust
  • Framework: Rust-basiert (Rocket, Axum, …)
  • Autor: Kanidm Identity Management Project
  • Sterne: 351
  • Verwendet von: 617
  • Mitwirkende: 25
  • FIDO-Konformität: N/A
  • Globale Einstellungen: Ja
  • Kriterien für die Auswahl des Authentikators: Sehr begrenzte Konfigurationsmöglichkeiten. Die anderen Bibliotheken sind exakt nach dem W3C-Standard implementiert und zeigen eine größere Konfigurierbarkeit.
  • Dokumentation: Autogenerierte technische Dokumentation existiert, ist aber nicht sehr detailliert
  • Beispiele: Tutorial-Repository mit Beispielen für 3 verschiedene Web-Frameworks ist verfügbar
  • Empfohlene Datenstruktur: N/A
  • Weitere Merkmale: Die Bibliothek hat ein Sicherheitsaudit von SUSE Product Security bestanden.
  • Persönliche Einschätzung: Aufgrund der begrenzten Konfigurierbarkeit und Dokumentation würden wir diese Bibliothek nur empfehlen, wenn Ihr primäres Framework Rust-basiert ist und Sie wissen, wie Passkeys funktionieren.
  • GitHub-Link: https://github.com/kanidm/webauthn-rs

3.8 PHP: webauthn-framework#

  • Programmiersprache: PHP
  • Framework: Symfony
  • Autor: Florent Morselli
  • Sterne: 347
  • Verwendet von: N/A
  • Mitwirkende: 18
  • FIDO-Konformität: Ja
  • Globale Einstellungen: Ja
  • Kriterien für die Auswahl des Authentikators: Wie vom W3C vorgeschlagen.
  • Dokumentation: Umfangreiche Dokumentation einschließlich technischer Details, erklärt aber auch Passkeys von Grund auf
  • Beispiele: Beispiel-Repository verfügbar
  • Empfohlene Datenstruktur:
<?php declare(strict_types=1); namespace App\Entity; use App\Repository\PublicKeyCredentialSourceRepository; use DateTimeImmutable; use Doctrine\DBAL\Types\Types; use Doctrine\ORM\Mapping as ORM; use Symfony\Component\Uid\AbstractUid; use Symfony\Component\Uid\Uuid; use Webauthn\PublicKeyCredentialSource as BasePublicKeyCredentialSource; use Webauthn\TrustPath\TrustPath; #[ORM\Table(name: 'pk_credential_sources')] #[ORM\Entity(repositoryClass: PublicKeyCredentialSourceRepository::class)] class PublicKeyCredentialSource extends BasePublicKeyCredentialSource { #[ORM\Column(type: Types::DATETIME_IMMUTABLE)] public readonly DateTimeImmutable $createdAt; #[ORM\Id] #[ORM\Column(type: Types::STRING, length: 255)] #[ORM\GeneratedValue(strategy: 'NONE')] private string $id; public function __construct( string $publicKeyCredentialId, string $type, array $transports, string $attestationType, TrustPath $trustPath, AbstractUid $aaguid, string $credentialPublicKey, string $userHandle, int $counter ) { $this->id = Uuid::v4()->toRfc4122(); $this->createdAt = new DateTimeImmutable(); parent::__construct($publicKeyCredentialId, $type, $transports, $attestationType, $trustPath, $aaguid, $credentialPublicKey, $userHandle, $counter); } public function getId(): string { return $this->id; } }

3.9 Java: webauthn4j#

  • Programmiersprache: Java
  • Framework: Maven
  • Autor: WebAuthn4j
  • Sterne: 342
  • Verwendet von: N/A
  • Mitwirkende: 19
  • FIDO-Konformität: Ja
  • Globale Einstellungen: Ja
  • Kriterien für die Auswahl des Authentikators: Anstelle des vom W3C vorgeschlagenen Parameters UserVerificationRequirement mit den Werten discouraged, preferred, required bietet webauthn4j verificationRequired und userPrecenseRequired als boolesche Variablen an.
  • Dokumentation: Trockene, aber umfangreiche Dokumentation mit einigen Codebeispielen ist verfügbar
  • Beispiele: Beispiel-Repository verfügbar
  • Empfohlene Datenstruktur: N/A
  • Weitere Merkmale: N/A
  • Persönliche Einschätzung: Das Lesen der Dokumentation wird schnell langweilig und komplex, da es sich um eine einzige große Seite handelt, die sich ausschließlich auf die Funktionalität konzentriert und nicht auf das Konzept hinter Passkeys.
  • GitHub-Link: https://github.com/webauthn4j/webauthn4j

Die folgende Tabelle bietet einen Überblick über die WebAuthn-Server-Bibliotheken:

Substack Icon

Abonnieren Sie unseren Passkeys Substack für aktuelle News.

Abonnieren

4. Empfehlungen: Navigieren in der WebAuthn-Bibliothekslandschaft#

4.1 Schritt 1: Wählen Sie Ihre WebAuthn-Bibliothek#

Da die meisten Bibliotheken gleichermaßen leistungsstark sind und den WebAuthn-Standard implementieren, empfehlen wir den folgenden Entscheidungsbaum:

  • Eine WebAuthn-Server-Bibliothek in Ihrem Framework & Ihrer Programmiersprache ist verfügbar: Wir haben keine Framework-Bibliotheken aufgelistet, die von einer der oben genannten Bibliotheken abhängen (z. B. gibt es für PHP Anpassungen für Symfony und Laravel). Falls es eine Framework-Implementierung gibt, wählen Sie diese, da Sie so die WebAuthn-API-Aufrufe nativ in Ihre aktuelle Framework-Struktur implementieren und Ihre Datenbankabstraktion zur Implementierung der Speicherung nutzen können.
  • Eine WebAuthn-Server-Bibliothek in Ihrer Programmiersprache ist verfügbar: Da Sie Backend-API-Endpunkte benötigen, wählen Sie die WebAuthn-Server-Bibliothek in Ihrer nativen Programmiersprache, damit sie nativ in Ihre aktuellen API-Endpunkte eingebettet werden kann.
  • Es ist keine WebAuthn-Server-Bibliothek in Ihrer Programmiersprache verfügbar: In diesem Fall sollten Sie die Verwendung einer Managed-Passkey-Lösung wie Corbado in Betracht ziehen. Wenn das keine Option ist, empfehlen wir die Verwendung von go-webauthn oder SimpleWebAuthn, da diese die größte Akzeptanz haben, leichtgewichtig sind und auch von vielen kommerziellen und Open-Source-Projekten verwendet werden.

Wenn Sie einfach mehr über WebAuthn-Server im Allgemeinen lernen möchten, ohne bereits ein konkretes Projekt zu haben, können wir einige Empfehlungen aussprechen, da es einige Unterschiede zwischen den Bibliotheken und ihrem ergänzenden Material wie Dokumentationen und Beispielimplementierungen gibt. Für Softwareentwickler, die begierig darauf sind, ihre Passkey-Implementierungsreise zu starten, raten wir, die folgenden Implementierungen zu wählen:

  • Für schnelle Tests: Das Paket py_webauthn bietet eine sofortige Implementierung mit gebrauchsfertigen Code-Snippets. Mit nur einem Methodenaufruf können Sie die Optionen generieren, die Sie für die Authentifizierung benötigen. Da Sie die Bibliothek nicht in ein Framework einbetten und konfigurieren müssen, ist sie ideal für schnelle Tests.
  • Für intuitive Implementierung: Das in Typescript geschriebene Paket SimpleWebauthn ist unkompliziert und entwicklerfreundlich. Wie bei py_webauthn ist die Implementierung sehr minimalistisch, verfügt aber zusätzlich über Dokumentationen, die Sie durch den Authentifizierungsprozess führen. Im Gegensatz zu py_webauthn wird bei SimpleWebAuthn jedoch kein klares Beispiel mitgeliefert, das ohne Modifikation läuft.
  • Für ein tiefes Verständnis: Die Bibliothek webauthn-framework für PHP sticht mit einer umfangreichen, strukturierten Dokumentation hervor, die sich auf Passkey-Konzepte konzentriert. Die Hauptunterschiede zu anderen Bibliotheken mit einer guten Menge an Dokumentationen wie webauthn4j sind das Design und die Anschaulichkeit der Dokumentationen.

Für ein noch tieferes Verständnis darüber, wie WebAuthn auf der Serverseite funktioniert, können Sie den sehr detaillierten Abschnitt „WebAuthn Relying Party Operations“ im WebAuthn-RFC lesen, in dem jeder Schritt detailliert beschrieben wird, der für die Registrierung eines neuen Credentials (7.1) und die Verifizierung einer Authentication Assertion (7.2) implementiert werden muss.

4.2 Schritt 2: Definieren Sie Ihre WebAuthn-Server-Optionen#

Bewerten Sie die spezifischen Anforderungen an Passkeys und WebAuthn, die Sie haben. In diesem Blogbeitrag sind wir davon ausgegangen, dass Sie Passkeys nur als Discoverable Credentials unterstützen möchten. Lesen Sie mehr über die PublicKeyCredentialCreationOptions und PublicKeyCredentialRequestOptions zusammen mit den clientseitigen WebAuthn-API-Aufrufen navigator.credentials.create() und navigator.credentials.get(), um die Parameter in der Konfiguration des WebAuthn-Server-SDKs für Ihren Anwendungsfall richtig einzustellen.

4.3 Schritt 3: Definieren Sie die Datenbankstruktur#

Für alle WebAuthn-Server-Bibliotheken müssen Sie die entsprechende Datenbankstruktur bereitstellen, um die folgenden Informationen zu persistieren / darauf zuzugreifen:

  • Credentials
  • Benutzer
  • Challenges
  • Authentikatoren

Für einige Bibliotheken gibt es spezifische Empfehlungen und Beispiele (sofern wir sie nützlich fanden, haben wir sie oben aufgeführt). Es ist unerlässlich, vollständig zu verstehen, welche WebAuthn-Felder wo gespeichert werden müssen. Achten Sie besonders darauf, welchen Wert Sie für die Benutzer-ID (user.id) verwenden möchten. Wir haben dazu hier eine detailliertere Erklärung. Berücksichtigen Sie auch, was passiert, wenn ein Benutzer einen Passkey löscht. Daneben können Sie optional die Verwendung bestimmter Authentikatoren einschränken. Eine Liste gültiger Authentikatoren im Zusammenhang mit Passkeys finden Sie hier. Falls Sie auch die Attestations von Security Keys unterstützen und überprüfen möchten, ist dies eine ganz andere Geschichte. Weitere Informationen dazu finden Sie hier.

4.4 Schritt 4: Testen Sie auf den Geräten Ihrer Benutzer#

Identifizieren Sie, auf welchen Geräten Ihre Benutzer Passkeys und Fallback-Authentifizierungsmethoden verwenden werden. Falls Sie sich nicht sicher sind, welche Geräte, Browser und Betriebssysteme Ihre Benutzer verwenden, schauen Sie sich State of Passkeys an, um die neuesten Daten zur Passkey-Bereitschaft über Plattformen, Browser und Betriebssysteme hinweg zu erhalten. Wenn Sie spezifische Fragen zur Passkey-Adoption und zum Anteil der Passkey-Bereitschaft bestimmter Geräte haben, können Sie sich gerne an uns wenden. Wir geben Ihnen gerne weitere Einblicke und helfen Ihnen bei diesem Thema (siehe auch unseren neuesten Blogbeitrag zur Passkey-Bereitschaft). Aus Sicht der Observability sollten Sie clientseitige WebAuthn-Fehler und Server-Verifizierungsablehnungen als separate Streams betrachten; verwenden Sie für clientseitige Bucket-Definitionen WebAuthn-Fehler. Darüber hinaus sollten Sie bedenken, dass Sie sich für Windows 10 und Linux dedizierte Lösungen einfallen lassen müssen, da diese Betriebssysteme die geringste (wenn überhaupt) Passkey-Unterstützung bieten.

StateOfPasskeys Icon

Sehen Sie, wie viele Menschen Passkeys tatsächlich nutzen.

Adoptionsdaten ansehen

5. Fazit#

Für fast jede Sprache oder jedes Framework gibt es mittlerweile eine gut etablierte WebAuthn-Server-Bibliothek. Der Vergleich von Bibliotheken verschiedener Sprachen zeigt keine eindeutige Überlegenheit bestimmter Implementierungen. Vielmehr sollten Sie das Framework / die Programmiersprache verwenden, mit der Sie am meisten vertraut sind. Alternativ, wenn Sie WebAuthn nicht selbst implementieren und sich um all die Dinge kümmern möchten, die damit einhergehen, können Sie eine dedizierte, vorgefertigte Passkey-Authentifizierungslösung wie Corbado ausprobieren. Als Passkey-zentrierte All-in-One-Authentifizierungslösung verfügt sie über großartige Passkey Intelligence, Sitzungsverwaltung sowie Fallback-Authentifizierungsmethoden, sodass Sie sich auf die Entwicklung Ihres Produkts konzentrieren und das Thema Authentifizierung abgeben können. Sie können es kostenlos und für eine unbegrenzte Anzahl von Benutzern hier ausprobieren.

Corbado

Über Corbado

Corbado ist die Authentication 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

Häufig gestellte Fragen#

Wie wähle ich die richtige WebAuthn-Server-Bibliothek für mein Projekt aus?#

Prüfen Sie zunächst, ob eine Bibliothek für Ihr spezifisches Framework existiert, und dann für Ihre Programmiersprache. Da alle aufgeführten Bibliotheken den WebAuthn-Standard gleichermaßen implementieren, sollte bei der Wahl eher die Vertrautheit mit Ihrem bestehenden Stack im Vordergrund stehen als Funktionsunterschiede zwischen den Bibliotheken.

Welche Daten muss ich beim Aufbau eines WebAuthn-Servers in meiner Datenbank speichern?#

Mindestens müssen Sie Credentials, Benutzer, Challenges und Authentikatoren persistieren. Achten Sie genau darauf, welchen Wert Sie als Benutzer-ID (userHandle) vergeben, und planen Sie Szenarien ein, in denen Benutzer einen Passkey von ihrem Gerät löschen könnten.

Warum kann ich die serverseitige WebAuthn-Verifizierung nicht einfach ohne Bibliothek von Grund auf neu implementieren?#

WebAuthn-Server-Bibliotheken übernehmen die komplexesten kryptografischen Operationen: die Generierung der Parameter PublicKeyCredentialCreationOptions und PublicKeyCredentialRequestOptions sowie die Verifizierung signierter Challenges. Dies korrekt von Grund auf neu zu tun, ist deutlich schwieriger als die Verwendung einer FIDO-konformen Bibliothek, die bereits getestet und auditiert wurde.

Welche Betriebssysteme haben die schlechteste Passkey-Unterstützung und benötigen zusätzliche Handhabung in einer WebAuthn-Implementierung?#

Windows 10 und Linux bieten die geringste Passkey-Unterstützung, sodass für Benutzer auf diesen Plattformen dedizierte Fallback-Lösungen erforderlich sind. Die Überwachung von clientseitigen WebAuthn-Fehlern und Server-Verifizierungsablehnungen als separate Streams hilft dabei, betriebssystemspezifische Probleme in der Produktion zu identifizieren.

Sehen Sie, wie Corbado zu Ihrem Passkey-Rollout und bestehenden Authentifizierungs-Stack passt.

Console ansehen

Diesen Artikel teilen


LinkedInTwitterFacebook