JWT-декодер

Декодер JSON Web Token: заголовок, payload, срок действия и проверка подписи открытым ключом (RSA, ECDSA, Ed25519). Токен не покидает браузер.

Пустой ввод: вставьте токен.

Последние токены

Вставленные токены остаются в истории этого браузера только до закрытия вкладки и не попадают в экспорт на странице «Закладки». Значения скрыты по умолчанию — раскрываются кнопкой «Показать».

Готовые примеры

Найдено: 6 из 6

Что это и как пользоваться

Декодер разбирает токен на три части и показывает каждую отдельно: заголовок с полем alg, полезную нагрузку и подпись в hex. Алгоритм из заголовка переводится в понятное имя — HS256 подписывается HMAC с SHA-256, RS256 — RSASSA-PKCS1-v1_5, ES256 — ECDSA на кривой P-256; поддерживаются также PS*, EdDSA и опасный none.

Стандартные claims выводятся таблицей с расшифровкой: exp, iat и nbf переводятся в дату, поэтому просроченный токен виден сразу, без пересчёта чисел в голове. Размер подписи показывается отдельно: у HS256 это 32 байта, у RS256 с ключом 2048 бит — 256, и по длине видно, соответствует ли она заявленному алгоритму.

Подпись проверяется только по явно вставленному ключу: открытый ключ в PEM для RS, ES, PS и EdDSA либо общий секрет для HS*. Пока ключа нет, страница честно пишет «Токен не проверен» — разобранный payload ничего не говорит о подлинности.

Ключи не подгружаются по сети: JWKS-адрес сервера нужно открыть отдельно и вставить ключ руками, он останется в поле ввода.

Когда пригодится

  • Разобрать токен из логов или из ответа сервиса авторизации, чтобы увидеть, какие права и срок в него положили.
  • Понять причину 401: сравнить alg в заголовке с тем, что ждёт сервер, и посмотреть на exp.
  • Проверить подпись своим публичным ключом, когда нужно убедиться, что токен выпущен доверенной стороной.
  • Найти в payload лишние поля — например почту или роль, которые не должны уезжать клиенту в открытом виде.
  • Сравнить два токена от разных сервисов и увидеть, чем отличаются наборы claims при одном алгоритме.

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

  • Токены не выпускаются и не обновляются: страница только читает строку, которую вы вставили.
  • Подпись проверяется локально и только для алгоритмов, известных из заголовка; экзотический alg страница не подтвердит.
  • Ключ не кешируется и не подтягивается с JWKS-эндпоинта — его нужно вставлять вручную при каждой проверке.
  • Разбор не заменяет серверную проверку: даже верная подпись не значит, что токен выдан этому клиенту и не отозван.

Примеры

Вход
                    eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiIxMjMifQ.SflKxw
                  
Выход
                    header: {"alg":"HS256"}
payload: {"sub":"123"}
                  
Вход
                    поле exp со значением 1700000000
                  
Выход
                    вторник, 14 ноября 2023, 22:13:20 UTC
                  

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

Почему JWT не шифрует данные?

JWT по RFC 7519 — это подписанный, а не зашифрованный токен. Его полезная нагрузка видна любому, кто получил строку: это просто base64url. Шифрование даёт формат JWE, но большинство библиотек и сервисов используют именно JWS. Не кладите в payload секреты — только то, что безопасно показать.

Из чего состоит JWT?

Три части, разделённые точкой: header.payload.signature. Header и payload — это JSON, закодированный base64url. Signature — подпись заголовка и полезной нагрузки ключом, по которой получатель проверяет, что данные не меняли по пути.

Что такое режим alg=none?

Это режим «без подписи». Уязвимые серверы, принимающие alg:none, доверяют любому токену без проверки. Серьёзные библиотеки его запрещают. Если декодер показывает alg: none, значит, токен ничем не защищён и его нельзя считать подлинным.

Чем HS256 отличается от RS256?

HS256 подписывается симметричным секретом — один и тот же ключ знают и сервер, и проверяющий. RS256 использует асимметричную пару: приватный ключ подписывает, публичный проверяет. RS256 позволяет публиковать только открытый ключ, поэтому его предпочитают в распределённых системах.

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

Для HS256 нужен тот же секрет, что использовал сервер, для RS256 — соответствующий публичный ключ. Без них подпись проверить невозможно. Этот инструмент только декодирует содержимое и переводит даты, но не подтверждает авторство токена.

Что означают поля iat, exp и nbf?

iat — время выпуска токена, exp — срок его действия, nbf — метка «не раньше которой», всё в Unix-секундах по UTC. Инструмент переводит эти числа в читаемую дату и показывает, истёк ли токен.

Безопасно ли вставлять токен в этот декодер?

Токен обрабатывается целиком в вашем браузере и не уходит на сервер — всё считается локально. Тем не менее не вставляйте в общедоступных местах токены, дающие доступ к чужим аккаунтам: сама строка является действующим ключом.