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 с ожиданиями сервера находит большинство случаев «действителен, но отклонён».
Похожие инструменты
- Конструктор схем и блок-схемРисуйте блок-схемы и диаграммы, соединяйте блоки стрелками, которые прокладывают себя сами, и раскладывайте всё автоматически. Экспорт в SVG.
- Генератор паролейСоздавайте надёжные пароли криптографическим генератором браузера с оценкой стойкости.
- HTML-сущностиКодируйте текст для HTML или декодируйте сущности обратно — ломающие разметку знаки, именованные наборы, числовые ссылки до эмодзи. Ровно один проход.