Autorisierung mit PassKeys

· Funktionen

WebAuthn (Web Authentication) ist ein W3C-Standard, der sichere, passwortlose und phishing-resistente Authentifizierung mit Public-Key-Kryptografie ermöglicht. Er wird häufig mit Passkeys eingesetzt, um Sicherheit und Nutzererlebnis zu verbessern. Die Authentifizierung von Nutzern mit WebAuthn ist jedoch nur der erste Schritt — nach erfolgreicher Authentifizierung musst du ihre Aktionen oft über mehrere API-Endpunkte hinweg autorisieren.

In diesem Artikel behandeln wir, wie du:

1. Den WebAuthn-Authentifizierungs-Flow verstehen

WebAuthn basiert auf Public-Key-Kryptografie und Credentials, die sicher auf dem Client (z.B. Passkeys im Browser oder Gerät) gespeichert sind. Der Authentifizierungs-Flow umfasst im Allgemeinen folgende Schritte:

Schritt 1: Authentifizierung starten Schritt 2: Client-seitige Credential-Assertion Schritt 3: Server-seitige Verifizierung

An diesem Punkt hast du bestätigt, wer der Nutzer ist, aber du brauchst noch einen Weg, um den Zugriff auf deine APIs zu autorisieren

2. Bearer-Token nach erfolgreichem WebAuthn zurückgeben

Wenn du möchtest, dass der Server nach erfolgreicher Authentifizierung einen Bearer-Token sendet, der zum Öffnen einer neuen WebSocket- oder HTTP-Verbindung verwendet wird, übergib den Parameter token = true. Beispiel:

{
"username": "alice@example.com", "token": true
}

Nach erfolgreicher Authentifizierung sendet der Server eine Antwort wie diese:

{
"verified": "ok",
  "authentication": {
    "token": "C760C1C39E3D4E829693A13F18F5CFDE537B516336FC48F7BAB0276176F9E6DE"
  }
}


Das Ereignis OnWebAuthnUnauthorized wird ausgelöst, wenn eine Anfrage nicht autorisiert ist und getrennt wird. Hier kannst du konfigurieren, welche Endpunkte eine WebAuthn-Authentifizierung erfordern und welche nicht.

Warum einen Bearer-Token verwenden?

3. Bearer-Token für API-Autorisierung verwenden

Sobald du ein neues Token hast, sendest du einfach einen Authorization-Header mit diesem Bearer-Token. Du kannst die Eigenschaft CustomHeaders des TsgcHTTP1Client verwenden, um den Bearer-Token zu konfigurieren. Beispiel:

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 im Überblick

Hier ist die komplette High-Level-Sequenz: