Authentification dans node js à laide de jwt

Node.js Authentification et autorisation avec JWT : Création d’une application Web sécurisée

Table des matières

  1. Introduction
  2. Conditions préalables
  3. Configuration de la structure des fichiers
  4. Installation des dépendances nécessaires
  5. Configuration de la base de données
  6. Configuration du serveur express
  7. Création du modèle utilisateur
  8. Création du schéma Joi pour la validation
  9. des données Créer un middleware d’authentification
  10. Créer le contrôleur
  11. Créer les routes
  12. Servir l’application express
  13. Tester avec Postman
  14. Conclusion

Introduction

Qu’est-ce que JSON Web Token (JWT)

JWT (JSON Web Token) est un format de jeton. Il est autonome et signé. Il propose une méthode pratique de transfert de données. Bien que JWT ne soit pas sécurisé, son utilisation peut garantir l’authenticité du message tant que vous pouvez vérifier l’intégrité de la charge utile et confirmer la signature. L’authentification sans état à l’aide de JWT est souvent utilisée dans des cas simples impliquant des systèmes non complexes.

Dans cet article, nous allons implémenter l’authentification avec JWT dans une application web NodeJS.

Voici l’exemple de JWT

Dans ce tutoriel, nous allons apprendre à construire des applications authentifiées et autorisées dans Nodejs. Consultez le dépôt final sur GitHub

Prérequis

  • Installation de Nodejs sur votre système
  • Connaissances de base de MongoDB
  • Installation de Postman sur votre système

Configurer la structure de fichiers

Créez un dossier n’importe où sur votre système

Ouvrez-le dans n’importe quel éditeur de texte de votre choix (j’utilise VS Code pour ouvrir le mien), ouvrez le terminal et lancez-vous
:

Créez des fichiers et des répertoires à l’aide de cette commande ci-dessous, en supposant que vous avez installé Git sur votre système :

Créez également le fichier serveur, la variable d’environnement et le fichier gitignore dans votre répertoire racine :

Continuez à configurer une structure de fichiers comme celle-ci ci-dessous :

Installez les dépendances nécessaires

Notre projet nécessite plusieurs packages npm. Vous trouverez ci-dessous une liste de ces forfaits ainsi que de brèves explications sur la façon dont chacun contribue à nos objectifs.

  • Express.js : Un cadre node.js appelé Express.js simplifie le développement d’applications Web.
  • MongoDB : Le MongoDB officiel le pilote de Node.js est Mongodb.

  • Mangouste : mongoose est un outil de modélisation d’objets conçu pour fonctionner dans un environnement asynchrone. Pour créer des schémas de base de données et communiquer avec la base de données, nous allons utiliser Mongoose.

  • Bcryptjs : Hachez les mots de passe des utilisateurs avant de les mettre dans la base de données.

  • JSON Web Token (JWT) : « Nous utiliserons JWT pour l’autorisation et l’authentification. »

  • Joi : Avec l’aide de ce package, vous pouvez créer des itinéraires sécurisés uniquement accessibles aux utilisateurs connectés.

  • Nodemon : Nodemon redémarrera le serveur express chaque fois que nous modifions notre code.

  • UUID : le package UUID offre des outils permettant de créer des UUID standard qui sont cryptographiquement sûrs.

  • Dotenv : Ce module sans dépendance charge les variables d’environnement dans un processus en les lisant à partir du fichier .env.


Ajoutez les dépendances de développement avec cette commande :

Configurer la base de données

Dans ce tutoriel, nous allons utiliser l’atlas MongoDB pour notre base de données. Rendez-vous sur MongoDB Atlas et cliquez sur Démarrer gratuitement pour créer un compte. Après la création d’un compte, MongoDB nécessite une configuration supplémentaire. Pour plus de détails, consultez la documentation
officielle

Ce code exporte une fonction connectDB qui se connecte à une base de données MongoDB à l’aide de Mongoose. Il utilise une variable d’environnement pour récupérer l’URI de la base de données et consigne un message de réussite si la connexion est établie, ou Consigne tous les messages d’erreur rencontrés.

Configurer le serveur Express

  • Le code configure activement un serveur Web Express.
  • Définir un itinéraire simple pour l’URL racine
  • Configure Express pour utiliser divers middlewares intégrés.
  • Se connecte à une base de données MongoDB à l’aide de la fonction connectDB.
  • Le serveur écoute activement sur le port spécifié par la variable d’environnement PORT.

Créer le modèle d’utilisateur

Nous définirons notre schéma pour les détails de l’utilisateur lors de votre première inscription. Nous allons utiliser mongoose pour créer UserSchema.

Ajoutez l’extrait de code suivant à l’intérieur du dossier.

Définir un schéma et un modèle Mongoose :

le code définit un schéma Mongoose pour un objet utilisateur. Le schéma spécifie la structure d’un document utilisateur dans la base de données MongoDB. Les champs clés du schéma sont le _id, le nom, l’adresse e-mail, le mot de passe et le rôle. Le champ _id est généré automatiquement à l’aide de l’uuid. Certains champs ont des règles de validation telles que required et enum.

Middleware pour le hachage de mot de passe :

La fonction middleware est enregistrée à l’aide de userSchema.pre('save', ...). Cette fonction est appelée avant l’enregistrement d’un document utilisateur dans la base de données. Il vérifie si le champ du mot de passe a été modifié (par exemple, lors de l’enregistrement de l’utilisateur ou lors de la modification d’un mot de passe), puis hache le mot de passe à l’aide de bcrypt.

Méthode personnalisée pour le modèle utilisateur :

le schéma définit deux méthodes personnalisées qui peuvent être appelées sur les documents utilisateur

  • : comparePassword : cette méthode est utilisée pour comparer un mot de passe en texte brut (fourni par un utilisateur lors de la connexion) avec le mot de passe haché stocké dans le base de données. Il utilise bcrypt.compareSync à cette fin.
  • jwtToken : cette méthode génère un jeton Web JSON (JWT) pour l’utilisateur, généralement utilisé pour l’authentification de l’utilisateur. Il signe une charge utile contenant les _id de l’utilisateur et définit un délai d’expiration de 1 heure.

Ce modèle représente la collection « User » dans la base de données MongoDB.

Enfin, le modèle User est exporté pour être utilisé dans d’autres parties de l’application. Cela permet à d’autres parties du code d’interagir avec la base de données MongoDB à l’aide du schéma et du modèle définis.

Nous

allons utiliser le schéma Joi pour valider les données envoyées par nos utilisateurs. Nous allons créer une fonction qui prend les données de l’utilisateur comme paramètre de validation.

Le code ci-dessus définit deux schémas de validation Joi, userSignUp et loginUser, pour valider les données d’inscription et de connexion de l’utilisateur. Le Les fonctions validateUserSignup et validateUserLogin valident l’entrée utilisateur par rapport à ces schémas et renvoient des résultats de validation ou des erreurs.

Le middleware

est un logiciel/morceau de code qui agit comme un pont entre la base de données et l’application, en particulier sur un réseau. Dans le cas de ce projet, nous voulons nous assurer que lorsqu’une requête est envoyée au serveur, un code (middleware) est exécuté avant que la requête n’atteigne le serveur et ne renvoie une réponse. Nous voulons vérifier si une personne qui tente d’accéder à une ressource spécifique est autorisée à y accéder.

Le

code ci-dessus gère activement l’enregistrement, la connexion, la récupération du profil utilisateur et la déconnexion de l’utilisateur. Il intègre la validation des entrées à l’aide de schémas Joi et interagit avec le modèle « User » et les fonctions liées à JWT précédemment définies.

Créer les itinéraires

Il est enfin temps de créer nos différents itinéraires. Vous trouverez ci-dessous la liste des points de terminaison que nous allons créer.

Servir l’application express

Il ne vous reste plus qu’à exécuter le projet à l’aide de la commande






suivante

Tester avec Postman

Ouvrez Postman et créez une demande de publication pour http://localhost:4000/api/v1/register comme ci-dessous :

Créer une demande

Créez une requête get pour http://localhost:4000/api/v1/me comme ci-dessous ; Copiez le jwt généré et collez-le dans l’en-tête d’autorisation pour accéder au profil

utilisateur

Supprimez ou supprimez le jeton de l’en-tête, vous obtiendrez ceci :

Conclusion

Cet article a abordé JWT, l’autorisation, l’authentification et la création d’une API dans Node.js qui utilise des jetons JWT pour l’authentification.