Безопасность и сертификаты

Claims JWT: что означают exp, iat и nbf

Claims exp, nbf и iat — это значения NumericDate: числа секунд от эпохи Unix. Они обозначают разные моменты жизненного цикла токена.

Опубликовано

NumericDate — это секунды с начала эпохи Unix

Временные claims JWT используют JSON-число секунд с 1970-01-01T00:00:00Z без учёта дополнительных секунд. Чтобы передать такое число в конструктор JavaScript Date, умножьте его на 1000.

const expiresAt = new Date(payload.exp * 1000);

exp: время истечения

Токен нельзя принимать в момент exp и после него. Декодер может сравнить число с текущими часами, но приложению всё равно нужны проверенный токен и ясная политика для отсутствующего или некорректного срока.

if (nowSeconds >= payload.exp) reject("expired");

nbf: токен недействителен до этого времени

Токен нельзя принимать до nbf. Это поддерживает отложенную активацию, запланированный доступ и другие сценарии, где выпуск происходит раньше разрешённого использования.

if (nowSeconds < payload.nbf) reject("not active yet");

iat: время выпуска, а не правило истечения

iat фиксирует время выпуска токена и помогает вычислить возраст или обнаружить очевидно будущую метку. Он не определяет срок истечения и не заменяет exp.

const tokenAgeSeconds = nowSeconds - payload.iat;

Сравнение exp, iat и nbf

ClaimЗначениеТипичная проверка для отказа
expВремя истеченияnow >= exp
nbfНедействителен доnow < nbf
iatВремя выпускаПроверка возраста или будущего времени по политике приложения

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

Спецификация JWT допускает небольшой запас на расхождение часов. Ограничьте и задокументируйте его: большой допуск незаметно продлевает период, когда можно принять просроченный или ещё не действующий токен.

Чек-лист проверки временных claims

  • Проверьте подпись, прежде чем доверять любому временному claim.
  • Везде используйте секунды и сравнивайте с надёжными часами.
  • Отклоняйте повреждённые или нечисловые значения согласно политике приложения.
  • Используйте один документированный допуск на расхождение часов.
  • Также проверяйте issuer, audience и обязательные прикладные claims.

Проверьте пример

Проверьте exp, iat и nbf как значения NumericDate

Payload содержит все три зарегистрированных временных claim для сравнения секунд и отформатированных дат.

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkFkYSBMb3ZlbGFjZSIsImFkbWluIjp0cnVlLCJpYXQiOjE3MDAwMDAwMDAsIm5iZiI6MTY5OTk5OTkwMCwiZXhwIjoyMTQ3NDgzNjQ3fQ.ZGVtby1zaWduYXR1cmU

Ожидаемый результат: Таблица timestamps показывает время выпуска, начало действия и истечение в UTC и локальном представлении.

Прочитайте временные метки

Посмотрите exp, iat и nbf как даты

Декодируйте синтетический токен и сравните каждый исходный NumericDate с представлением в UTC и локальном времени.

Перейти в JWT Decoder →