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

Mensaje de error

jwt malformed

Qué significa

La función jwt.verify() de jsonwebtoken ni siquiera pudo analizar el token: la cadena no se divide en exactamente tres segmentos separados por puntos. La firma no se llegó a comprobar: la cadena que pasas no tiene la estructura de un JWT. (Una cadena que sí tiene tres segmentos, pero cuyo encabezado no es JSON en base64url, falla un paso después, con «invalid token».)

Por qué ocurre

Cómo solucionarlo

  1. 1.

    Quitar el prefijo del esquema antes de verificar

    Toma solo la parte del token del encabezado Authorization y contempla el caso de que falte el encabezado, para fallar con un 401 claro en lugar de con «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.

    Registrar el valor en bruto y contar sus segmentos

    Una sola línea de registro te dice si se trata de un prefijo, de un truncamiento o de la variable equivocada. Un JWS tiene exactamente 3 segmentos; un JWE, 5; cualquier otra cosa no es un token.

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

    Comprobar qué contiene realmente el token

    Pega la cadena en el depurador de JWT de abajo: decodifica localmente el encabezado y los claims (declaraciones) y te dice exactamente qué segmento está roto, o que la cadena no es un JWT en absoluto.

Errores relacionados

Explorar toda la base de datos de errores de firma