Aller au contenu
ecdsa.com
jsonwebtoken (Node.js)Bibliothèques JWT

Message d’erreur

jwt must be provided

jsonwebtoken (Node.js) — JsonWebTokenError from jwt.verify()

Ce que cela signifie

`jwt.verify()` n’a reçu aucun jeton : le premier argument valait `undefined`, `null` ou une chaîne vide. jsonwebtoken le vérifie avant l’analyse, si bien que ni la clé ni le format du jeton n’entrent encore en jeu. Le problème se situe en amont : le code qui extrait le jeton de la requête n’a rien trouvé.

Pourquoi cela se produit

Comment corriger l’erreur

  1. 1.

    Extraire le jeton de manière défensive et répondre 401

    Vérifiez l’absence de jeton avant d’appeler `verify` et renvoyez un 401 avec un en-tête `WWW-Authenticate: Bearer`. Les clients voient alors « non authentifié » au lieu d’une erreur 500 due à une exception non interceptée.

    js
    function bearerToken(req) {
      const [scheme, token] = (req.headers.authorization ?? "").split(" ");
      return scheme?.toLowerCase() === "bearer" && token ? token : null;
    }
    
    app.use((req, res, next) => {
      const token = bearerToken(req);
      if (!token) return res.status(401).set("WWW-Authenticate", "Bearer").end();
      try {
        req.user = jwt.verify(token, publicKey, { algorithms: ["ES256"] });
        next();
      } catch {
        res.status(401).set("WWW-Authenticate", 'Bearer error="invalid_token"').end();
      }
    });
  2. 2.

    Faire joindre le jeton par le client

    Vérifiez dans le panneau Réseau du navigateur que la requête porte `Authorization: Bearer …` (ou le cookie). Si l’en-tête est visible dans le navigateur mais absent sur le serveur, c’est qu’un proxy intermédiaire le supprime.

    js
    // Browser / Node 18+ fetch: the token must be attached explicitly.
    await fetch("https://api.example.com/orders", {
      headers: { Authorization: "Bearer " + accessToken },
    });
    
    // Cookies cross origins only with credentials and SameSite=None; Secure.
    await fetch("https://api.example.com/orders", { credentials: "include" });

Erreurs associées

Parcourir toute la base de données des erreurs de signature