Autorisation via les PassKeys

· Fonctionnalités

WebAuthn (Web Authentication) est un standard W3C qui permet une authentification sécurisée, sans mot de passe et résistante au phishing à l'aide de la cryptographie à clé publique. Il est largement utilisé avec les passkeys pour améliorer la sécurité et l'expérience utilisateur. Cependant, authentifier les utilisateurs avec WebAuthn n'est que la première étape — après une authentification réussie, tu as souvent besoin d'autoriser leurs actions sur plusieurs endpoints d'API.

Dans cet article, on va voir comment :

1. Comprendre le flux d'authentification WebAuthn

WebAuthn s'articule autour de la cryptographie à clé publique et des identifiants stockés de manière sécurisée côté client (par ex. passkeys dans le navigateur ou l'appareil). Le flux d'authentification comporte généralement les étapes suivantes :

Étape 1 : initier l'authentification Étape 2 : assertion d'identifiant côté client Étape 3 : vérification côté serveur

À ce stade, tu as confirmé qui est l'utilisateur, mais tu as encore besoin d'un moyen d'autoriser l'accès à tes APIs. 

2. Retourner un bearer token après une authentification WebAuthn réussie

Si tu veux qu'après une authentification réussie le serveur envoie un bearer token qui sera utilisé pour ouvrir une nouvelle connexion WebSocket ou HTTP, passe le paramètre token = true. Exemple :

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

Après une authentification réussie, le serveur enverra une réponse comme celle-ci :

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


L'événement OnWebAuthnUnauthorized est appelé quand une requête n'est pas autorisée et qu'elle va être déconnectée ; ici tu peux configurer quels endpoints requièrent une authentification WebAuthn et lesquels non.

Pourquoi utiliser un bearer token ?

3. Utiliser le bearer token pour l'autorisation d'API

Une fois que tu as un nouveau jeton, il suffit d'envoyer un en-tête d'autorisation avec ce bearer token. Tu peux utiliser la propriété CustomHeaders du TsgcHTTP1Client pour configurer le bearer token. Exemple :

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. Aperçu du flux de bout en bout

Voici la séquence complète de haut niveau :