T

Text Machine

Мощные текстовые инструменты прямо в браузере

Декодер JWT

Декодируйте любой JSON Web Token, чтобы изучить его заголовок, полезную нагрузку и утверждения в удобном для чтения виде, и при желании проверьте подпись HMAC (HS256/384/512). Всё остаётся в вашем браузере.

Закодированный токен

Как пользоваться Декодер JWT

  1. 1

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

    Вставьте закодированный JSON Web Token в поле ввода. Декодер автоматически разделит его на заголовок, полезную нагрузку и подпись.

  2. 2

    Прочитайте утверждения

    Изучите декодированные заголовок и полезную нагрузку в виде форматированного JSON и просмотрите зарегистрированные утверждения, например время истечения и выдачи, представленные как читаемые даты.

  3. 3

    Проверьте подпись

    Для токенов HMAC введите секрет подписи, чтобы убедиться, что подпись действительна и токен не был изменён.

  4. 4

    Скопируйте нужное

    Скопируйте форматированный JSON заголовка или полезной нагрузки в буфер обмена, чтобы использовать его в тестах, документации или при отладке.

Разбираемся в JSON Web Token: устройство, утверждения и подводные камни

Три части, разделённые точками

JSON Web Token — это одна длинная строка с двумя точками внутри, которые делят её на три сегмента: заголовок, полезную нагрузку и подпись. Каждый из первых двух сегментов представляет собой небольшой объект JSON, закодированный в Base64URL — безопасном для URL варианте Base64, в котором заменена пара символов и убраны символы заполнения, чтобы токен без проблем передавался в заголовках и строках запроса. Третий сегмент — это подпись, вычисленная по первым двум.

Вставьте токен, и декодер разделит его по точкам и декодирует первые две части из Base64URL обратно в читаемый JSON. Вы увидите заголовок и полезную нагрузку ровно в том виде, в каком их записал издатель. Сама возможность это сделать и есть суть всего, что следует дальше: эти сегменты лишь закодированы, но не зашифрованы.

Заголовок: алгоритм и тип

Заголовок — самая короткая часть. Обычно он объявляет тип — JWT — и, что важнее, алгоритм подписи в поле alg. Распространённые значения — HS256, использующий HMAC с общим секретом, а также RS256 или ES256, использующие асимметричные пары ключей, где закрытый ключ подписывает, а открытый проверяет. Алгоритм сообщает проверяющей стороне, как была создана подпись и, следовательно, как её проверять.

Поле alg также важно с точки зрения безопасности. Токен, заявляющий алгоритм none, или попытка злоумышленника подменить токен с асимметричного алгоритма на симметричный, чтобы обмануть наивную проверяющую сторону и заставить её использовать открытый ключ как секрет HMAC, — это классические атаки. Корректная проверяющая сторона жёстко закрепляет ожидаемый алгоритм, а не слепо доверяет тому, что написано в заголовке.

Полезная нагрузка и её зарегистрированные утверждения

Полезная нагрузка несёт утверждения — заявления, которые делает токен. Набор зарегистрированных имён утверждений стандартизирован, чтобы разные системы сходились в их смысле. Утверждение издателя (iss) называет того, кто создал токен, утверждение субъекта (sub) определяет, о ком или о чём идёт речь (часто это идентификатор пользователя), а утверждение аудитории (aud) называет предполагаемого получателя. Наряду с ними вы обычно встретите пользовательские прикладные утверждения, например роль или арендатора.

Этот декодер представляет зарегистрированные утверждения в подписанном, удобном для чтения виде, так что вам не приходится держать в голове загадочные короткие имена. Увидеть издателя, субъекта и аудиторию, расписанными словами, часто достаточно, когда вы на глаз просматриваете токен при отладке, чтобы убедиться, что это нужный токен для нужного сервиса.

Временные утверждения: exp, iat и nbf

Три утверждения управляют сроком жизни токена, и все они — временные метки Unix в секундах, а не в миллисекундах, что является частой ошибкой «в тысячу раз» для JavaScript-разработчиков, привыкших к времени в миллисекундах. Утверждение истечения (exp) — это момент, после которого токен необходимо отклонять, утверждение времени выдачи (iat) фиксирует, когда он был создан, а утверждение «не ранее» (nbf) отмечает самый ранний момент, с которого он становится действительным.

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

Декодирование — это не проверка

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

Для токенов HMAC (HS256, HS384, HS512) этот инструмент может заново вычислить подпись из заголовка, полезной нагрузки и предоставленного вами секрета и сравнить её с подписью токена, подтвердив подлинность для этого секрета. Асимметричные алгоритмы, такие как RS256 и ES256, требуют открытого ключа издателя и здесь декодируются, но не проверяются. Критически важно: реальные решения об авторизации должны проверять подпись на стороне сервера; никогда не доверяйте утверждениям токена, опираясь лишь на декодирование в клиентском коде.

Полезная нагрузка не является секретной

Поскольку полезная нагрузка лишь закодирована, каждое содержащееся в ней утверждение полностью видно любому, кто получает токен, — браузеру, любому прокси, самому пользователю. JWT — отличное место для неконфиденциальных данных об идентичности и авторизации и совершенно негодное для чего-либо конфиденциального. Никогда не помещайте в полезную нагрузку пароль, секрет API, номер кредитной карты или личные персональные данные, думая, что кодирование их защитит. Это не так.

Подпись защищает целостность, а не конфиденциальность: она не даёт подделать данные, но никак не скрывает их содержимое. Если вам действительно нужен зашифрованный токен, полезную нагрузку которого нельзя прочитать, — это другая, более тяжёлая конструкция (JWE): стандартный JWT подписывается, но не шифруется. Держите секреты на сервере и ссылайтесь на них в токене через непрозрачный идентификатор.

Безопасная отладка токенов

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

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

Часто задаваемые вопросы

Что такое JSON Web Token (JWT)?
JSON Web Token — это компактный и безопасный для URL способ представления утверждений между двумя сторонами. Он состоит из трёх частей, закодированных в Base64URL, — заголовка, полезной нагрузки и подписи, разделённых точками, — и широко применяется для аутентификации и авторизации в веб-API.
Раскрывает ли декодирование JWT пароль или секрет?
Нет. Заголовок и полезная нагрузка только закодированы в Base64URL, но не зашифрованы, поэтому их может прочитать кто угодно — именно поэтому никогда не храните в токене конфиденциальные секреты. Сам секрет подписи никогда не входит в токен, и его нельзя восстановить путём декодирования.
Как здесь работает проверка подписи?
Для алгоритмов HMAC (HS256, HS384, HS512) инструмент заново вычисляет подпись из заголовка, полезной нагрузки и предоставленного вами секрета с помощью встроенного в браузер Web Crypto API, а затем сравнивает её с подписью токена. Асимметричные алгоритмы, такие как RS256 и ES256, требуют открытых ключей и декодируются, но не проверяются.
Что означают утверждения exp и iat?
exp (время истечения) и iat (время выдачи) — это зарегистрированные утверждения, хранящиеся как временные метки Unix в секундах. Этот декодер преобразует их в читаемые даты и показывает, активен ли токен сейчас, ещё не действителен или уже истёк, исходя из часов вашего устройства.
Отправляется ли мой токен на сервер?
Нет. Декодирование и проверка подписи выполняются полностью в вашем браузере. Ваш токен и секрет никогда не загружаются, не записываются в журнал и не сохраняются, поэтому даже рабочие токены остаются полностью конфиденциальными.

Похожие инструменты

Продолжайте работу с этими удобными инструментами

URL Encoder / Decoder

Кодирование / Декодирование Base64

Конвертер HTML в Текст

Форматтер JSON

Тестер регулярных выражений

Генератор CSS-градиентов