Перейти к содержимому
ecdsa.com
jsonwebtoken (Node.js)Библиотеки JWT

Сообщение об ошибке

jwt not active

jsonwebtoken (Node.js) — NotBeforeError from jwt.verify()

Что это означает

`NotBeforeError` из jsonwebtoken: в токене есть утверждение `nbf` (not before, «не ранее»), и оно позже текущего времени проверяющей стороны, поэтому токен ещё не действителен. Свойство ошибки `date` содержит момент, когда токен станет действительным. Подпись уже проверена и верна.

Почему это происходит

Как исправить

  1. 1.

    Задайте небольшой допуск на расхождение часов

    `clockTolerance` (в секундах) применяется и к `nbf`, и к `exp`. Ограничьте его минутой или меньше, а настоящий уход часов устраняйте с помощью NTP на обеих машинах.

    js
    jwt.verify(token, publicKey, {
      algorithms: ["ES256"],
      clockTolerance: 30, // seconds; applies to nbf and exp
    });
  2. 2.

    Измерьте, насколько рано пришёл токен

    Сравните `err.date` с часами проверяющей стороны. Разница в секунды означает расхождение часов; разница, равная задержке `notBefore`, означает, что токен используют слишком рано; разница в тысячи лет — ошибку с миллисекундами.

    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;
    }

Связанные ошибки

Открыть всю базу ошибок подписей