Декодер и верификатор JWT
Декодируйте JSON Web Token и проверяйте подписи HS/RS/ES/PS — полностью в браузере
—
—
Что такое декодер JWT?
JWT (JSON Web Token) — это токен из трёх частей — заголовка, полезной нагрузки и подписи, — используемый для аутентификации и авторизации в современных веб-приложениях. Полезная нагрузка выглядит как случайный текст, пока её не декодируешь, — именно это и делает инструмент. Он превращает заголовок и полезную нагрузку в читаемый, аккуратно отформатированный JSON, объясняет зарегистрированные утверждения вроде exp, nbf и iat простым языком с реальными датами и показывает, истёк ли токен, активен ли он или ещё не вступил в силу. Инструмент умеет проверять подписи: HS256/384/512 — общим секретом, RS/PS/ES — открытым ключом PEM, всё через Web Crypto внутри браузера. Для разработчиков, отлаживающих сценарии входа, это замена привычке вставлять продакшн-токены в сторонние сайты.
Что умеет этот инструмент
- 📖 Декодировать заголовок и полезную нагрузку в форматированный JSON
- 🏷️ Объяснять зарегистрированные утверждения простым языком
- ⏳ exp, nbf и iat: точная дата плюс относительное время
- ✅ Проверка подписи HS256/384/512 секретом
- 🔏 Проверка подписи RS/PS/ES открытым ключом PEM
- 🚦 Статус-бейдж: истёк, активен или ещё не вступил в силу
- ⚠️ Предупреждение, если alg равен none — то есть токен не защищён
Когда пригодится
- Когда разбираетесь, почему во входе возникает ошибка 401
- Когда выясняете, почему токен внезапно перестал работать
- Когда проверяете токен стороннего провайдера удостоверений перед доверием
- Когда хотите посмотреть, какие утверждения лежат внутри refresh-токена
Конфиденциальность: токены и ключи обрабатываются полностью в браузере и никуда не отправляются, поэтому вставлять реальные продакшн-учётные данные безопасно.
Что представляют собой три сегмента
JWT состоит из трёх сегментов в кодировке base64url, разделённых точками:
- Заголовок указывает алгоритм; полезная нагрузка содержит утверждения (claims); подпись связывает оба сегмента с помощью секрета или ключа.
- Ничто в заголовке или полезной нагрузке не зашифровано — любой, кто владеет токеном, может прочитать все утверждения. Это задумано так по архитектуре: JWT — это подписанный контейнер, а не средство защиты.
- Проверка требует наличия ключа для подписи и выполняется на вашем сервере; эта страница раскодирует токен локально, чтобы вы могли изучить утверждения, не передавая токены на удалённые ресурсы.
Раскодирование — это не проверка
Клеймы становятся реальными датами
Заголовок и полезная нагрузка выводятся читаемым JSON, а зарегистрированные клеймы вроде exp, nbf и iat превращаются в настоящие даты, с чётким вердиктом: истёк, активен или ещё не действует.
Проверка HS, RS, PS и ES
HS256/384/512 проверяются общим секретом в текстовой или base64 форме, а токены RS, PS или ES — открытым ключом PEM, всё через Web Crypto прямо на странице.
Понятные объяснения неверных токенов
Структурные проблемы сообщаются точно — пропущенная точка, неверный заголовок, нечитаемая нагрузка — а токены с заявленным алгоритмом none помечаются, а не доверяются.
Частые вопросы
Отправляется ли мой токен на сервер?⌄
Нет. Декодирование и проверка подписи выполняются полностью в браузере через Web Crypto API. Ваш токен, секрет и ключи никогда не покидают устройство, поэтому можно безопасно проверять рабочие токены.
Какие алгоритмы подписи можно проверить?⌄
HS256/384/512 с общим секретом (UTF-8 или base64url), а также асимметричные семейства RS256/384/512, PS256/384/512 и ES256/384/512 — вставьте открытый ключ PEM. Для асимметричных токенов нужен только открытый ключ, приватный не требуется.
JWT не шифруется — что это значит?⌄
Стандартный JWT только закодирован в base64url и подписан, но не зашифрован, поэтому любой может прочитать его нагрузку. Никогда не помещайте секреты в JWT. Подпись лишь доказывает, что токен не был изменён тем, у кого нет ключа.
В сообщении указано «недопустимая подпись» — токен подделан?⌄
Обычно одна из трёх банальных причин: токен подписан секретом другого окружения; издатель периодически обновляет ключи, а у вас устаревший ключ; или алгоритм в заголовке не совпадает с тем, который ожидает ваша система проверки (известный трюк с alg=none). Сначала раскодируйте заголовок здесь, затем сравните его с ключом, который фактически использует ваш бэкенд.