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

Message d’erreur

jwt malformed

Ce que cela signifie

jwt.verify() de jsonwebtoken n’a même pas pu analyser le jeton : la chaîne ne se découpe pas en exactement trois segments séparés par des points. La signature n’a jamais été vérifiée : la chaîne que vous avez passée n’a pas la structure d’un JWT. (Une chaîne qui a bien trois segments, mais dont l’en-tête n’est pas du JSON en base64url, échoue une étape plus loin, avec « invalid token ».)

Pourquoi cela se produit

Comment corriger l’erreur

  1. 1.

    Retirer le préfixe de schéma avant la vérification

    Ne prenez que la partie jeton de l’en-tête Authorization, et prévoyez le cas d’un en-tête absent pour échouer avec un 401 explicite plutôt qu’avec « jwt malformed ».

    js
    const auth = req.headers.authorization ?? "";
    const [scheme, token] = auth.split(" ");
    if (scheme !== "Bearer" || !token) {
      return res.status(401).json({ error: "missing bearer token" });
    }
    jwt.verify(token, publicKey, { algorithms: ["ES256"] });
  2. 2.

    Journaliser la valeur brute et compter ses segments

    Une seule ligne de journal vous indique s’il s’agit d’un préfixe, d’une troncature ou de la mauvaise variable. Un JWS a exactement 3 segments ; un JWE en a 5 ; tout le reste n’est pas un jeton.

    js
    console.log(JSON.stringify(token).slice(0, 80));
    console.log("segments:", String(token).split(".").length); // must be 3
  3. 3.

    Vérifier ce que contient réellement le jeton

    Collez la chaîne dans le débogueur JWT ci-dessous : il décode l’en-tête et les claims localement et vous indique précisément quel segment est défectueux – ou que la chaîne n’est pas du tout un JWT.

Erreurs associées

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