Authentification - ETML-ES-LABEFE-MANUEL-THEO/BACKEND GitHub Wiki

Introduction

Cette documentation décrit le système d'authentification mis en place dans notre application Spring. Elle détaille la configuration de sécurité, le fonctionnement des filtres personnalisés et le processus d'authentification basé sur un token d'API et un cookie utilisateur.

Configuration de la Sécurité

La sécurité est configurée via la classe SecurityConfig, qui définit la chaîne de filtres de sécurité et les règles de gestion des requêtes HTTP.

Points clés de la configuration

  • CORS : Autorise toutes les origines, méthodes et headers. Les credentials sont permis.
  • CSRF : Désactivé pour simplifier les appels API.
  • Autorisation : Toutes les requêtes sont permises par défaut (permitAll()), mais l'accès est restreint par les filtres personnalisés.
  • HTTP Basic : Désactivé.
  • Filtres personnalisés :
    • APIBaseTokenFilter : Vérifie la présence et la validité de la clé API dans l'en-tête.
    • UserAuthTokenFilter : Authentifie l'utilisateur via un cookie contenant un token.

Filtres d'authentification personnalisés

1. APIBaseTokenFilter

  • But : Protéger l'API avec une clé d'accès partagée.
  • Fonctionnement :
    • Cherche l'en-tête X-API-KEY dans chaque requête.
    • Si la clé ne correspond pas à la valeur attendue, la requête est rejetée avec un statut 401 (Unauthorized).
    • Si la clé est valide, la requête continue vers le filtre suivant.

Exemple d'appel

GET /api/resource HTTP/1.1
Host: example.com
X-API-KEY: ahyOlnWM2pHwkMk6egpItw

2. UserAuthTokenFilter

  • But : Authentifier l'utilisateur via un token stocké dans un cookie.
  • Fonctionnement :
    • Recherche un cookie nommé Authorization.
    • Si présent, vérifie la validité du token via le TokenService.
    • Si le token est valide, l'utilisateur est authentifié dans le contexte de sécurité.
    • Si le token est invalide ou absent, le cookie est supprimé et l'utilisateur n'est pas authentifié.

Cycle d'authentification utilisateur

  1. L'utilisateur se connecte via une interface dédiée (hors scope de ce document).
  2. Un cookie Authorization contenant le token est envoyé au navigateur.
  3. À chaque requête, le cookie est envoyé automatiquement et vérifié.

Séquence d'une requête authentifiée

  1. Vérification de la clé API (APIBaseTokenFilter)
    • Si la clé est absente ou incorrecte, la requête est rejetée.
  2. Vérification du token utilisateur (UserAuthTokenFilter)
    • Si le token est absent ou invalide, le cookie est supprimé.
    • Si le token est valide, l'utilisateur est authentifié.
  3. Traitement de la requête par le contrôleur