From sgcWebSockets 2025.4.0 Enterprise, the WebAuthn Protocol is supported (currently in BETA).
WebAuthn (Web Authentication) to standard sieciowy opracowany przez W3C i FIDO Alliance, umożliwiający bezpieczne, bezhasłowe uwierzytelnianie w sieci. Jest częścią szerszego frameworka FIDO2 i ma na celu zmniejszenie zależności od tradycyjnych haseł, które są podatne na phishing, credential stuffing i inne ataki.
U podstaw WebAuthn leży kryptografia klucza publicznego. Zamiast nazwy użytkownika i hasła, użytkownicy rejestrują unikalną parę kluczy publiczny-prywatny w aplikacji webowej (Relying Party). Klucz prywatny jest bezpiecznie przechowywany w uwierzytelniatorze — takim jak sprzętowy klucz bezpieczeństwa, smartfon lub wbudowane urządzenie biometryczne — podczas gdy klucz publiczny jest przechowywany na serwerze.
Podczas uwierzytelniania serwer wydaje wyzwanie, które musi być podpisane kluczem prywatnym użytkownika. Podpisane wyzwanie jest odsyłane i weryfikowane za pomocą przechowywanego klucza publicznego, zapewniając integralność i autentyczność odpowiedzi. Takie podejście zapobiega przechwytywaniu lub ponownemu użyciu poświadczeń.
WebAuthn obsługuje szeroki zakres uwierzytelniatorów i urządzeń, co czyni go elastycznym dla deweloperów i użytkowników. Umożliwia też wieloczynnikowe uwierzytelnianie (MFA) w połączeniu z innymi czynnikami, takimi jak PIN-y lub biometria, znacznie poprawiając bezpieczeństwo bez poświęcania użyteczności.
Obsługiwane formaty attestation
Różne formaty attestation definiują, jak te dane są strukturyzowane i weryfikowane. Trzy powszechnie używane formaty to android-key, packed oraz inne, takie jak fido-u2f, apple lub none. Domyślnie wszystkie formaty attestation są włączone; poniżej znajdziesz listę obsługiwanych formatów:
- NoneAttestation: nie są zwracane żadne dane attestation. Priorytetem jest prywatność użytkownika przez uniknięcie ujawniania identyfikatorów urządzenia. Powszechne w aplikacjach, które nie dbają o pochodzenie urządzenia.
- PackedAttestation: elastyczny, kompaktowy format używany przez wiele uwierzytelniatorów. Uwierzytelniator zwraca certyfikat attestation i podpis. Może być: Full attestation: podpisany kluczem i certyfikatem dostawcy, lub Self attestation: podpisany kluczem prywatnym poświadczenia. Najszerzej stosowany na różnych platformach (np. YubiKey, Windows Hello).
- TPMAttestation: używany przez urządzenia z modułem Trusted Platform Module (TPM). Attestation jest podpisywany kluczami z TPM i zawiera łańcuch certyfikatów. Stosowany w firmowych komputerach stacjonarnych/laptopach z układami TPM (np. maszyny Windows).
- AndroidKeyAttestation: używany przez urządzenia Android z Android Keystore. Klucz jest generowany sprzętowo, a attestation zawiera informacje podpisane przez łańcuch certyfikatów wystawiony przez producenta urządzenia. Stosowany w telefonach Android z kluczami w sprzęcie (TEE lub StrongBox).
- AppleAttestation: używany przez uwierzytelniatory platformy Apple, takie jak Touch ID i Face ID. Attestation jest generowany przez wewnętrzne API Apple i zawiera specjalny format certyfikatu. Stosowany w Safari z biometrią Apple.
- FidoU2FAttestation: starszy format attestation używany przez uwierzytelniatory FIDO U2F. Zwraca certyfikat i podpis zgodne z U2F. Stosowany w starszych kluczach bezpieczeństwa (np. wczesne YubiKey) obsługujących FIDO U2F.
WebAuthn Flow
- Rejestracja WebAuthn: Serwer generuje wyzwanie i wysyła je do klienta, który używa uwierzytelniatorta (np. klucza bezpieczeństwa lub urządzenia biometrycznego) do utworzenia pary kluczy. Klucz publiczny jest odsyłany i przechowywany przez serwer na potrzeby przyszłego uwierzytelniania.
- Uwierzytelnianie WebAuthn: Serwer wysyła wyzwanie do klienta, który podpisuje je kluczem prywatnym zarejestrowanym wcześniej w uwierzytelniatorze. Podpisana odpowiedź jest weryfikowana przez serwer za pomocą przechowywanego klucza publicznego, potwierdzając tożsamość użytkownika.

Komponent serwera WebAuthn
Komponent TsgcWSAPIServer_WebAuthn zapewnia proste, ale potężne rozwiązanie do implementacji serwera WebAuthn Relying Party, umożliwiając bezhasłowe uwierzytelnianie w aplikacji webowej. Aplikacja WebAuthn składa się z serwera WebAuthn obsługującego rejestrację i uwierzytelnianie po stronie serwera oraz aplikacji klienckiej (zazwyczaj w JavaScript).Poniżej znajdziesz prostą konfigurację serwera WebAuthn:
// ... 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
The following Delphi WebAuthn Demo shows how to register a new credential and use after to authenticate the user.
