Comment sécuriser une API REST Node.js à l’aide de jetons Web JSON

Lorsque vous créez une application, il est essentiel de protéger les données sensibles contre tout accès non autorisé. De nombreuses applications web, mobiles et cloud modernes utilisent les API REST comme principal moyen de communication. Par conséquent, il est crucial de concevoir et de développer des API dorsales en mettant la sécurité au premier plan.

Une approche efficace pour sécuriser une API REST consiste à utiliser des jetons Web JSON (JWT). Ces jetons offrent un mécanisme robuste d’authentification et d’autorisation des utilisateurs, ce qui permet de protéger les ressources protégées contre l’accès d’acteurs malveillants.

Que sont les jetons Web JSON ?

Jeton Web JSON (JWT) est une norme de sécurité largement utilisée. Il s’agit d’une méthode concise et autonome de transmission sécurisée de données entre une application client et un système dorsal.

Une API REST peut utiliser des JWT pour identifier et authentifier en toute sécurité les utilisateurs lorsqu’ils font des demandes HTTP pour accéder à des ressources protégées.

Un jeton Web JSON se compose de trois parties distinctes : l’en-tête, la charge utile et la signature. Il encode chaque partie et les concatène à l’aide d’un point (« . »).

L’en-tête décrit l’algorithme cryptographique utilisé pour signer le jeton, tandis que la charge utile contient des données sur l’utilisateur et toute métadonnée supplémentaire.

Enfin, la signature, calculée à l’aide de l’en-tête, de la charge utile et de la clé secrète, garantit l’intégrité et l’authenticité du jeton.

Les bases des JWT étant posées, construisons une API REST Node.js et mettons en œuvre les JWT.

Configurer une application Express.js et une base de données MongoDB

Vous découvrirez ici comment construire une API REST d’authentification simple qui gère à la fois les fonctionnalités d’enregistrement et de connexion. Une fois que le processus de connexion authentifie un utilisateur, celui-ci doit pouvoir effectuer des requêtes HTTP vers une route API protégée.

Vous pouvez trouver le code du projet dans ce dépôt GitHub.

Voir aussi :  Simuler le problème de Monty Hall en utilisant Python

Pour commencer, créez un serveur web Express, et installez ces paquets :

Ensuite, créez une base de données MongoDB ou configurez un cluster MongoDB sur le cloud. Ensuite, copiez la chaîne de connexion à la base de données, créez un. env dans le répertoire racine et collez la chaîne de connexion :

Configurer la connexion à la base de données

Créez un nouveau fichier utils/db.js dans le répertoire racine de votre dossier de projet. Dans ce fichier, ajoutez le code suivant pour établir la connexion à la base de données à l’aide de Mongoose.

Définissez le modèle de données

Définissez un schéma de données utilisateur simple à l’aide de Mongoose. Dans le répertoire racine, créez un nouveau fichier model/user.model.js et ajoutez le code suivant.

Définir les contrôleurs pour les routes API

Les fonctions du contrôleur géreront l’enregistrement et la connexion ; elles constituent une partie importante de cet exemple de programme. Dans le répertoire racine, créez un fichier controllers/userControllers.js et ajoutez le code suivant :

  1. Définissez le contrôleur d’enregistrement des utilisateurs. Cet extrait de code hache le mot de passe fourni à l’aide de bcrypt et crée ensuite un nouvel enregistrement d’utilisateur dans la base de données, en stockant le nom d’utilisateur et le mot de passe haché. Si l’enregistrement est réussi, il envoie une réponse avec un message de succès.
  2. Définissez un contrôleur de connexion pour gérer le processus de connexion de l’utilisateur : Lorsqu’un utilisateur envoie une demande au contrôleur de connexion /login il doit transmettre ses informations d’authentification dans le corps de la requête. Le code vérifie alors ces informations d’identification et génère un jeton Web JSON. Le jeton est stocké de manière sécurisée dans un cookie avec l’attribut httpOnly est réglé sur « true ». Cela empêche le JavaScript côté client d’accéder au jeton, ce qui permet de se protéger contre d’éventuelles attaques de type cross-site scripting (XSS).
  3. Enfin, définissez une route protégée : En stockant le JWT dans un cookie, les demandes d’API ultérieures de l’utilisateur authentifié incluront automatiquement le jeton, ce qui permettra au serveur de valider et d’autoriser les demandes.
Voir aussi :  Qu'est-ce que la programmation ISR ? Comment les interruptions vous aident à écrire un meilleur code

Créer un intergiciel d’authentification

Maintenant que vous avez défini un contrôleur de connexion qui génère un jeton JWT en cas d’authentification réussie, définissez les fonctions d’authentification du middleware qui généreront et vérifieront le jeton JWT.

Dans le répertoire racine, créez un nouveau dossier, middleware. À l’intérieur de ce dossier, ajoutez deux fichiers : auth.js et config.js.

Ajoutez ce code à config.js:

Ce code génère une nouvelle clé secrète aléatoire à chaque exécution. Vous pouvez ensuite utiliser cette clé secrète pour signer et vérifier l’authenticité des JWT. Une fois qu’un utilisateur est authentifié avec succès, générez et signez un JWT avec la clé secrète. Le serveur utilisera alors la clé pour vérifier que le JWT est valide.

Ajoutez le code suivant dans auth.js qui définit les fonctions middleware qui génèrent et vérifient les JWT.

Les generateToken génère un JWT en signant une charge utile à l’aide d’une clé secrète et en fixant un délai d’expiration tandis que la fonction verifyToken sert d’intergiciel pour vérifier l’authenticité et la validité d’un jeton fourni.

Définir les routes de l’API

Créez une nouvelle routes/userRoutes.js dans le répertoire racine et ajoutez le code suivant.

Mettez à jour le point d’entrée de votre serveur

Mettez à jour votre server.js avec le code suivant.

Pour tester l’API REST, démarrez le serveur de développement et faites des demandes d’API aux points d’extrémité définis :

Sécurisation des API REST Node.js

La sécurisation des API REST Node.js ne se limite pas à l’utilisation des JWT. Bien qu’ils jouent un rôle crucial dans l’authentification et l’autorisation, il est essentiel d’adopter une approche holistique de la sécurité pour protéger vos systèmes dorsaux. Outre les JWT, vous devriez également envisager de mettre en œuvre HTTPS pour crypter les communications, la validation et l’assainissement des entrées, et bien d’autres choses encore.

Voir aussi :  Comment utiliser les sessions Node.js pour persister les données

En combinant plusieurs mesures de sécurité, vous pouvez établir un cadre de sécurité solide pour vos API REST Node.js et minimiser le risque d’accès non autorisé, de violation des données et d’autres menaces de sécurité.

S’abonner à notre lettre d’information

Comment sécuriser mon API avec des jetons Web JSON ?

Pour utiliser les JWT, les étapes suivantes doivent être suivies :

  • Générer une clé secrète.
  • Créer un JWT à l’aide de la clé secrète.
  • Envoyer le JWT au client.
  • Le client inclut le JWT dans les demandes ultérieures.
  • Le serveur lit le JWT dans l’en-tête de la demande.
  • Le serveur Base64Url décode l’en-tête et la charge utile.

Comment utiliser un jeton JWT pour l’authentification dans nodejs ?

Authentification avec Nodejs et JWTs – un exemple simple

  • Étape 1 : Création d’une API Node avec Express.
  • Étape 2 : Renvoyer un jeton JWT en cas de connexion réussie.
  • Étape 3 : Envoyez le jeton à la ressource /super-secure et vérifiez-le pour autoriser l’accès.

Les jetons Web JSON peuvent-ils être cryptés ?

Les jetons Web JSON (JWT) sont couramment utilisés dans de nombreuses applications différentes qui nécessitent une sorte de primitive cryptographique. Le plus souvent, la structure JSON Web Signature (JWS) est choisie car son contenu est signé et non crypté ; cependant, la structure JSON Web Encryption (JWE) peut également être utilisée pour créer un JWT.

Comment sécuriser une API REST dans node js ?

Comment créer une API REST sécurisée dans Node. js ?

  • Utilisez HTTPS. HTTPS est la version sécurisée du protocole HTTP.
  • Utilisez l’authentification. L’authentification est une méthode permettant de vérifier l’identité d’un utilisateur.
  • Restreindre l’accès.
  • Validation de l’entrée.
  • Mettre en œuvre les meilleures pratiques en matière de sécurité.
  • Modèles d’utilisateurs.
  • Modèles de poste.
  • Enregistrer le point de terminaison.
Cliquez pour évaluer cet article !
[Total: Moyenne : ]

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *