Инструменты разработчика · Декодер JWT
JWT exp, iat и nbf: NumericDate — это секунды, а не миллисекунды
· Как это работает
JWT временные метки отладка
JavaScript дает вам миллисекунды, а JWT требует секунд, поэтому временные метки ошибаются в тысячу раз. В этом посте объясняется NumericDate и то, как правильно читать три утверждения времени.
Токены, срок действия которых никогда не истекает или срок действия истекает до их прибытия — два признака ошибки единицы
Ошибка в тысячу раз приводит к драматическим симптомам. Предоставление JavaScript миллисекунд там, где производитель токенов ожидает секунды эпохи, может отодвинуть срок действия на тысячи лет. Повторное деление значения секунд может поместить его рядом с 1970, в результате чего срок действия вновь выпущенного токена будет выглядеть истекшим до его первого законного запроса.
Декодер помогает выявить масштаб, показывая числовое утверждение рядом с показанием ISO. Этот дисплей предназначен только для диагностики. Злоумышленник может записать любое число `exp`, `iat` или `nbf` в неподписанную или поддельную полезную нагрузку, поэтому преобразованное время часов будет иметь силу только после проверки подписи и политики в другом месте.
NumericDate в RFC 7519 — секунды с начала эпохи Unix, как число JSON, с разрешенными дробями, но редко используемыми
В заявлениях о времени JWT используется представление NumericDate: число JSON, отсчитывающее секунды из эпохи Unix. Дробные числа могут представлять позиции долей секунды, поскольку реализация умножает значение на 1,000 перед созданием даты. Он не округляет допустимое конечное число сначала до целого числа.
ToolAcre распознает `exp`, `nbf`, `iat`, `auth_time` и `updated_at` как поля в форме времени для отображения. Только первые три входят в число описаний зарегистрированных претензий. Нечисловые, бесконечные или недопустимые результаты даты опускаются, а не отображаются как значимое время, что предотвращает маскировку такой строки, как «скоро», под метку времени.
Date.now() — это миллисекунды — привычка JavaScript, которая приводит к истечении срока действия в далеком будущем.
`Date.now()` возвращает миллисекунды, а значение NumericDate выражается в секундах. Поэтому производителю, получающему запрос на основе часов браузера, необходимо явное преобразование масштаба, обычно деление на 1,000, прежде чем применять собственную политику округления. Путь чтения ToolAcre выполняет обратное умножение исключительно для отображения.
Держите преобразование единиц видимым при проверке кода. Тринадцатизначное значение в `exp` является полезным предупреждающим знаком, но подсчет цифр не является проверкой и не может заменить контракт производителя. Декодер попытается визуализировать любое конечное числовое утверждение, которое может представлять JavaScript Date; он не интерпретирует миллисекунды молча как секунды.
exp, nbf и iat — срок действия, не ранее и в момент выдачи, а также то, как верификатор применяет каждый из них.
`exp` определяет время, после которого верификатор больше не должен принимать токен в соответствии со своей политикой. `nbf` называет границу, до которой его нельзя принимать. `iat` записывает время выдачи. ToolAcre маркирует эти значения и сравнивает только `exp` и `nbf` с предоставленными опорными часами.
Возвращаемое состояние — `expired`, если декодированный срок действия наступает раньше, чем сейчас, `future`, если состояние «не раньше» наступает позже, чем сейчас, и `past` для других отображаемых заявлений о времени. Эти метки представляют собой наблюдения об арифметике полезной нагрузки. Они не являются решением аутентификации и не оценивают эмитента, аудиторию, ключ или подпись.
Разница в часах и свобода действий принадлежат проверяющему; этот декодер не определяет ни
В схеме спрашивалось, насколько разумен сдвиг тактовой частоты, но ни конфигурация декодера JWT, ни реализация не оставляют свободы действий. Это число принадлежит верификатору и требованиям к его развертыванию. Изобретение здесь значения по умолчанию превратило бы статью проверки в недокументированную политику безопасности, поэтому в этом разделе намеренно ее не приводится.
Если служба отклоняет токен вблизи границы, сравните часы службы, часы эмитента и настроенную политику проверки, используя доверенные журналы. ToolAcre разрешает претензии к текущей дате браузера без окна допуска. Поэтому его результат может отличаться от результата сервера, который намеренно допускает свободу действий, даже если оба анализируют одно и то же число.
Рабочий пример — преобразование выборочного значения exp в удобочитаемое время и сверка его с iat.
Предположим, что синтетическая полезная нагрузка содержит `iat: 1717243200` и `exp: 1717246800`. Умножение на 1,000 дает ISO мгновенные значения `2024-06-01T12:00:00.000Z` и `2024-06-01T13:00:00.000Z`. Вычитание необработанных значений секунд дает интервал в один час без примешивания миллисекунд браузера к расчетам.
Эта арифметика описывает то, что говорит полезная нагрузка. Это не означает, что эмитент выбрал эти значения или что один час подходит для какого-либо приложения. ToolAcre красиво печатает числа, генерирует UTC строк и может назвать дату окончания срока действия относительно сегодняшнего дня; проверяющий должен самостоятельно аутентифицировать и применять свои собственные правила принятия.
Чего это не касается — примет ли конкретный сервер токен, что зависит от его тактовой частоты и свободы действий; декодер показывает значения, а не вердикт
Декодер не может предсказать, примет ли конкретный сервер токен. Сервер может использовать другие часы, настроенный допуск, более строгую схему утверждений или дополнительные проверки эмитента и аудитории. Одна только ошибка подписи может отклонить токен, отображаемые числовые даты которого выглядят совершенно обычными.
И наоборот, ожидаемое истечение срока действия не делает непроверенный токен действительным. Относитесь к таблице времени как к способу выявления вероятных ошибок модуля и сбора данных для отладки. Фактический вердикт содержится в журналах сервера или контролируемом проверочном тесте с ожидаемым ключом и политикой, а не на панели декодирования.
Вывод: прочитайте претензии, выполните арифметику — декодер ToolAcre JWT показывает exp, iat и nbf, чтобы вы могли сами проверить единицы измерения.
Прочтите утверждения и сознательно выполните масштабную арифметику: секунды NumericDate становятся JavaScript миллисекундами только на границе даты. ToolAcre делает это умножение явным в исходном коде и отображает полученное значение ISO, игнорируя при этом неверные типы времени вместо того, чтобы гадать, что задумали их авторы.
Сохраняйте различие в безопасности столь же явным. Дисплей `exp` не является принудительной проверкой срока действия, дисплей `nbf` не является контролем доступа, а `iat` не является подтверждением выдачи. После проверки одноразового токена используйте доверенный верификатор для его аутентификации и примените политику реального времени и утверждений службы.