Table des matières
Face aux attaques par hameçonnage et aux compromissions de sessions, l’ajout d’une authentification à deux facteurs (2FA) dans une application web est aujourd’hui une mesure de sécurité largement adoptée. En particulier lorsqu’on utilise OAuth comme système de délégation d’identité, il devient essentiel de mettre en place une vérification complémentaire, indépendante du fournisseur d’identité.
Mais comment associer efficacement OAuth avec un second facteur d’authentification, tout en respectant la logique du flux d’autorisation ?
OAuth permet à une application de s’appuyer sur un tiers de confiance (Google, Facebook, Microsoft, etc.) pour gérer l’identité de l’utilisateur. L’avantage : ne plus avoir à stocker les mots de passe localement.
Cependant, cette délégation ne couvre pas forcément les besoins de sécurité spécifiques à l’application elle-même, notamment dans les environnements sensibles (accès à des données de santé, documents internes, espaces professionnels confidentiels, etc.).
En ajoutant un second facteur comme un code temporaire envoyé par SMS, une notification push ou une application d’authentification on réduit considérablement le risque qu’une session soit ouverte par un acteur non autorisé, même si l’identifiant OAuth est compromis.
Le flux OAuth standard suit généralement cette séquence :
L’authentification à deux facteurs ne remplace pas OAuth, elle vient s’intercaler après l’obtention du token, avant de délivrer l’accès à l’application elle-même. Il s’agit donc d’un mécanisme de sécurité interne à l’application, basé sur l’identité déjà validée par le fournisseur externe.
Même si l’utilisateur s’authentifie via OAuth, l’application web doit maintenir une base de données propre à ses utilisateurs, ne serait-ce que pour gérer les préférences, les rôles ou les règles de sécurité. C’est dans cette couche locale qu’on active la 2FA.
Le scénario typique :
Cela permet de conserver la fluidité d’OAuth tout en appliquant une politique de sécurité sur mesure, adaptée aux risques liés aux usages de l’application.
Pour éviter de réinventer la roue, il existe de nombreuses bibliothèques permettant de générer et vérifier des codes d’authentification temporaire conformes à la norme TOTP (Time-based One-Time Password). C’est le même système utilisé par Google Authenticator ou Authy.
Quelques exemples robustes :
Ces outils s’intègrent facilement dans un backend existant, à condition que le secret partagé soit associé à l’utilisateur lors de la configuration initiale (QR code ou clef OTP).
Outre les générateurs de codes, certains projets open source comme Authelia, Keycloak (avec MFA activé), ou encore Gluu Server, permettent d’intégrer une politique de sécurité plus granulaire, avec des déclencheurs contextuels :
Combiné à OAuth, cela permet d’activer ou non le second facteur selon la situation, améliorant à la fois la sécurité et l’expérience utilisateur.
Une implémentation réussie de la 2FA avec OAuth repose sur plusieurs précautions :
Enfin, il est important de prévoir des mécanismes de secours en cas de perte du second facteur, comme une vérification par email ou une procédure manuelle d’identification via l’assistance.