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