Authentification

JSON Web Token (JWT) est une norme ouverte pour créer des jetons d’accès en sécurité et compact. Les JWT sont souvent utilisés pour l’authentification dans les applications Web et mobiles. Les JWT sont des chaînes de caractères JSON qui contiennent des informations sur l’utilisateur authentifié, telles que son nom d’utilisateur et ses autorisations.

Le processus d’authentification JWT comprend les étapes suivantes :

  • L’utilisateur envoie ses informations d’identification au serveur, généralement sous forme de nom d’utilisateur et de mot de passe.

  • Le serveur vérifie les informations d’identification de l’utilisateur et, si elles sont valides, génère un JWT et le renvoie à l’utilisateur.

  • L’utilisateur envoie le JWT avec chaque demande à l’API REST protégée. Le serveur vérifie la validité du JWT pour chaque requête et, si le JWT est valide, traite la requête.

Exemple avec Node.js

  1. Tout d’abord, vous devez installer le module jsonwebtoken à l’aide de npm :
npm install jsonwebtoken
  1. Ensuite, vous pouvez utiliser la méthode sign() pour créer un token JWT :
const jwt = require("jsonwebtoken");
const user = { username: "johndoe" };
const secretKey = "mysecretkey";

const token = jwt.sign(user, secretKey);
console.log(token);

Dans cet exemple, nous créons un objet utilisateur avec le nom d’utilisateur ‘johndoe’. Nous utilisons ensuite la méthode sign() de la bibliothèque jsonwebtoken pour créer un jeton JWT en utilisant l’objet utilisateur et une clé secrète. Nous imprimons ensuite le jeton pour vérifier qu’il a été créé avec succès.

  1. Pour vérifier si un jeton est valide, vous pouvez utiliser la méthode verify() :
const token =
  "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VybmFtZSI6ImpvaG5kb2UiLCJpYXQiOjE2MTkwMTY0NzF9.Y9oZ4v4ZsMgcCYivTzTJN7rvSvKj1xqV3cFtXa2KPO0";
const secretKey = "mysecretkey";

jwt.verify(token, secretKey, (err, decodedToken) => {
  if (err) {
    console.log("Invalid token");
  } else {
    console.log(decodedToken);
  }
});

Dans cet exemple, nous utilisons la méthode verify() pour vérifier si un jeton est valide. Nous passons le jeton, la clé secrète et une fonction de rappel. Si le jeton est valide, la fonction de rappel est appelée avec l’objet décodé stocké dans la variable decodedToken. Si le jeton est invalide, la fonction de rappel est appelée avec une erreur.

Avec Postman

Une fois le token récupéré au /login vous pouvez le copier/coller dans la partie de la requête

postman

Du côté node.js vous devez parcourir les headers pour récupérer le token et authentifier l’utilisateur :

function authenticateToken(req, res) {
  const authHeader = req.headers["authorization"];
  const token = authHeader && authHeader.split(" ")[1];

  if (!token) {
    // Si le token n'est pas présent, renvoyer une erreur 401
    res.status(401).send("Token not found");
    return;
  }

  // Vérification de la validité du token JWT
  jwt.verify(token, secretKey, (err, decodedToken) => {
    if (err) {
      // Si le token est invalide, renvoyer une erreur 401
      res.status(401).send("Invalid token");
      return;
    }

    // données de l'utilisateur ici
    decodedToken;
  });
}