Vanaf sgcWebSockets 2025.4.0 Enterprise wordt het WebAuthn-protocol ondersteund (momenteel in BETA).
WebAuthn (Web Authentication) is een webstandaard ontwikkeld door het World Wide Web Consortium (W3C) en de FIDO Alliance om veilige, wachtwoordloze authenticatie op het web mogelijk te maken. Het maakt deel uit van het bredere FIDO2-framework en heeft als doel de afhankelijkheid van traditionele wachtwoorden te verminderen, die vaak kwetsbaar zijn voor phishing, credential stuffing en andere aanvallen.
In de kern stelt WebAuthn gebruikers in staat te authenticeren met publieke-sleutel-cryptografie. In plaats van een gebruikersnaam en wachtwoord registreren gebruikers een uniek publiek-/privé-sleutelpaar bij een webapplicatie (de Relying Party). De privésleutel wordt veilig opgeslagen op een authenticator—zoals een hardware-security-key, smartphone of ingebouwd biometrisch apparaat—terwijl de publieke sleutel op de server wordt opgeslagen.
Tijdens authenticatie verstuurt de server een challenge die moet worden ondertekend door de privésleutel van de gebruiker. De ondertekende challenge wordt teruggestuurd en geverifieerd met de opgeslagen publieke sleutel, wat zowel de integriteit als de origine van de respons garandeert. Deze aanpak voorkomt dat credentials worden onderschept of hergebruikt.
WebAuthn ondersteunt een reeks aan authenticators en apparaten, wat het flexibel maakt voor zowel ontwikkelaars als gebruikers. Het maakt ook multi-factor-authenticatie (MFA) mogelijk wanneer gecombineerd met andere factoren zoals PIN's of biometrie, en verbetert daarmee de beveiliging aanzienlijk zonder afbreuk te doen aan de gebruiksvriendelijkheid.
Ondersteunde attestation-formaten
Verschillende attestation-formaten bepalen hoe deze gegevens worden gestructureerd en geverifieerd. Drie veelgebruikte formaten zijn android-key, packed en andere zoals fido-u2f, apple of none. Standaard zijn alle attestation-formaten ingeschakeld. Hieronder vind je de lijst met ondersteunde attestation-formaten:
- NoneAttestation: in dit geval worden geen attestation-gegevens geretourneerd. Geeft prioriteit aan privacy van de gebruiker door het blootstellen van apparaat-identifiers te vermijden. Gangbaar in applicaties die geen waarde hechten aan apparaatherkomst.
- PackedAttestation: is een flexibel, compact formaat dat door veel authenticators wordt gebruikt. De authenticator retourneert een attestation-certificaat en handtekening. Kan zijn: Full attestation: ondertekend met een door de leverancier verstrekte sleutel en certificaat, of Self attestation: ondertekend met de privésleutel van de credential. Het meest gebruikt op verschillende platforms (bv. YubiKey, Windows Hello).
- TPMAttestation: gebruikt door apparaten met een Trusted Platform Module (TPM). Attestation wordt ondertekend met sleutels uit de TPM en omvat een certificaatketen. Gebruikt door enterprise-desktops/laptops met TPM-chips (bv. Windows-machines).
- AndroidKeyAttestation: gebruikt door Android-apparaten met de Android Keystore. De sleutel wordt in hardware gegenereerd, en attestation bevat informatie ondertekend door een certificaatketen uitgegeven door de fabrikant van het apparaat. Gebruikt door Android-telefoons met hardware-gebaseerde keystores (TEE of StrongBox).
- AppleAttestation: gebruikt door Apple-platform-authenticators, zoals Touch ID en Face ID. Attestation wordt gegenereerd door interne Apple-API's en bevat een speciaal certificaatformaat. Gebruikt op Safari met Apple-biometrie.
- FidoU2FAttestation: legacy-attestation-formaat gebruikt door FIDO U2F-authenticators. Retourneert een U2F-compatibel certificaat en handtekening. Gebruikt door oudere security keys (bv. vroege YubiKeys) die FIDO U2F ondersteunen.
WebAuthn-flow
- WebAuthn-registratie: de server genereert een challenge en stuurt deze naar de client, die een authenticator (bv. security key of biometrisch apparaat) gebruikt om een sleutelpaar te maken. De publieke sleutel wordt teruggestuurd en door de server opgeslagen voor toekomstige authenticatie.
- WebAuthn-authenticatie: de server stuurt een challenge naar de client, die deze ondertekent met de eerder geregistreerde privésleutel die in de authenticator is opgeslagen. De ondertekende respons wordt door de server geverifieerd met de opgeslagen publieke sleutel om de identiteit van de gebruiker te bevestigen.

WebAuthn-servercomponent
Het TsgcWSAPIServer_WebAuthn -component biedt een eenvoudige maar krachtige oplossing om de WebAuthn Relying Party-server te implementeren en zo wachtwoordloze authenticatie in je webapplicatie mogelijk te maken. Een WebAuthn-applicatie bestaat uit een WebAuthn-server die de server-side registratie en authenticatie afhandelt en een client-side-applicatie die meestal een JavaScript-applicatie is.Vind hieronder een eenvoudige configuratie van de WebAuthn-server:
// ... 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
De volgende Delphi WebAuthn-demo laat zien hoe je een nieuwe credential registreert en deze daarna gebruikt om de gebruiker te authenticeren.
