
Partager:
Julia s'engage à aider ses collègues développeurs en créant des tutoriels, des guides et des ressources pratiques. Grâce à son expérience en matière de sensibilisation et d'éducation, elle vise à rendre la technologie plus accessible et à améliorer l'expérience globale des développeurs. Vous pouvez souvent la trouver lors d'événements communautaires locaux.
Comment ajouter l'authentification à deux facteurs avec Node.js et Express
Temps de lecture : 5 minutes
Introduction
L'authentification à deux facteurs (2FA) fait référence à un modèle dans lequel les utilisateurs doivent fournir deux éléments pour prouver leur identité : quelque chose qu'ils connaissent, comme un mot de passe, et quelque chose qu'ils ont, comme un jeton de vérification provenant d'un appareil mobile.
Ce tutoriel explique comment mettre en œuvre un système de jetons de vérification à l'aide de l'API Verify de Vonage et de Express.js. Vous pouvez trouver le code d'exemple complet sur le dépôt GitHub de la dépôt GitHub de la communauté Vonage.
Le dossier de candidature comprendra trois pages :
une page initiale qui demande la vérification du numéro de téléphone mobile
une page où les utilisateurs fournissent le code qui leur a été envoyé
une page qui indique si leur code était correct et si la vérification a réussi
Workflow Overview
Conditions préalables
Node.js installé sur votre machine
Configuration du projet
Pour créer une application, allez à la page Créer une application sur le tableau de bord de Vonage, et définissez un nom pour votre application.
Si vous avez l'intention d'utiliser une API qui utilise des Webhooks, vous aurez besoin d'une clé privée. Cliquez sur "Générer une clé publique et privée", votre téléchargement devrait démarrer automatiquement. Conservez-la en lieu sûr ; cette clé ne peut pas être retéléchargée si elle est perdue. Elle suivra la convention de nommage suivante private_<votre identifiant d'application>.key. Cette clé peut maintenant être utilisée pour authentifier les appels à l'API. Remarque : votre clé ne fonctionnera pas tant que votre application n'aura pas été sauvegardée.
Choisissez les fonctionnalités dont vous avez besoin (par exemple, Voice, Messages, RTC, etc.) et fournissez les webhooks requis (par exemple, URL d'événement, URL de réponse ou URL de message entrant). Ces éléments seront décrits dans le tutoriel.
Pour sauvegarder et déployer, cliquez sur "Générer une nouvelle application" pour finaliser la configuration. Votre application est maintenant prête à être utilisée avec les API de Vonage.
Ajouter des variables d'environnement
Créez un fichier .env dans le répertoire de votre projet et ajoutez les variables d'environnement suivantes variables d'environnement suivantes.
VERIFY_BRAND_NAMEnom inclus dans le message pour expliquer qui confirme le numéro de téléphoneVONAGE_APPLICATION_IDvotre numéro d'identification de l'application VonageVONAGE_APPLICATION_PRIVATE_KEY_PATHDans le cas d'une clé privée, collez le fichier de clé privée que vous venez de télécharger dans le répertoire de votre projet, puis indiquez le chemin d'accès dans ce champ (par exemple, le nom de la clé privée),./private_your-app-id-here.key)
Configurez votre projet Node
Créez un nouveau répertoire et ouvrez-le dans un terminal, puis installez les dépendances comme suit :
npm init -y
npm install dotenv express nunjucks @vonage/server-sdk @vonage/verify2
Voyons rapidement ce que chacune de ces dépendances apporte à votre projet.
dotenv charge les variables d'environnement à partir du fichier .env qui vient d'être créé.
express est un framework web pour Node.js qui gère les requêtes et les réponses HTTP. Il est utilisé pour créer votre serveur web, définir des routes (
/,/verify,/check) et gérer les soumissions de formulaires.nunjucks est un moteur de création de modèles qui rend les pages HTML dynamiques. Il vous permet de créer des modèles HTML avec des variables et de la logique, puis de les remplir avec des données provenant de votre serveur.
@vonage/server-sdk est le SDK principal de Vonage qui fournit le client pour interagir avec les API de Vonage. Il gère l'authentification à l'aide de votre ID d'application et de votre clé privée.
@vonage/verify2 fournit des constantes et des types spécifiques à l'API Verify v2 de Vonage.
Ensuite, créez un fichier index.js dans le répertoire de votre projet et mettez en place ces dépendances :
const express = require('express');
const app = express();
const nunjucks = require('nunjucks');
// Add Environment Variables
const VONAGE_APPLICATION_ID = process.env.VONAGE_APPLICATION_ID;
const VONAGE_APPLICATION_PRIVATE_KEY_PATH = process.env.VONAGE_APPLICATION_PRIVATE_KEY_PATH;
const VERIFY_BRAND_NAME = process.env.VERIFY_BRAND_NAME;
const { Vonage } = require('@vonage/server-sdk');
const { Channels } = require('@vonage/verify2');
const vonage = new Vonage({
applicationId: VONAGE_APPLICATION_ID,
privateKey: VONAGE_APPLICATION_PRIVATE_KEY_PATH,
});
app.use(express.json());
app.use(express.urlencoded({ extended: false }));
nunjucks.configure('views', { express: app });
// other code will go here
app.listen(3000, () => {
console.log('Example app listening on port 3000')
});
Nunjucks permet de transmettre des données aux modèles en utilisant la syntaxe {{ variable }} syntaxe. Il est configuré pour analyser automatiquement les fichiers du répertoire views et est lié à l'application Express stockée dans le répertoire app.
Créer la page d'atterrissage
Créez un répertoire appelé views et un fichier index.html à l'intérieur. Ce sera notre page d'atterrissage.
{{ message }}
<form method="post" action="verify">
<input name="number" type="tel">
<button>Get code</button>
</form>Ensuite, nous devons créer une route dans index.js pour rendre le fichier index.html :
app.get('/', (req, res) => {
res.render('index.html', { message: 'Hello, world!' })
});Exécutez node index.js dans votre terminal et ouvrez localhost:3000 dans votre navigateur. Remarquez que le message est inséré en haut de la page à la place de l'élément {{ message }} dans le code.
A webpage showing the form and the Hello World message
Créer une demande de vérification
Le formulaire sur index.html enverra une requête POST à /verify lorsqu'il sera soumis. Créez une nouvelle route pour gérer cela dans index.js:
app.post('/verify', async (req, res) => {
try {
const { requestId } = await vonage.verify2.newRequest({
brand: VERIFY_BRAND_NAME,
workflow: [
{
channel: Channels.SMS,
to: req.body.number,
},
],
});
res.render('check.html', { requestId: requestId });
} catch (err) {
console.error(err);
res.render('index.html', { message: err });
}
});Dans cet exemple, le flux de travail est défini pour envoyer un code de vérification via le canal SMS. Les autres canaux pris en charge sont l'authentification silencieuse, RCS, WhatsApp, Voice et Email. Vous pouvez également définir des flux de travail avec plusieurs canaux enchaînés les uns après les autres comme mécanisme de repli.
Par exemple, vous pouvez ajouter Voice à la deuxième étape du flux de travail ci-dessus comme méthode d'escalade ou essayer l'authentification silencieuse pour une expérience plus rationalisée. Pour en savoir plus sur les flux de travail, consultez les Verify API Docs.
Vérifier le code
Une fois la demande effectuée, le fichier check.html est rendue, nous devons donc la créer. Ajouter un fichier check.html dans le fichier vues avec le contenu suivant :
<form method="post" action="check">
<input name="code" placeholder="Enter code">
<input name="requestId" type="hidden" value="{{ requestId }}">
<button>Verify</button>
</form>Outre le code, l'ID de la demande est nécessaire pour vérifier si le code est correct. En utilisant la même méthode que pour {{message}}la valeur du champ caché requestId est fournie dynamiquement.
Source code showing the request ID inserted as the value for the hidden input
La soumission de ce formulaire enverra une requête POST au point de terminaison /check tel que défini dans l'attribut action attribut.
Ensuite, nous devons mettre en œuvre le nouveau point d'accès /check dans index.js:
app.post('/check', async (req, res) => {
try {
const status = await vonage.verify2.checkCode(req.body.requestId, req.body.code);
console.log(`The status is ${status}`);
res.render('success.html');
} catch (err) {
console.error(err);
res.render('index.html', { message: err });
}
});Si le message retourné est "complété", le contrôle a été effectué avec succès et la vérification est terminée. status est "completed", le contrôle a été effectué avec succès et la vérification est terminée. Créer un success.html fichier dans le dossier views pour célébrer l'événement :
<h1>🎉 Success! 🎉</h1>Exécutez node index.js dans votre terminal et ouvrez localhost:3000 dans votre navigateur pour tester votre flux de travail 2FA ! N'oubliez pas d'entrer votre numéro de téléphone au format format E.164tel que 447401234567.
Prochaines étapes
Dans la production, il y a quelques considérations supplémentaires à prendre en compte :
traitement plus robuste des erreurs et des codes d'état non réussis
la possibilité d'annuler les vérifications en cours
permettre aux utilisateurs d'indiquer leur préférence en matière de canaux de communication pour l'envoi des codes
valider la saisie de l'utilisateur pour s'assurer que seuls des numéros de téléphone valides sont transmis à l'API Verify
Conclusion
C'est terminé ! Dans cet article de blog, vous avez appris à mettre en œuvre un flux de travail 2FA via SMS simple en utilisant l'API Verify de Vonage.
Vous avez une question ou souhaitez partager ce que vous construisez ?
S'abonner à la Bulletin d'information du développeur
Suivez-nous sur X (anciennement Twitter) pour les mises à jour
Regardez les tutoriels sur notre chaîne YouTube
Connectez-vous avec nous sur la page Vonage Developer sur LinkedIn
Aidez-nous à améliorer l'expérience des développeurs en remplissant notre formulaire de commentaires « Voice of the Developer »
Restez connecté et tenez-vous au courant des dernières nouvelles, astuces et événements concernant les développeurs.
Partager:
Julia s'engage à aider ses collègues développeurs en créant des tutoriels, des guides et des ressources pratiques. Grâce à son expérience en matière de sensibilisation et d'éducation, elle vise à rendre la technologie plus accessible et à améliorer l'expérience globale des développeurs. Vous pouvez souvent la trouver lors d'événements communautaires locaux.