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

Mensagem de erro

jwt expired

O que significa

O TokenExpiredError do jsonwebtoken: a claim exp do token (um timestamp Unix em segundos) é anterior à hora atual do relógio do verificador. A assinatura em si pode ser perfeitamente válida — o token simplesmente ultrapassou o tempo de vida que o emissor lhe deu. O objeto de erro traz expiredAt com o momento exato.

Por que acontece

Como corrigir

  1. 1.

    Permitir explicitamente uma pequena diferença de relógio

    A opção clockTolerance aceita segundos e se aplica a exp e a nbf. Mantenha o valor pequeno (30–60 s) — ele existe para absorver o desvio dos relógios, não para estender o tempo de vida dos tokens.

    js
    jwt.verify(token, publicKey, {
      algorithms: ["ES256"],
      clockTolerance: 30, // seconds of tolerated skew
    });
  2. 2.

    Inspecionar o exp antes de culpar o relógio

    Decodifique as claims e imprima o exp ao lado da hora atual. Se o exp parecer 1.7e12, você tem um bug de milissegundos; se estiver alguns minutos no passado, você precisa de lógica de renovação.

    js
    const { exp } = jwt.decode(token);
    console.log("exp:", new Date(exp * 1000).toISOString());
    console.log("now:", new Date().toISOString());
  3. 3.

    Sincronizar os relógios e adicionar um caminho de renovação

    Rode o NTP (chrony/systemd-timesyncd) nos hosts que fazem a verificação e implemente a renovação do token no lado do cliente ao receber respostas 401. Nunca leve ignoreExpiration: true para produção — isso transforma qualquer token vazado em uma credencial permanente.

Erros relacionados

Ver toda a base de erros de assinatura