Comment implémenter l'authentification à deux facteurs (2FA) dans Node.js avec des applications d'authentification
Apprenez à implémenter l'authentification à deux facteurs (2FA) dans Node.js en utilisant des applications d'authentification, TOTP, et la bibliothèque otplib. Ce guide étape par étape couvre tout, de la génération de codes QR à la vérification des codes d'authentification.
Qu'est-ce que l'authentification à deux facteurs (2FA)
Dans les applications traditionnelles, nous utilisons généralement l'e-mail, le nom d'utilisateur et le téléphone comme identifiants de notre identité. En combinant ces identifiants d'identité avec les mots de passe correspondants ou les codes de vérification, nous pouvons terminer le processus d'authentification.
Cependant, dans des scénarios avec des exigences de sécurité plus élevées, s'appuyer uniquement sur des identifiants d'identité pour l'authentification n'est pas suffisant. Cela est dû au fait que ces identifiants d'identité et les informations de vérification correspondantes peuvent être vulnérables aux fuites.
C'est là que l'authentification à deux facteurs (2FA) entre en jeu - une couche de sécurité supplémentaire qui oblige les utilisateurs à fournir deux facteurs d'authentification différents pour vérifier leur identité, garantissant que la personne tentant d'accéder au compte est véritablement l'utilisateur légitime.
Les méthodes 2FA courantes incluent :
- L'authentification TOTP à l'aide d'applications d'authentification
- L'authentification biométrique
- L'authentification basée sur l'appareil
- Les codes de vérification par SMS
Dans ce tutoriel, nous nous concentrerons sur l'implémentation de la 2FA basée sur TOTP en utilisant des applications d'authentification avec la bibliothèque otplib dans votre application Node.js.
Qu'est-ce que l'authentification TOTP ?
TOTP signifie mots de passe à usage unique basés sur le temps. Comme le dit Wikipedia, il s'agit d'un algorithme informatique qui génère un mot de passe à usage unique (OTP) qui utilise l'heure actuelle comme source d'unicité.
Avec une clé secrète TOTP partagée entre le téléphone de l'utilisateur et le serveur de l'application, le téléphone de l'utilisateur et le serveur de l'application peuvent générer le même code TOTP au même moment :
Comme la génération de TOTP dépend du temps, elle peut être calculée hors ligne. De plus, le TOTP produit une chaîne numérique, ce qui le rend simple et convivial. Par conséquent, la vérification du TOTP est couramment utilisée comme moyen d'authentification à deux facteurs.
Lorsque les utilisateurs utilisent le TOTP comme méthode d'authentification à deux facteurs, ils rencontrent souvent le défi de stocker le secret TOTP et de générer des codes TOTP. C'est là que les applications d'authentification sont utiles. Nous pouvons utiliser des applications d'authentification pour stocker le secret TOTP et les applications d'authentification généreront automatiquement les codes TOTP pour vous. Lorsque la vérification est nécessaire, il vous suffit d'ouvrir votre application d'authentification, et vous obtiendrez le code TOTP correspondant au secret TOTP. Les applications d'authentification populaires incluent Google Authenticator et Microsoft Authenticator.
Le processus d'implémentation de TOTP comme authentification à deux facteurs implique deux étapes :
- Lier un secret TOTP à l'utilisateur.
- Vérifier le code TOTP de l'utilisateur avec le secret TOTP correspondant.
Le processus de liaison du TOTP à un utilisateur est le suivant :
Une fois que l'utilisateur a lié le TOTP, il peut l'utiliser pour la vérification. Le processus est le suivant :
Comme illustré dans le diagramme, du côté de l'utilisateur, nous utilisons des applications d'authentification pour gérer le secret TOTP et générer des codes TOTP. Du côté du serveur, nous devons prendre en charge la génération d'un secret TOTP et la validation du code TOTP envoyé par l'utilisateur. Dans cet article, nous utiliserons otplib comme exemple pour intégrer les fonctionnalités liées à TOTP côté serveur.
Implémenter la 2FA basée sur TOTP en utilisant otplib pour votre application Node.js
En supposant que votre application soit basée sur Express.js et que les utilisateurs se connectent via le point de terminaison /sign-in
, le plan pour prendre en charge le TOTP dans le processus de connexion de l'utilisateur est le suivant :
- Lorsque l'utilisateur n'est pas lié au TOTP, envoyer le secret TOTP à l'utilisateur sous la forme d'un code QR et lui demander de lier le TOTP.
- Lorsque l'utilisateur est déjà lié au TOTP, lui demander de vérifier le TOTP.
Tout d'abord, installons les dépendances pour le projet : otplib
et qrcode
:
Ensuite, améliorons notre point de terminaison /sign-in
.
Selon notre implémentation, lorsqu'un utilisateur n'est pas lié au TOTP, nous enverrons un code QR au frontend :
L'utilisateur scanne le code QR avec l'application d'authentification, et l'application d'authentification générera un code TOTP et stockera le secret TOTP associé.
L'utilisateur envoie le code TOTP obtenu au serveur de l'application. Si le code est vérifié avec succès, nous pouvons alors lier ce TOTP à l'utilisateur.
Ainsi, implémentons une API /verify-totp
pour recevoir le code TOTP envoyé par l'utilisateur :
De cette façon, nous avons lié avec succès le TOTP pour l'utilisateur. Par la suite, lorsque l'utilisateur se connecte, il lui suffit d'ouvrir l'application Authenticator, d'envoyer le code de vérification correspondant au secret TOTP préalablement lié, et le processus d'authentification sera complété.
Dans l'API /verify-totp
, nous utilisons le secret TOTP préalablement lié à l'utilisateur pour vérifier le code TOTP.
Résumé
Basé sur cet article, vous devriez maintenant être en mesure d'intégrer la vérification de l'application d'authentification pour vos applications.
Cependant, ceci n'est qu'un exemple simple. Lorsque votre application est grande ou est censée devenir complexe, l'intégration d'une nouvelle méthode d'authentification peut entraîner des coûts importants.
La bonne nouvelle est : Logto, en tant que fournisseur de solutions complètes d'authentification de l'identité, offre un support d'authentification multi-facteurs (MFA), y compris la vérification par application d'authentification. En utilisant Logto, vous pouvez intégrer de manière transparente un processus de connexion utilisateur sécurisé et efficace avec MFA dans votre application en seulement quelques minutes !