Pular para o conteúdo
ecdsa.com
jsonwebtoken (Node.js)Bibliotecas de JWT

Mensagem de erro

jwt malformed

O que significa

O jwt.verify() do jsonwebtoken não conseguiu nem analisar o token: a string não se divide em exatamente três segmentos separados por pontos. A assinatura nem chegou a ser verificada — a string que você passou não tem a estrutura de um JWT. (Uma string que tem, sim, três segmentos, mas cujo cabeçalho não é JSON em base64url falha uma etapa depois, com “invalid token”.)

Por que acontece

Como corrigir

  1. 1.

    Remover o prefixo do esquema antes de verificar

    Pegue só a parte do token do cabeçalho Authorization e trate o caso de cabeçalho ausente, para falhar com um 401 claro em vez de “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 o valor bruto em log e contar os segmentos

    Uma única linha de log mostra se o problema é um prefixo, um truncamento ou a variável errada. Um JWS tem exatamente 3 segmentos; um JWE tem 5; qualquer outra coisa não é um token.

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

    Verificar o que o token realmente contém

    Cole a string no depurador de JWT abaixo: ele decodifica o cabeçalho e as claims localmente e mostra exatamente qual segmento está quebrado — ou que a string nem é um JWT.

Erros relacionados

Ver toda a base de erros de assinatura