JWT Декодер

Работает офлайнНичего не загружаетсяБесплатно, без регистрации

Раскодируйте JWT в заголовок и клеймы, увидьте точный срок действия с живым отсчётом и проверьте HMAC-подпись по секрету — всё остаётся в браузере, а это единственное место, куда стоит вставлять токен.

Три части JWT

JWT — это три base64url-сегмента, соединённые точками. Заголовок называет алгоритм подписи; нагрузка несёт клеймы; подпись покрывает ровно первые два сегмента в переданном виде — не раскодированный JSON. Поэтому важна побайтовая точность перекодирования и поэтому инструмент сохраняет исходные сегменты при проверке подписи.

ЧастьСодержитЗащищена подписью?
Заголовокалгоритм, тип токена, id ключада
Нагрузкаклеймы — кто, для кого, до какого срокада
ПодписьHMAC или асимметричная подпись первых двух частей—

Как читать временные клеймы

exp, nbf и iat — это Unix-время в секундах: значение вроде 1516239022 — дата в 2018-м, а не в 1970-м. Инструмент переводит каждое в UTC и в относительное время и выводит из них строку статуса: действителен, истёк или ещё не действителен. Самая частая находка при отладке — расхождение часов: токен, выданный сервером со спешащими на минуту часами, для всех остальных «ещё не действителен».

Всё на этой странице работает локально; ни токен, ни секрет, ни клеймы не покидают ваш браузер.

Частые вопросы

Безопасно ли вставлять сюда токен?

Страница ничего никуда не отправляет — и декодирование, и проверка HMAC работают в браузере; это можно проверить, открыв страницу и отключившись от сети. Тем не менее к живым продакшен-токенам везде относитесь как к паролям: локальность этого инструмента и есть причина его существования — вставить токен в случайный онлайн-декодер значит отдать предъявительские учётные данные незнакомцу.

Почему токен читается без всякого ключа?

Потому что JWT подписан, а не зашифрован. Заголовок и нагрузка — обычный base64url: кодировка, не шифрование — их читает любой, у кого есть токен. Подпись лишь доказывает, кто выдал токен и что он не изменён. Ничего конфиденциального в нагрузку JWT класть нельзя; для этого существуют шифрованные токены (JWE).

Что на самом деле доказывает проверка подписи?

Для HS256/384/512 подпись — это HMAC от заголовок.нагрузка с общим секретом. Если проверка проходит с вашим секретом, токен создан стороной, владеющей этим секретом, и не был изменён. О сроке она не говорит ничего — у истёкшего токена подпись по-прежнему верна; поэтому инструмент показывает эти вещи раздельно.

Почему пишет, что алгоритму нужен публичный ключ?

RS256, ES256 и их родственники асимметричны: издатель подписывает приватным ключом, а проверить может любой — публичным. Для проверки нужен этот ключ в правильном формате, и это серверная задача. Раскодированное содержимое выше в любом случае полно и корректно — декодирование ключа не требует.

О чём предупреждение про alg «none»?

Спецификация JWT технически допускает неподписанный токен с alg равным none. Ранние библиотеки принимали такие токены как проверенные — атакующий мог убрать подпись, поставить none и свободно править клеймы. Современные библиотеки это отвергают, но инструмент помечает случай, потому что none-токен в реальной системе — почти всегда след атаки либо серьёзная ошибка конфигурации.

Почему токен перестал работать раньше exp?

exp — лишь жёсткая верхняя граница. Серверы также отклоняют токены с nbf в будущем, с iss или aud, не совпадающими с ожидаемыми, отозванные по jti или вышедшие за допуск расхождения часов. Таблица клеймов показывает всё это — сравнение iss и aud с ожиданиями сервера находит большинство случаев «действителен, но отклонён».

Похожие инструменты