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.