Ab sgcWebSockets 2025.4.0 Enterprise wird das WebAuthn-Protokoll unterstützt (aktuell in BETA).
WebAuthn (Web Authentication) ist ein Web-Standard, der vom World Wide Web Consortium (W3C) und der FIDO Alliance entwickelt wurde, um sichere, passwortlose Authentifizierung im Web zu ermöglichen. Er ist Teil des umfassenderen FIDO2-Frameworks und soll die Abhängigkeit von klassischen Passwörtern reduzieren, die häufig anfällig für Phishing, Credential-Stuffing und andere Angriffe sind.
Im Kern erlaubt WebAuthn die Authentifizierung mit asymmetrischer Kryptographie. Statt eines Benutzernamens und Passworts registrieren Nutzer ein eindeutiges öffentlich-privates Schlüsselpaar bei einer Webanwendung (der Relying Party). Der private Schlüssel wird sicher auf einem Authenticator gespeichert — zum Beispiel auf einem Hardware-Security-Key, Smartphone oder einem integrierten biometrischen Gerät — während der öffentliche Schlüssel auf dem Server liegt.
Bei der Authentifizierung gibt der Server eine Challenge aus, die mit dem privaten Schlüssel des Nutzers signiert werden muss. Die signierte Challenge wird zurückgesendet und mit dem gespeicherten öffentlichen Schlüssel verifiziert, was sowohl Integrität als auch Herkunft der Antwort sicherstellt. Dieser Ansatz verhindert, dass Credentials abgefangen oder wiederverwendet werden.
WebAuthn unterstützt eine Bandbreite an Authenticators und Geräten und ist damit flexibel für Entwickler wie für Nutzer. In Kombination mit weiteren Faktoren wie PINs oder Biometrie ermöglicht es Mehrfaktor-Authentifizierung (MFA) und verbessert die Sicherheit deutlich, ohne die Bedienbarkeit zu opfern.
Unterstützte Attestation-Formate
Verschiedene Attestation-Formate legen fest, wie diese Daten strukturiert und überprüft werden. Drei häufig genutzte Formate sind android-key, packed und andere wie fido-u2f, apple oder none. Standardmäßig sind alle Attestation-Formate aktiviert. Unten findest du die Liste der unterstützten Attestation-Formate:
- NoneAttestation: Hier werden keine Attestation-Daten zurückgegeben. Priorisiert die Privatsphäre des Nutzers, indem auf die Offenlegung von Gerätekennungen verzichtet wird. Üblich in Anwendungen, denen die Geräte-Herkunft egal ist.
- PackedAttestation: Ein flexibles, kompaktes Format, das viele Authenticators nutzen. Der Authenticator gibt ein Attestation-Zertifikat und eine Signatur zurück. Kann sein: Full Attestation: Signiert mit einem vom Hersteller gestellten Schlüssel und Zertifikat oder Self Attestation: Signiert mit dem privaten Credential-Schlüssel. Am weitesten verbreitet über verschiedene Plattformen (z. B. YubiKey, Windows Hello).
- TPMAttestation: Wird von Geräten mit Trusted Platform Module (TPM) verwendet. Die Attestation wird mit Schlüsseln aus dem TPM signiert und enthält eine Zertifikatskette. Wird auf Enterprise-Desktops/-Laptops mit TPM-Chips eingesetzt (z. B. Windows-Rechner).
- AndroidKeyAttestation: Wird von Android-Geräten mit dem Android Keystore verwendet. Der Schlüssel wird in Hardware generiert, und die Attestation enthält Informationen, die mit einer Zertifikatskette des Geräteherstellers signiert sind. Eingesetzt auf Android-Phones mit hardware-gestützten Keystores (TEE oder StrongBox).
- AppleAttestation: Wird von Apple-Plattform-Authenticators wie Touch ID und Face ID verwendet. Die Attestation wird von Apples internen APIs erzeugt und nutzt ein spezielles Zertifikatsformat. Eingesetzt in Safari mit Apple-Biometrie.
- FidoU2FAttestation: Legacy-Attestation-Format, das von FIDO-U2F-Authenticators verwendet wird. Gibt ein U2F-kompatibles Zertifikat und eine Signatur zurück. Eingesetzt bei älteren Security-Keys (z. B. frühe YubiKeys), die FIDO U2F unterstützen.
WebAuthn-Ablauf
- WebAuthn-Registrierung: Der Server erzeugt eine Challenge und sendet sie an den Client, der mit einem Authenticator (z. B. Security-Key oder biometrisches Gerät) ein Schlüsselpaar erzeugt. Der öffentliche Schlüssel wird zurückgesendet und vom Server für die spätere Authentifizierung gespeichert.
- WebAuthn-Authentifizierung: Der Server sendet eine Challenge an den Client, der sie mit dem zuvor registrierten und im Authenticator gespeicherten privaten Schlüssel signiert. Die signierte Antwort wird vom Server mit dem gespeicherten öffentlichen Schlüssel verifiziert, um die Identität des Nutzers zu bestätigen.

WebAuthn-Server-Komponente
Die Komponente TsgcWSAPIServer_WebAuthn bietet eine einfache, aber leistungsstarke Lösung, um den WebAuthn-Relying-Party-Server zu implementieren und passwortlose Authentifizierung in deiner Webanwendung zu ermöglichen. Eine WebAuthn-Anwendung besteht aus einem WebAuthn-Server, der die serverseitige Registrierung und Authentifizierung übernimmt, und einer clientseitigen Anwendung, die in der Regel eine JavaScript-Anwendung ist.Unten findest du eine einfache Konfiguration des WebAuthn-Servers:
// ... create the servers
HTTPServer := TsgcWebSocketHTTPServer.Create(nil);
WebAuthnServer := TsgcWSAPIServer_WebAuthn.Create(nil);
WebAuthnServer.Server := HTTPServer;
// ... enable for testing
WebAuthnServer.EndpointsOptions.Test.Enabled := True;
// ... WebAuthn options
WebAuthnServer.WebAuthnOptions.RelyingParty := 'localhost';
// ... bindings
Server.Port := 443;
HTTPServer.SSLOptions.Port := 443;
HTTPServer.Bindings.Clear;
With HTTPServer.Bindings.Add do
begin
Port := 443;
IP := '127.0.0.1';
end;
HTTPServer.SSLOptions.Certificate := 'sgc.pem';
HTTPServer.SSLOptions.KeyFile := 'sgc.pem';
HTTPServer.SSL := True;
// ... active
HTTPServer.Active := True;
Delphi-WebAuthn-Server-Demo
Das folgende Delphi-WebAuthn-Demo zeigt, wie du ein neues Credential registrierst und anschließend zur Authentifizierung des Nutzers verwendest.
