Architecture

Flux d'authentification JWT

Fonctionnement de l'authentification par JWT dans TrickSpin.

Flux d'authentification JWT

TrickSpin utilise LexikJWTAuthenticationBundle avec une stratégie de stockage en HttpOnly cookies (pas de localStorage).

Connexion

Client (Nuxt)          Symfony
     |                    |
     |-- POST /api/login ->|
     |                    |-- Vérifie les credentials
     |                    |-- Génère le JWT
     |<- Set-Cookie: jwt--|   (HttpOnly, Secure, SameSite)
     |                    |

Le token est splitté en deux cookies (jwt_hp et jwt_s) via la configuration split: true de LexikJWT. Le cookie est émis sur le domaine .trickspin.dev.

Requêtes authentifiées

Client (Nuxt)          Symfony
     |                    |
     |-- GET /api/... --->|   (cookie envoyé automatiquement)
     |                    |-- Extrait le JWT depuis le cookie
     |                    |-- Valide le token
     |<-- 200 / données --|
     |                    |

Symfony est configuré avec token_extractors pour lire le JWT depuis le cookie, sans en-tête Authorization.

Protection contre le brute force

Les tentatives de connexion sont limitées via symfony/rate-limiter : 5 tentatives maximum sur une fenêtre de 15 minutes par adresse IP.

Déconnexion

La déconnexion supprime les cookies côté client via un appel à l'endpoint /api/logout. Aucune invalidation serveur n'est nécessaire puisque le token a une durée de vie limitée.