Saltar al contenido
ecdsa.com
jsonwebtoken (Node.js)Bibliotecas de JWT

Mensaje de error

jwt signature is required

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

Qué significa

El tercer segmento del token está vacío —es un JWT no protegido (`alg: "none"`) o un token firmado al que se le cortó la firma—, pero llamas a `verify()` con una clave, así que la firma es obligatoria. jsonwebtoken lo rechaza antes que aceptar claims (declaraciones) que nadie firmó. Si tokens así llegan a tu API desde fuera, puede que alguien esté sondeando la clásica debilidad «alg none».

Por qué ocurre

Cómo solucionarlo

  1. 1.

    Mantener el rechazo y la lista de algoritmos permitidos

    Verifica con una lista `algorithms` explícita que nombre solo los algoritmos que usa tu emisor. Registra el origen de la solicitud si llegan tokens sin firmar desde fuera; no añadas una ruta de código que los acepte.

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

    Firmar los tokens de prueba con una clave desechable

    Genera un par de claves en la preparación de las pruebas y firma con él los datos de prueba, para que las pruebas recorran la misma ruta de verificación que en producción.

    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" });

Errores relacionados

Explorar toda la base de datos de errores de firma