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

Mensaje de error

invalid signature

Qué significa

El token se analizó sin problemas y su estructura es válida, pero la comprobación criptográfica falló: la firma sobre header.payload no se verifica con la clave proporcionada. O la clave no es la que firmó el token, o los bytes firmados cambiaron después de la firma.

Por qué ocurre

Cómo solucionarlo

  1. 1.

    Calcular la huella de la clave en ambos lados

    Calcula el hash de la clave pública que de verdad cargó el verificador y compáralo con el de la clave del emisor. Si las huellas difieren, la clave está obsoleta o es incorrecta —la causa más frecuente con diferencia— y la búsqueda termina en un solo paso.

    js
    import { createHash, createPublicKey } from "node:crypto";
    
    // Run on the verifier, and on the issuer with its signing key: the outputs must match.
    const spki = createPublicKey(process.env.JWT_PUBLIC_KEY).export({ type: "spki", format: "der" });
    console.log(createHash("sha256").update(spki).digest("hex"));
  2. 2.

    Hacer coincidir el kid del token con la clave de verificación

    Decodifica el encabezado sin verificar y compara su kid con la clave que tienes. Si el emisor publica un JWKS, resuelve la clave por kid en lugar de fijar una en el código.

    js
    const { header } = jwt.decode(token, { complete: true });
    console.log(header.kid, header.alg); // compare with your JWKS / configured key
  3. 3.

    Dejar que el depurador identifique la discrepancia

    Pega el token y la clave pública en el depurador de JWT: verifica ES256/ES384/ES512 en local y distingue entre clave equivocada, carga útil manipulada y codificación de firma mal formada, en lugar de devolver un simple booleano.

Errores relacionados

Explorar toda la base de datos de errores de firma