You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Permettre à un utilisateur d'activer une authentification à deux facteurs (2FA) par TOTP (compatible Google Authenticator, FreeOTP, Authy, etc.) pour renforcer la sécurité de son compte, en plus du mot de passe classique.
Ce ticket est distinct de #303 (« Connexion sécurisée ») qui couvre la délégation complète de l'authentification à un fournisseur externe (OAuth2/OpenID Connect via Google, Proton, Facebook — plus aucun mot de passe stocké en base). Ici, il s'agit d'ajouter un second facteur au-dessus de l'authentification par mot de passe existante (LexikJWTAuthenticationBundle + form_login), pour les comptes qui ne passent pas par un provider externe.
Reprend et remplace l'ancienne issue #39 (fermée sans implémentation) avec un périmètre resserré, en tenant compte de l'auth actuelle (JWT + session double firewall, src/Entity/User.php, config/packages/security.yaml).
Ajouter un champ de secret TOTP chiffré sur User (jamais en clair en base) + un flag d'activation
Flow d'activation : génération du secret, affichage d'un QR code, vérification d'un premier code avant activation effective
Flow de connexion : après succès du mot de passe, si 2FA activée, exiger le code TOTP avant délivrance du JWT / de la session
Codes de secours (recovery codes) à générer à l'activation, pour le cas de perte de l'appareil TOTP
Vérifier l'articulation avec les deux firewalls existants (login API stateless JWT et web session) : le second facteur doit s'appliquer aux deux parcours de connexion
Points à clarifier avant implémentation
Le second facteur doit-il aussi s'appliquer à une future connexion OAuth (Connexion sécurisée #303), ou seulement à l'authentification par mot de passe local ?
Où et comment les codes de secours sont-ils communiqués/stockés côté utilisateur ?
Critères d'acceptation
Un utilisateur peut activer/désactiver la 2FA TOTP depuis son compte
Le secret TOTP est stocké chiffré, jamais en clair
Un QR code est fourni à l'activation, avec vérification d'un code avant activation effective
La connexion (API JWT et web session) exige le code TOTP si la 2FA est active
Des codes de secours sont générés et utilisables en cas de perte de l'appareil
Tests : activation, connexion avec 2FA active, échec de code invalide, utilisation d'un code de secours, désactivation
Description
Permettre à un utilisateur d'activer une authentification à deux facteurs (2FA) par TOTP (compatible Google Authenticator, FreeOTP, Authy, etc.) pour renforcer la sécurité de son compte, en plus du mot de passe classique.
Ce ticket est distinct de #303 (« Connexion sécurisée ») qui couvre la délégation complète de l'authentification à un fournisseur externe (OAuth2/OpenID Connect via Google, Proton, Facebook — plus aucun mot de passe stocké en base). Ici, il s'agit d'ajouter un second facteur au-dessus de l'authentification par mot de passe existante (
LexikJWTAuthenticationBundle+form_login), pour les comptes qui ne passent pas par un provider externe.Reprend et remplace l'ancienne issue #39 (fermée sans implémentation) avec un périmètre resserré, en tenant compte de l'auth actuelle (JWT + session double firewall,
src/Entity/User.php,config/packages/security.yaml).Piste de correction
scheb/2fa-bundle(support TOTP natif, intégration Symfony Security éprouvée) plutôt qu'une implémentation maisonUser(jamais en clair en base) + un flag d'activationloginAPI stateless JWT etwebsession) : le second facteur doit s'appliquer aux deux parcours de connexionPoints à clarifier avant implémentation
Critères d'acceptation
Zone concernée
Auth (JWT, sécurité) + Backend
Effort estimé
M — plusieurs jours