Mensagem de erro
jwt not active
jsonwebtoken (Node.js) — NotBeforeError from jwt.verify()
O que significa
O `NotBeforeError` do jsonwebtoken indica que o token tem uma claim `nbf` (“not before”) com um horário posterior à hora atual do verificador, então ele ainda não é válido. A propriedade `date` do erro guarda o momento em que o token passa a ser válido. A assinatura já foi verificada e está correta.
Por que acontece
O relógio do verificador está atrasado em relação ao do emissor
comumOs emissores costumam definir `nbf` como o horário de emissão. Se o relógio da máquina que faz a verificação estiver alguns segundos ou minutos atrasado, tokens recém-emitidos falham até que o relógio atrasado alcance esse horário — o que parece uma falha intermitente logo após o login.
O token foi assinado com um atraso em notBefore
ocasional`jwt.sign(payload, key, { notBefore: "5m" })` emite deliberadamente um token que só passa a valer mais tarde. Usá-lo antes disso é uma rejeição correta.
nbf em milissegundos
raraO NumericDate é dado em segundos desde a época Unix. Um payload montado à mão com `nbf: Date.now()` só é válido em um futuro distante.
Como corrigir
- 1.
Permitir uma pequena diferença de relógio
A opção `clockTolerance` (em segundos) se aplica tanto a `nbf` quanto a `exp`. Mantenha-a em um minuto ou menos e corrija o desvio real com NTP nas duas máquinas.
js jwt.verify(token, publicKey, { algorithms: ["ES256"], clockTolerance: 30, // seconds; applies to nbf and exp }); - 2.
Medir com quanta antecedência o token foi usado
Compare `err.date` com o relógio do verificador. Segundos indicam diferença de relógio; exatamente o atraso de `notBefore` indica que o token está sendo usado cedo demais; milhares de anos indicam um bug de milissegundos.
js try { jwt.verify(token, publicKey, { algorithms: ["ES256"] }); } catch (err) { if (err.name === "NotBeforeError") { const early = (err.date.getTime() - Date.now()) / 1000; console.warn("token becomes valid in", early.toFixed(1), "s"); } throw err; }