WebAuthn (Web Authenticatie) is een W3C-standaard die veilige, wachtwoordloze en phishing-bestendige authenticatie mogelijk maakt met behulp van publieke-sleutel-cryptografie. Het wordt veel gebruikt in combinatie met passkeys voor betere beveiliging en gebruikerservaring. Maar gebruikers authenticeren met WebAuthn is slechts de eerste stap — na succesvolle authenticatie moet je hun acties vaak ook nog autoriseren bij meerdere API-endpoints.
In dit artikel behandelen we hoe je:
- WebAuthn gebruikt voor passkey-gebaseerde authenticatie.
- een bearer-token ontvangt van je WebAuthn-server.
- het ontvangen bearer-token gebruikt om opvolgende HTTP-requests te autoriseren.
1. Inzicht in de WebAuthn-authenticatieflow
WebAuthn draait om publieke-sleutel-cryptografie en credentials die veilig op de client zijn opgeslagen (bijv. passkeys in de browser of het apparaat). De authenticatieflow omvat doorgaans deze stappen:
Stap 1: authenticatie starten- De client (browser/app) vraagt een WebAuthn-challenge op bij de server.
- De server genereert een challenge en stuurt deze naar de client.
- De browser gebruikt de WebAuthn-API (
navigator.credentials.get) om de challenge te ondertekenen met een private key die in een passkey is opgeslagen. - De ondertekende assertion wordt teruggestuurd naar de server.
- De WebAuthn-server verifieert de assertion met behulp van de bijbehorende publieke sleutel.
- Als de assertion geldig is, authenticeert de server de gebruiker.
Op dit punt heb je bevestigd wie de gebruiker is, maar heb je nog een manier nodig om toegang tot je API's te autoriseren.
2. Een bearer-token teruggeven na succesvolle WebAuthn
Als je wilt dat de server na een succesvolle authenticatie een bearer-token verstuurt om een nieuwe websocket- of HTTP-verbinding te openen, geef je de parameter token = true mee. Voorbeeld:
{
"username": "alice@example.com", "token": true
}
Na een succesvolle authenticatie stuurt de server een antwoord zoals dit:
{
"verified": "ok",
"authentication": {
"token": "C760C1C39E3D4E829693A13F18F5CFDE537B516336FC48F7BAB0276176F9E6DE"
}
}
De gebeurtenis OnWebAuthnUnauthorized wordt aangeroepen wanneer een request niet is geautoriseerd en wordt losgekoppeld. Hier kun je configureren welke endpoints WebAuthn-authenticatie vereisen en welke niet.
Waarom een bearer-token gebruiken?
- Het maakt herauthenticatie bij elke request overbodig.
- Het maakt stateless autorisatie over microservices mogelijk.
- Het integreert naadloos met moderne API-beveiligingspatronen.
3. Het bearer-token gebruiken voor API-autorisatie
Zodra je een nieuw token hebt, stuur je gewoon een authorization-header mee met dit bearer-token. Je kunt de CustomHeaders-eigenschap van de TsgcHTTP1Client gebruiken om het bearer-token te configureren. Voorbeeld:
procedure GetHTTPRequest(const aURL: string; const aToken: string): string;
var
oHTTP: TsgcHTTP1Client;
begin
oHTTP := TsgcHTTP1Client.Create(nil);
Try
oHTTP.Request.CustomHeaders.AddValue('Authorization', 'Bearer ' + aToken);
result := oHTTP.Get(aURL);
Finally
oHTTP.Free;
End;
end;
4. End-to-end-flow-overzicht
Hier is de volledige high-level-sequentie:

