[Majeur] Une seule session par utilisateur (un seul refresh token) #101
Labels
No labels
bug
enhancement
feature
groupe/chat-data
groupe/friends-blocking
groupe/input-validation
groupe/realtime-presence
No milestone
No project
No assignees
1 participant
Notifications
Total time spent: 29 minutes 50 seconds
Due date
asventi
29 minutes 50 seconds
No due date set.
Dependencies
No dependencies set
Reference
Transcendence/backend#101
Loading…
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Gravité : Majeur
Rapports QA d'origine : AUTH-14, PROFILE-20
Se connecter sur un autre appareil coupe la session précédente ; un logout coupe toutes les sessions.
Détails des rapports
[AUTH-14] Il n'y a qu'une session par utilisateur : se reconnecter ailleurs déconnecte la précédente ; le logout d'un appareil les coupe tous — Gravité : Majeur
POST /auth/login,GET /auth/logout,GET /me/tokensGET /auth/refresh.REFRESH_TOKEN_UNKNOWNpour le client 1 (déconnecté à l'expiration de son access token, ≤ 10 min) ;GET /me/tokensne renvoie jamais plus d'une entrée alors que l'endpoint est décrit "one per device still logged in". Inversement un logout depuis le client 1 supprime aussi la session du client 2 (sB2: tokens[]).LoginUserCommand.cs:30-37(supprime le refresh existant),LogoutQuery.cs:12(SingleOrDefault(r.UserId == id)).[PROFILE-20] Changement de mot de passe : les autres sessions restent valides jusqu'à 10 min (access token), seul le refresh est révoqué ; un seul refresh token par user — Gravité : Mineur
PATCH /api/me/password,POST /api/auth/loginGET /api/me-> 200 (valide encore ~10 min) ;GET /api/auth/refresh-> 401 "Refresh token unknown" (cookies effacés). Ancien mdp -> 406, nouveau -> 200 : OK.backend/API/Auth/Login/LoginUserCommand.cs:28-36(une seule ligne RefreshToken par user),Auth/Token/TokenProvider.cs:34(JWT 10 min sans révocation).Trouvé par une campagne de tests QA automatisés (agents Claude, Playwright) sur l'environnement de dev. Les captures citées sont locales et non jointes.