17.2. Authentification et autorisation dans les API NodeJS : autorisation avec rôles et autorisations
Lors de la création d'API robustes et sécurisées dans NodeJS, l'authentification et l'autorisation sont des aspects essentiels qui garantissent la sécurité et l'intégrité des données. L'authentification est le processus de vérification de l'identité de l'utilisateur, tandis que l'autorisation est le processus de vérification des autorisations de l'utilisateur authentifié. Dans ce chapitre, nous nous concentrerons sur l'autorisation avec des rôles et des autorisations.
Comprendre les rôles et les autorisations
Dans une application, différents utilisateurs peuvent avoir différents niveaux d'accès. Par exemple, dans un système de gestion de projet, un utilisateur peut être un « administrateur », un « gestionnaire » ou un « contributeur ». Chacun de ces rôles peut avoir des autorisations différentes. Un « administrateur » peut être autorisé à créer, lire, mettre à jour et supprimer n'importe quel projet, tandis qu'un « gestionnaire » peut uniquement créer, lire et mettre à jour des projets, mais pas les supprimer. Un « Contributeur » ne peut lire que les projets. Ce sont les rôles et les autorisations.
Mise en œuvre de l'autorisation avec des rôles et des autorisations dans NodeJS
Pour implémenter l'autorisation avec des rôles et des autorisations dans NodeJS, nous devons d'abord créer un modèle utilisateur qui inclut le rôle de l'utilisateur. Ensuite, nous devons créer un rôle middleware qui vérifie le rôle de l'utilisateur et accorde ou refuse l'accès en fonction de ce rôle.
1. Création du modèle utilisateur
Nous pouvons utiliser Mongoose, un ODM (Object Data Modeling) populaire pour MongoDB, pour créer notre modèle utilisateur. Voici un exemple de ce à quoi pourrait ressembler le modèle utilisateur :
const mangouste = require('mangouste');
const UserSchema = nouvelle mangouste.Schema ({
nom : chaîne,
email : chaîne,
mot de passe : chaîne,
rôle: {
tapez : chaîne,
enum : ['Admin', 'Manager', 'Contributeur'],
par défaut : 'Contributeur'
}
});
module.exports = mongoose.model('Utilisateur', UserSchema);
2. Création de la fonction middleware
Ensuite, nous devons créer une fonction middleware qui vérifie le rôle de l'utilisateur. Nous pouvons le faire en utilisant JWT (JSON Web Token), une norme de jeton d'accès qui permet l'authentification entre deux parties. Lorsqu'un utilisateur s'authentifie, un jeton JWT est généré et envoyé à l'utilisateur. Ce jeton contient des informations sur l'utilisateur, y compris son rôle. Voici un exemple de ce à quoi pourrait ressembler la fonction middleware :
const jwt = require('jsonwebtoken');
fonction authRole(rôle) {
retour (req, res, suivant) => {
const token = req.header('auth-token');
if (!token) return res.status(401).send('Accès refusé');
essayer {
const vérifié = jwt.verify(token, process.env.TOKEN_SECRET);
if (verified.role !== role) return res.status(403).send('Forbidden');
req.user = vérifié ;
suivant();
} attraper (erreur) {
res.status(400).send('Jeton invalide');
}
} ;
}
module.exports = authRole ;
Grâce à cette fonction middleware, nous pouvons protéger nos itinéraires en fonction du rôle de l'utilisateur. Par exemple, nous pouvons protéger le chemin de suppression du projet afin que seuls les utilisateurs « Administrateur » puissent y accéder :
const express = require('express');
const routeur = express.Router();
const authRole = require('../middleware/authRole');
router.delete('/project/:id', authRole('Admin'), (req, res) => {
// Supprimer le projet
});
En résumé, l'autorisation avec des rôles et des autorisations est un élément essentiel de la création d'API sécurisées dans NodeJS. Il vous permet de contrôler l'accès aux différentes parties de votre application en fonction du rôle de l'utilisateur. La mise en œuvre correcte de cela peut aider à empêcher tout accès non autorisé et à protéger les données de votre application.