Декодировщик JWT
Проверяем подпись...
Вставьте JWT (три части, закодированные в base64url и разделённые точками). Декодер покажет заголовок, полезную нагрузку и подпись, декодированные и аккуратно отформатированные, а также обнаруженный алгоритм, срок действия токена по вашему местному времени и согласованность значений nbf («не ранее»), iat («время выпуска») и exp («срок действия»). При наличии секрета или открытого ключа подпись можно дополнительно проверить.
Как декодировать JWT
-
1
Вставьте токен
Три строки в формате base64url, разделённые символом `.` (заголовок.полезная нагрузка.подпись).
-
2
Прочитайте декодированный заголовок
Алгоритм, тип и идентификатор ключа (`kid`): алгоритм указывает, какой тип ключа требуется для верификации.
-
3
Прочитайте полезную нагрузку
Стандартные утверждения (`iss`, `sub`, `aud`, `exp`, `iat`, `nbf`, `jti`) плюс любые пользовательские утверждения, которые выпускает ваше приложение.
-
4
Проверить (опционально)
Укажите секрет HMAC (для алгоритмов HS256, HS384 и HS512) или публичный ключ (для алгоритмов RS256, ES256 и других) для подтверждения действительности подписи.
Анатомия JWT
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9
.
eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkFsaWNlIiwiaWF0IjoxNjAwMDAwMDAwfQ
.
SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c
Каждый сегмент закодирован в base64url (а не в стандартном base64). Заголовок, это JSON вида {"alg":"HS256","typ":"JWT"}, полезная нагрузка, JSON вида {"sub":"1234567890","name":"Alice","iat":1600000000}, а подпись, это HMAC- или RSA-подпись строки header.payload.
Стандартные утверждения (RFC 7519)
| Утверждение | Название | Примечания |
|---|---|---|
iss |
Издатель | Кто выпустил токен |
sub |
Субъект | О ком этот токен |
aud |
Аудитория | Для кого предназначен токен |
exp |
Время истечения | Метка времени Unix; после неё токен отклоняется |
nbf |
Не ранее | Метка времени Unix; до неё токен отклоняется |
iat |
Время выпуска | Метка времени Unix создания токена |
jti |
Идентификатор JWT | Уникальный идентификатор для списков отзыва |
Поддерживаемые алгоритмы
Значение alg |
Тип ключа |
|---|---|
HS256/HS384/HS512 |
Общий секрет HMAC |
RS256/RS384/RS512 |
Открытый ключ RSA |
ES256/ES384/ES512 |
Открытый ключ ECDSA |
PS256/PS384/PS512 |
Открытый ключ RSA-PSS |
EdDSA / Ed25519 |
Кривая Эдвардса |
none |
Никогда не доверяйте этому, неподписанные токены |
Ловушка alg: none
Ранние библиотеки JWT допускали токены "alg": "none" и наивно считали их действительными. Всегда:
- Заносите в белый список алгоритмы, которые принимает ваше приложение.
- Безоговорочно отклоняйте
alg: none. - Отклоняйте
alg: HS256, когда код проверки ожидаетRS256(атака «путаница алгоритмов»).
Чем JWT НЕ является
- Не зашифрован. Заголовок и полезная нагрузка закодированы в base64, что декодируется элементарно. Никогда не помещайте секреты в JWT, не обернув его в JWE.
- По умолчанию не отзывается. После выпуска JWT действителен вплоть до
exp. Для отзыва нужен чёрный список или короткий срок действия плюс токены обновления. - Не является заменой сессионной cookie во всех сценариях. Непрозрачные токены, хранящиеся на стороне сервера, часто проще и безопаснее.
Частые ошибки
- Доверять заголовку. Значения
kidиalgберутся из самого токена. Скомпрометированный сервер может задать их произвольно; всегда сверяйтесь с фиксированным списком. - Игнорировать расхождение
nbfиiat. Из-за дрейфа часов возможна ситуацияiat > now. Закладывайте небольшой допуск (30–60 с). - Логировать JWT целиком. Полезная нагрузка часто содержит идентификаторы пользователей, адреса электронной почты, права доступа, PII, которым не место в stdout.
- Использовать HS256 со слабым секретом. Секрет из 16 символов подбирается перебором за считаные минуты. Используйте не менее 256 бит случайной энтропии.
Часто задаваемые вопросы
Нет. Декодирование выполняется в вашем браузере. Токен сохраняется локально, это важно, поскольку JWT-токены часто содержат данные сессии, идентификаторы пользователей и права доступа.
Да. При вставке общего секрета HMAC или публичного ключа, закодированного в формате PEM, проверка выполняется в вашем браузере; ключ никогда не покидает вашего устройства.
Это означает, что токен не подписан. Ни в коем случае не принимайте такие токены в производственной среде, их можно легко подделать. Несколько известных уязвимостей типа CVE были связаны именно с библиотеками, которые по умолчанию использовали формат alg: none.
Подпись по протоколу JWT подтверждает подлинность данных, но не их конфиденциальность. Заголовок и полезная нагрузка кодируются с использованием формата Base64URL, этот процесс обратим. Для обеспечения конфиденциальности рекомендуется применять алгоритм шифрования JSON Web Encryption (JWE) к данным в формате JWT или избегать передачи чувствительной информации в полезную нагрузку.
Сопутствующие инструменты
Смешивание цветов
Смешайте два HEX-цвета в 2-20 равномерных образцов. Каждый промежуточный цвет показывается как HEX-код в верхнем регистре, включая оба края.
Генератор вымышленных телефонных номеров
Создавайте до 50 вымышленных номеров из официально зарезервированных диапазонов пяти стран.
Генератор конфигурации webpack
Создайте webpack.config.js для webpack 5 по короткой форме: задайте entry, папку вывода и режим, затем включите TypeScript, Babel, загрузчик CSS, HtmlWebpackPlugin и сервер разработки.
Генератор случайных букв
Генерируйте случайные буквы A-Z. Выберите количество, верхний или нижний регистр либо смешанный вариант для игр, заданий и уроков.
Генератор бейджей README
Создавайте бейджи shields.io для файлов README на GitHub: статус сборки, версия, лицензия, число загрузок и покрытие кода. Просмотрите и скопируйте фрагмент Markdown.
Генератор случайных адресов
Создавайте 1–20 похожих на адрес записей для макетов и тестов в трёх упрощённых форматах.
Инструмент доступен на других языках
- Dekoder JWT [PL]
- JWT-avkodare [SV]
- JWTデコーダ [JA]
- ตัวถอดรหัส JWT [TH]
- Mã giải mã JWT [VI]
- JWT-Dekoder [DE]
- JWT 해독기 [KO]
- Decodificador JWT [PT]
- Decodificador JWT [ES]
- مُفكّك JWT [AR]
- Decoder JWT [ID]
- JWT-decoder [NL]
- Décodeur JWT [FR]
- JWT Decoder [EN]
- Decoder JWT [IT]
- JWT Dekoderi [TR]
- JWT 解码器 [ZH]