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

Message d’erreur

jwt signature is required

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

Ce que cela signifie

Le troisième segment du jeton est vide (c’est un JWT non sécurisé, `alg: "none"`, ou un jeton signé dont la signature a été coupée), mais vous avez appelé `verify()` avec une clé : une signature est donc obligatoire. jsonwebtoken refuse plutôt que d’accepter des claims que personne n’a signés. Si de tels jetons atteignent votre API depuis l’extérieur, quelqu’un est peut-être en train de tester la faiblesse classique « alg none ».

Pourquoi cela se produit

Comment corriger l’erreur

  1. 1.

    Conserver le rejet et la liste d’algorithmes autorisés

    Vérifiez avec une liste `algorithms` explicite qui ne nomme que ce qu’utilise votre émetteur. Journalisez la source de la requête si des jetons non signés arrivent de l’extérieur ; n’ajoutez pas de chemin de code qui les accepte.

    js
    // Always pass an explicit allow-list; "none" must never be in it.
    const claims = jwt.verify(token, publicKey, { algorithms: ["ES256"] });
  2. 2.

    Signer les jetons de test avec une clé jetable

    Générez une paire de clés lors de la mise en place des tests et signez les fixtures avec elle, afin que les tests empruntent le même chemin de vérification qu’en production.

    js
    import { generateKeyPairSync } from "node:crypto";
    
    // Test setup: a throwaway key pair, real signatures, same verification path as production.
    const { privateKey, publicKey } = generateKeyPairSync("ec", { namedCurve: "P-256" });
    const token = jwt.sign({ sub: "test-user" }, privateKey, { algorithm: "ES256", expiresIn: "5m" });

Erreurs associées

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