Декодер JWT
Декодируйте любой JSON Web Token, чтобы изучить его заголовок, полезную нагрузку и утверждения в удобном для чтения виде, и при желании проверьте подпись HMAC (HS256/384/512). Всё остаётся в вашем браузере.
Как пользоваться Декодер JWT
- 1
Вставьте токен
Вставьте закодированный JSON Web Token в поле ввода. Декодер автоматически разделит его на заголовок, полезную нагрузку и подпись.
- 2
Прочитайте утверждения
Изучите декодированные заголовок и полезную нагрузку в виде форматированного JSON и просмотрите зарегистрированные утверждения, например время истечения и выдачи, представленные как читаемые даты.
- 3
Проверьте подпись
Для токенов HMAC введите секрет подписи, чтобы убедиться, что подпись действительна и токен не был изменён.
- 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)?
Раскрывает ли декодирование JWT пароль или секрет?
Как здесь работает проверка подписи?
Что означают утверждения exp и iat?
Отправляется ли мой токен на сервер?
Похожие инструменты
Продолжайте работу с этими удобными инструментами