Flow de connexion — Authentification (référence transversale)¶
Spécification utilisable par tous les projets nécessitant un module d'authentification. Couvre : login simple, 2FA (email + TOTP), gestion des tokens JWT, cas d'erreurs.
Connexion simple (sans 2FA)¶
- Saisie des identifiants — email + mot de passe
- Validation côté client — format email, champs non vides
- Vérification utilisateur — existence en base, email confirmé, compte non bloqué
- Vérification mot de passe —
bcrypt.compareavec le hash stocké - Vérification statut 2FA
- 2FA non actif → étape 6
- 2FA actif → #Connexion avec 2FA activé
- Génération des tokens — Access Token JWT (24h) + Refresh Token JWT (7 jours) + session en base
- Session stockée — ID session, User Agent, IP, device, localisation, dates création/activité
- Audit — action
LOGIN, IP, device, timestamp - Retour client — Access Token, Refresh Token, profil (ID, email, nom, rôle), ID session
- Redirection → dashboard
Connexion avec 2FA activé¶
Phase 1 : Connexion initiale¶
- Identifiants validés (mêmes vérifications que connexion simple)
- Système détecte 2FA actif
- Selon la méthode :
- EMAIL → code 6 chiffres généré, stocké en base (validité 15 min), envoyé par email
- APPLICATION (TOTP) → aucun envoi, l'utilisateur génère le code via son app Authenticator
- Création session temporaire 2FA (en attente de validation)
- Retour client —
requires2FA: true, méthode (EMAIL ou APPLICATION) - Redirection → page de vérification 2FA
Phase 2 : Vérification du code 2FA¶
- Saisie du code 6 chiffres (reçu par email ou généré par l'app)
- Validation selon méthode :
- EMAIL — existence + non-expiré (< 15 min) + non-utilisé + correspondance
- TOTP — récupération secret, génération code attendu, comparaison dans fenêtre ±30 s
- Gestion erreurs — max 5 tentatives, blocage temporaire si dépassé
- Si code valide → génération Access Token (24h) + Refresh Token (7j) + session complète
- Code EMAIL marqué comme utilisé (non réutilisable)
- Audit
2FA_VERIFIED— méthode, IP, device, timestamp - Retour client — tokens + profil complet + ID session → redirection dashboard
Gestion automatique du token (refresh)¶
- Détection expiration proche — si Access Token expire dans < 5 min → déclenchement refresh
- Envoi du Refresh Token au serveur
- Validation — signature JWT + non-expiré (< 7j) + non-révoqué (blacklist) + session active
- Génération nouveau Access Token (24h), conservation du Refresh Token
- Mise à jour stockage local — transparent pour l'utilisateur
Cas d'erreurs¶
| Contexte | Erreur | Message affiché |
|---|---|---|
| Auth | Email inexistant | "Identifiants incorrects" |
| Auth | Mot de passe incorrect | "Identifiants incorrects" |
| Auth | Compte non vérifié | "Veuillez vérifier votre email" |
| Auth | Compte bloqué | "Votre compte a été suspendu" |
| 2FA | Code invalide | "Code incorrect" (max 5 tentatives) |
| 2FA | Code expiré | "Code expiré, demandez-en un nouveau" |
| 2FA | Session 2FA expirée | Retour page connexion |
| 2FA | Trop de tentatives | Blocage 15 minutes |
| Session | Token expiré | Tentative auto-refresh |
| Session | Refresh Token expiré | Déconnexion + redirection |
| Session | Session révoquée | Déconnexion immédiate |
| Session | IP bloquée | "Accès refusé depuis cette adresse" |
Liens connexes¶
- shared/architecture_guide — guide d'architecture commune