Pular para o conteúdo
ecdsa.com
jose (JavaScript)Bibliotecas de JWT

Mensagem de erro

"exp" claim timestamp check failed

jose (JavaScript) — JWTExpired, code ERR_JWT_EXPIRED

O que significa

A validação de claims do jose rejeitou o token porque o timestamp exp já passou em relação ao relógio do verificador. A verificação da assinatura já tinha sido aprovada — trata-se apenas de uma falha de prazo. O jose usa o mesmo padrão de texto para outras claims ("nbf" claim timestamp check failed) quando um token é usado antes do início da validade (not-before).

Por que acontece

Como corrigir

  1. 1.

    Adicionar uma tolerância de relógio limitada

    O jose aceita a opção clockTolerance (um número de segundos ou uma string legível por humanos). Mantenha-a pequena; ela serve para absorver o desvio de relógio, não para estender o tempo de vida.

    js
    import { jwtVerify } from "jose";
    
    await jwtVerify(token, key, {
      algorithms: ["ES256"],
      clockTolerance: "30s",
    });
  2. 2.

    Imprimir a linha do tempo antes de mudar qualquer coisa

    Compare iat, exp e o “agora” do verificador. O padrão revela a causa: exp poucos segundos no passado → problema de renovação do token; exp antes de iat → bug na emissão; exp ≈ agora, mas falhando → diferença de relógio.

    js
    import { decodeJwt } from "jose";
    
    const { iat, exp } = decodeJwt(token);
    console.log({ iat: new Date(iat * 1000), exp: new Date(exp * 1000), now: new Date() });

Erros relacionados

Ver toda a base de erros de assinatura