Декодировщик JWT

Вставьте JWT (три части, закодированные в base64url и разделённые точками). Декодер покажет заголовок, полезную нагрузку и подпись, декодированные и аккуратно отформатированные, а также обнаруженный алгоритм, срок действия токена по вашему местному времени и согласованность значений nbf («не ранее»), iat («время выпуска») и exp («срок действия»). При наличии секрета или открытого ключа подпись можно дополнительно проверить.

Как декодировать JWT

  1. 1

    Вставьте токен

    Три строки в формате base64url, разделённые символом `.` (заголовок.полезная нагрузка.подпись).

  2. 2

    Прочитайте декодированный заголовок

    Алгоритм, тип и идентификатор ключа (`kid`): алгоритм указывает, какой тип ключа требуется для верификации.

  3. 3

    Прочитайте полезную нагрузку

    Стандартные утверждения (`iss`, `sub`, `aud`, `exp`, `iat`, `nbf`, `jti`) плюс любые пользовательские утверждения, которые выпускает ваше приложение.

  4. 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 Открытый ключ ECDSA
PS256/PS384 Открытый ключ 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 или избегать передачи чувствительной информации в полезную нагрузку.

Сопутствующие инструменты

Справочная таблица ASCII

Полная таблица ASCII от 0 до 127 с десятичным, шестнадцатеричным, восьмеричным и двоичным представлением, а также записью числовых ссылок HTML, включая NUL, LF и DEL.

Справочник символов HTML

Справочник HTML-сущностей с поиском, их именованными и числовыми кодами, а также копированием специальных символов и знаков одним кликом.

Справочник сочетаний клавиш

Ищите документированные сочетания по умолчанию для VS Code, Chrome и Bash с GNU Readline в macOS, Windows и Linux.

Конвертер CMYK в RGB

Преобразуйте проценты CMYK в приблизительные значения RGB и Hex для быстрого экранного предпросмотра по стандартной формуле.

Шпаргалка по Markdown

Практический справочник Markdown с настоящим предпросмотром и готовыми для копирования примерами заголовков, списков, таблиц, кода, ссылок, изображений и синтаксиса GFM.

Счетчик FPS

Измерьте FPS браузера через requestAnimationFrame: сглаживание, минимальная и максимальная частота кадров, порог предупреждения и график по желанию. Работает локально, без загрузок и API.

Инструмент доступен на других языках