Saltar al contenido
ecdsa.com
jose (JavaScript)Bibliotecas de JWT

Mensaje de error

"alg" (Algorithm) Header Parameter value not allowed

jose (JavaScript) — JOSEAlgNotAllowed, code ERR_JOSE_ALG_NOT_ALLOWED

Qué significa

El encabezado alg del token indica un algoritmo que no está en la lista de algoritmos permitidos que pasas a jwtVerify. jose lo rechaza antes de ejecutar ninguna operación criptográfica. Este control es deliberado: el encabezado alg es una entrada que controla el atacante, y es el verificador —no el token— quien debe elegir el algoritmo.

Por qué ocurre

Cómo solucionarlo

  1. 1.

    Alinear la lista de permitidos, la clave y la configuración del emisor

    Mira el encabezado y luego haz que las tres coincidan. Durante las migraciones, acepta ambos algoritmos temporalmente, cada uno con su propia clave, identificada por el kid del JWKS.

    js
    import { decodeProtectedHeader, jwtVerify } from "jose";
    
    console.log(decodeProtectedHeader(token)); // { alg: "ES256", kid: "..." }
    await jwtVerify(token, jwks, { algorithms: ["ES256"] });
  2. 2.

    Mantener la lista de permitidos lo más corta posible

    No «arregles» este error añadiendo todos los algoritmos a la lista. Un valor por tipo de token es el estado final seguro; el RFC 8725 (buenas prácticas actuales para JWT) dice lo mismo.

    js
    // good: exactly what your issuer signs with
    { algorithms: ["ES256"] }
    // bad: defeats the protection this error provides
    { algorithms: ["ES256", "RS256", "HS256", "PS256"] }

Errores relacionados

Explorar toda la base de datos de errores de firma