Autorisatie met passkeys

· Functies

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:

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 Stap 2: credential-assertion aan de clientzijde Stap 3: verificatie aan de serverzijde

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?

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: