К основному содержанию

JWT декодер и генератор онлайн

Вставьте токен — увидите header, payload, срок жизни человеческим языком и результат проверки подписи. Нужен тестовый токен — соберите его во вкладке «Создать». Секрет не покидает вкладку.

работает в браузере · данные никуда не отправляются

секрет и токен не покидают вкладку
Header

      Payload 
      

      

Как пользоваться

  1. Вкладка Декодировать: вставьте JWT (можно вместе с префиксом Bearer) — header и payload разберутся сразу.
  2. В таблице claim'ов смотрите exp, iat, nbf в локальном времени и статус: «истёк N дней назад» или «действителен ещё N часов» (янтарь — меньше часа).
  3. Введите секрет — для алгоритмов HS256/HS384/HS512 инструмент проверит подпись через WebCrypto и покажет «подпись верна» или «неверна».
  4. Вкладка Создать: выберите алгоритм, отредактируйте payload (JSON), кнопками +exp через час/день задайте срок, введите секрет и нажмите Создать токен.
  5. Готовый токен — кнопкой Копировать; Проверить перекинет его обратно в декодер.

Что делает инструмент

JWT (JSON Web Token, RFC 7519) — три части через точку: header (алгоритм и тип), payload (claim'ы — кто, кому, до какого времени) и подпись. Первые две — обычный JSON в Base64url, поэтому их читает кто угодно без ключа. Декодер разбирает токен, показывает JSON с подсветкой, переводит числовые времена exp, iat, nbf из Unix-секунд в дату по вашему часовому поясу и сразу говорит, жив токен или уже нет.

Подпись — единственное, что защищает токен от подделки. Для симметричных алгоритмов HS256/HS384/HS512 её можно проверить прямо в браузере: введите секрет, и инструмент посчитает HMAC через WebCrypto и сравнит с третьей частью. Для RS256, ES256 и других асимметричных схем нужен публичный ключ сервера — здесь показывается только разбор.

Стандартные claim'ы, которые расшифровывает таблица

ClaimСмыслЧто покажет инструмент
issКто выпустил (issuer)Значение как есть
subО ком токен (subject) — обычно ID пользователяЗначение как есть
audДля кого (audience) — сервис-получательСтрока или список через запятую
expИстекает (Unix-время)Дата, время и «истёк / действителен ещё»
iatВыпущенДата и «N минут назад»
nbfНе раньше чем (not before)Дата и «уже действует / ещё нет»
jtiУникальный ID токенаЗначение как есть

Зачем это в работе

  • Отладка API партнёрок и трекеров: сервер отвечает 401 — декодируйте токен и посмотрите, не истёк ли exp и тот ли aud.
  • Проверка чужого бэкенда: алгоритм none или короткий секрет в HS256 — классические дыры, которые видно за минуту.
  • Тестовые токены для Postman и автотестов: генератор соберёт HS256-токен с нужным payload и сроком без установки библиотек.
  • Telegram Mini Apps и OAuth: id_token от Google, Apple и других провайдеров — тоже JWT; здесь удобно посмотреть, что внутри.

Безопасность

Секрет и токен обрабатываются только в вашем браузере, на сервер affpapa.org ничего не уходит, секрет не сохраняется даже в localStorage. Тем не менее боевые секреты в сторонние инструменты вставлять не стоит — используйте генератор для тестовых ключей, а проверку подписи продакшн-токенов делайте с тестовым окружением.

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

Можно ли расшифровать JWT без секрета?

Header и payload — да: это Base64url, а не шифрование, они читаются любым декодером. Секрет нужен только для проверки подписи, то есть чтобы убедиться, что токен не подделан. Не кладите в payload то, что не должен увидеть клиент.

Что значит «истёк N дней назад» и почему сервер всё равно принимает токен?

Инструмент сравнивает claim exp с текущим временем вашего компьютера. Если сервер принимает просроченный токен, значит он не проверяет exp (это ошибка на его стороне) или у сервера сбиты часы.

Почему подпись показывает «неверна», хотя секрет правильный?

Частые причины: секрет на сервере хранится в Base64 и перед подписью декодируется, тогда как вы вставили его как текст; лишний пробел или перевод строки в конце секрета; алгоритм в header не совпадает с тем, чем реально подписывали.

Почему нельзя проверить RS256 или ES256?

Для асимметричных алгоритмов подпись проверяется публичным ключом сервера, которого у инструмента нет. Декодер покажет header и payload, а статус подписи — «проверка недоступна в браузере».

Сохраняется ли мой секрет?

Нет. Секрет живёт только в поле ввода до перезагрузки страницы, в localStorage не пишется, на сервер не отправляется. Payload генератора для удобства запоминается локально — там не должно быть секретов.

Чем JWT отличается от обычного Base64?

JWT — это две Base64url-строки (JSON header и JSON payload) плюс подпись, соединённые точками. Base64url отличается от обычного Base64 алфавитом (-_ вместо +/) и отсутствием дополнения =, чтобы токен можно было передавать в URL и заголовках.

Спонсоры проекта

Компании, которые помогают держать аналитику открытой
свежие базы — в канале Подписаться на канал