Что это за инструмент?
JWT (JSON Web Token) — это компактная строка, безопасная для использования в URL-адресах, которая используется для передачи утверждений между двумя сторонами — чаще всего в качестве токена аутентификации после входа в систему. Он состоит из трёх частей, разделённых точками: заголовка (алгоритм и тип токена), полезной нагрузки (фактические утверждения — идентификатор пользователя, роли, срок действия и т. д.) и подписи (используется сервером для проверки того, что токен не был подделан).
Заголовок и полезные данные представляют собой JSON, закодированный с помощью Base64URL (без шифрования), поэтому любой пользователь может декодировать и прочитать их без секретного ключа. Для проверки подлинности требуется секретный ключ только для подписи. Именно это и делает данный инструмент: он декодирует читаемые части и отображает их в виде отформатированного JSON, не пытаясь проверить подпись.
Зачем его использовать?
- Заголовок и полезные данные, отформатированные в формате JSON, доступны для чтения сразу — больше не нужно вручную разбивать строку и декодировать Base64.
- Автоматическая проверка срока действия: если полезные данные содержат атрибут «exp», он преобразуется в удобочитаемую дату и помечается как просроченный или действительный.
- Копирование одним щелчком мыши — отдельно для заголовка или полезных данных.
- 100 % на стороне клиента — токен декодируется локально и никогда не передается, поэтому его можно безопасно использовать даже с токенами из производственной системы.
- Проверка подписи не выполнялась и не заявлена — это инструмент для отладки и проверки, а не валидатор.
Как использовать
- Вставьте свой JWT в поле (полную строку, включая все три части, разделенные точками).
- Заголовок и полезные данные декодируются автоматически по мере ввода текста.
- Если у токена есть утверждение «exp», проверьте строку срока действия — в ней указана точная дата и информация о том, истек ли срок действия токена.
- Нажмите «Копировать» под любым из полей, чтобы скопировать этот раздел в формате JSON.
Пример
Ввод
eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiIxMjM0IiwibmFtZSI6IkpvaG4gRG9lIiwiZXhwIjoxNzAwMDAwMDAwfQ.dQw4w9WgXcQРезультат
Header: {"alg": "HS256"}
Payload: {"sub": "1234", "name": "John Doe", "exp": 1700000000}Подпись (третья часть) никогда не декодируется и не проверяется — это непрозрачный хеш, используемый на стороне сервера для проверки подлинности.
Практические советы
- Устранение ошибок «недопустимый токен»: сначала декодируйте полезные данные, чтобы проверить утверждение «exp» — наиболее частая причина заключается в истечении срока действия токена, и это не всегда очевидно из одного только сообщения об ошибке.
- Проверка фактического содержания токена стороннего API: многие API возвращают в качестве токена доступа JWT, который выглядит непонятным — декодируйте его здесь, чтобы увидеть области доступа, идентификатор пользователя или срок действия, которые фактически получает ваша интеграция.
- Никогда не следует предполагать, что JWT зашифрован: если в ходе разработки вы обнаружите конфиденциальные данные (адрес электронной почты, внутренние идентификаторы) в расшифрованном поле данных, это сигнал о том, что следует перенести эти данные на сервер, а не полагаться на то, что клиент их не прочитает.
Типичные утверждения, которые можно встретить в полезной нагрузке
| Утверждение | Значение |
|---|---|
| sub | Объект — как правило, идентификатор пользователя, который представляет токен |
| exp | Срок действия (временная метка Unix) — после истечения этого срока токен становится недействительным |
| iat | Дата выдачи — момент создания токена |
| iss | Эмитент — какой сервис/сервер выдал токен |
| aud | Аудитория — для какого сервиса предназначен токен |
| роль / роли / сфера применения | Пользовательские утверждения — разрешения или роли, предоставленные пользователю (не входят в стандарт JWT, но чрезвычайно распространены) |
Часто задаваемые вопросы
Проверяет ли этот инструмент подпись JWT?
Нет. Для проверки подписи требуется секретный или открытый ключ, использованный для подписи токена, который имеется только у сервера-эмитента. Данный инструмент декодирует только заголовок и полезную нагрузку — части, понятные человеку, — что позволяет вам просматривать утверждения и срок действия без использования каких-либо ключей.
Безопасно ли вставлять сюда реальный JWT из производственной среды?
Декодирование происходит полностью в вашем браузере с помощью JavaScript — токен никогда не отправляется ни на какой сервер, в том числе и на наш. При этом относитесь к токенам так же, как к паролям: не вставляйте их в инструменты, которым не доверяете, и не публикуйте скриншоты декодированных токенов, содержащих конфиденциальные данные.
Почему любой может прочитать содержимое моего JWT без пароля?
По замыслу — заголовок и полезные данные JWT кодируются с помощью Base64URL, а не шифруются. Кодировка не обеспечивает безопасность; она лишь делает JSON-данные безопасными для передачи по URL. Никогда не помещайте секретные данные (пароли, номера кредитных карт) непосредственно в полезные данные JWT — исходите из того, что любой, у кого есть токен, может прочитать его содержимое.
Что означает утверждение «exp» и почему это важно?
«exp» — это время истечения срока действия токена, представленное в виде временной метки Unix (количество секунд с 1970 года). По истечении этого времени серверы отклоняют JWT, что вынуждает клиента пройти повторную аутентификацию. Этот инструмент преобразует его в удобочитаемую дату и отмечает, истек ли срок его действия, что полезно для отладки проблем типа «почему моя сессия завершилась».
Мой токен выдает ошибку разбора JSON — почему?
Либо эта строка не является действительным JWT (она должна состоять ровно из трёх частей, разделённых точками), либо она была усечена или изменена — частой причиной является случайное разбиение токена на несколько строк или отсутствие конечных символов при копировании.