Инструкция
Как декодировать JWT без утечки
JSON Web Token несёт реальные данные: пользователя, которому он выдан, права, которые он даёт, и момент истечения срока. Вставить его в случайный онлайн-декодер значит передать эти данные, а часто и всё ещё действующую сессию, серверу, который вам не подконтролен. Декодер ниже работает целиком в вашем браузере, поэтому вы можете прочитать содержимое токена, проверить, не истёк ли он, и подтвердить подпись HMAC, если знаете секрет, и всё это без единого сетевого запроса, покидающего вашу вкладку.
Шаг за шагом
- Откройте декодер JWT и вставьте свой токен в поле ввода. JWT состоит из трёх частей в кодировке Base64Url, соединённых точками: заголовок, полезная нагрузка и подпись. Вы можете вставить его с префиксом Bearer или без него; инструмент в любом случае разберёт структуру и сразу сообщит, если формат неверен.
- Прочитайте декодированные заголовок и полезную нагрузку. Заголовок показывает алгоритм подписи (например, HS256 или RS256) и идентификатор ключа, если он есть. Полезная нагрузка перечисляет claim: для кого токен (sub), кто его выдал (iss), и временные метки. Инструмент превращает числовые поля iat, nbf и exp в читаемые даты и отмечает, действителен ли токен ещё или уже истёк.

- Если токен использует HS256 и у вас есть общий секрет, вставьте секрет в поле проверки и нажмите Проверить. Инструмент заново вычисляет HMAC по заголовку и полезной нагрузке и сравнивает его с подписью, так что вы узнаёте, подлинный ли токен или был изменён. Для токенов RS256 или ES256 подпись делается приватным ключом, которого у вас нет, поэтому инструмент разбирает claim, но не заявляет, что проверяет подпись.

Почему нельзя вставлять токен на случайный сайт
JWT не зашифрован. Заголовок и полезная нагрузка лишь закодированы в Base64Url, а значит любой, кто получит токен, может прочитать каждый claim внутри: email, идентификатор пользователя, роли, внутренние флаги. Если это токен доступа, который ещё не истёк, тот, у кого он есть, может воспроизвести его и действовать от вашего имени, пока он действителен. Когда вы вставляете живой токен в размещённый на сервере декодер, вы отправляете всё это в логи того сервера. Декодирование токена на собственной машине, без загрузки, единственный способ его разобрать, не расширяя круг тех, кто его видит. Убедиться, что трафика нет, можно, открыв панель сети во время декодирования.
Что подпись может и чего не может сказать
Подпись и есть то, что мешает кому-то изменить claim и остаться безнаказанным. Для токена HS256 один и тот же секрет подписывает и проверяет, поэтому, зная секрет, вы можете полностью подтвердить подлинность токена прямо здесь. Для токенов RS256 и ES256 токен подписывается приватным ключом, а проверяет только соответствующий публичный ключ; приватный ключ никогда не покидает издателя, поэтому клиентский инструмент читает claim, но без публичного ключа не может честно доказать подпись. Считайте декодированную полезную нагрузку утверждением издателя, а не доказательством, пока подпись не проверит тот, кому принадлежит проверочный ключ. Чтобы хешировать или сравнивать секреты отдельно, генератор хешей на этом сайте тоже работает локально.
Структура JWT и что раскрывает каждая часть
JWT состоит из трёх сегментов в кодировке Base64url, разделённых точками: заголовок, полезная нагрузка и подпись. Заголовок объявляет тип токена («JWT») и алгоритм. Наиболее распространены HS256 (HMAC-SHA-256, общий секрет) и RS256 (RSA-SHA-256, пара открытый/закрытый ключ). Полезная нагрузка содержит утверждения: `sub` (субъект, обычно идентификатор пользователя), `iat` (временная метка Unix момента выдачи), `exp` (временная метка Unix истечения срока), `aud` (предназначенная аудитория) и пользовательские утверждения приложения, например роли или области действия. Base64url не является шифрованием: это URL-безопасный вариант Base64, заменяющий `+` на `-` и `/` на `_`, без заполнения. Любой, кто имеет строку исходного токена, может декодировать заголовок и полезную нагрузку без ключа подписи. Для проверки требует ключ только сегмент подписи. Вот почему вставка рабочего токена продакшена во внешний онлайн-декодер является риском безопасности: если `exp` токена ещё в будущем и сервис записывает ввод, сессия, которую он представляет, может быть скомпрометирована.
Инструменты из этого гайда
- Декодировщик JWTДекодируйте JWT (заголовок, полезную нагрузку, срок действия) без отправки куда-либо. Без проверки подписи.
- Генератор хешейГенерируйте хеши MD5, SHA-1, SHA-256, SHA-512 из текста или файлов. Без загрузки.
- Форматирование JSONФорматируйте, проверяйте и минифицируйте JSON прямо в браузере. Без загрузки.
Частые вопросы
Отправляется ли мой токен на какой-либо сервер при декодировании?
Нет. Декодер разбивает токен, декодирует заголовок и полезную нагрузку из Base64Url и отображает их в памяти. Необязательная проверка HMAC использует встроенный в браузер Web Crypto API. Ничего не идёт по сети, и это важно, потому что JWT часто содержит персональные данные и всё ещё активную сессию. Откройте панель сети браузера во время декодирования, и вы увидите, что ни один запрос не уходит.
Может ли этот инструмент проверить подпись RS256 или ES256?
Не полностью, и он не будет делать вид. HS256 использует один общий секрет и для подписи, и для проверки, поэтому вставка этого секрета позволяет инструменту подтвердить подпись в вашем браузере. RS256 и ES256 используют приватный ключ для подписи и отдельный публичный ключ для проверки; инструмент читает и проверяет claim и срок действия, но не утверждает подпись, которую не может проверить. Для таких токенов проверяйте на сервисе, у которого есть публичный ключ.