bitlvl
RU

Декодер JWT

Вставьте токен, чтобы прочитать его содержимое. Время переводится в даты, срок действия сверяется с вашими часами, а токены с HMAC-подписью можно проверить по секрету. Ничего никуда не отправляется.

 

Токены, подписанные RS256, ES256 или EdDSA, требуют открытый ключ издателя и здесь не проверяются, но декодируются как обычно.

Заголовок

Полезная нагрузка

Результаты и сообщения этого инструмента выводятся на английском языке.

Анатомия JWT

JSON Web Token (RFC 7519) — это три части в кодировке Base64URL, соединённые точками: заголовок.полезная нагрузка.подпись. Заголовок указывает, каким алгоритмом он подписан. Полезная нагрузка — JSON-объект с утверждениями (claims) о субъекте. Подпись покрывает первые две части, так что проверяющий может определить, было ли что-то изменено.

Первые две части только закодированы, а не зашифрованы. Любой, у кого есть токен, может прочитать каждый claim — поэтому этот декодер работает без ключа, и поэтому JWT никогда не должен содержать секреты.

Стандартные claims

ClaimЗначение
issIssuer: кто создал токен
subSubject: о ком токен, обычно ID пользователя
audAudience: для какого сервиса предназначен токен; проверяющие обязаны это проверять
expСрок действия, Unix-время в секундах
nbfNot before: токен недействителен до этого момента
iatВремя выпуска
jtiУникальный ID токена, используется для списков отзыва

Алгоритмы подписи

HS256 (HMAC с SHA-256) использует один общий секрет и для подписи, и для проверки, поэтому любой, кто может проверить, может и подделать; он подходит для одного сервиса, общающегося с самим собой. RS256, ES256 и EdDSA используют закрытый ключ для подписи и открытый для проверки — именно их применяют провайдеры идентификации (Auth0, Keycloak, Google, Azure AD), чтобы любой сервис мог проверять токены, не имея возможности их выпускать. Открытые ключи обычно публикуются по URL /.well-known/jwks.json.

Что обязаны проверять верификаторы

  1. Подпись, ключом, соответствующим alg в заголовке, и никогда не принимая "alg": "none".
  2. Что exp в будущем, а nbf, если присутствует, в прошлом (с небольшим допуском на расхождение часов).
  3. Что iss и aud соответствуют ожидаемым значениям.

Вопросы

Безопасно ли вставлять сюда мой токен?

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

Почему декодер говорит, что мой токен истёк?

Его claim exp раньше, чем часы вашего компьютера. Токены обычно живут недолго (от минут до часов); получите новый через эндпоинт входа или обновления. Если ваши часы неверны, проверка тоже будет неверной.

Можно ли здесь проверить токен RS256?

Не в этой версии. RS256 требует открытый ключ издателя (из его эндпоинта JWKS). Декодер показывает заголовок, полезную нагрузку и временные проверки для любого алгоритма; секретом можно проверить только алгоритмы HMAC.

Почему полезная нагрузка читается без секрета?

Потому что JWT подписан, а не зашифрован. Base64URL обратим по замыслу. Если содержимое нужно скрыть, токен должен быть зашифрован как JWE — он выглядит похоже, но состоит из пяти частей.

Что означает временная метка в exp?

Секунды с 1 января 1970 UTC (Unix-время). Декодер переводит её в дату в вашем часовом поясе и показывает, сколько осталось. Для преобразования других значений используйте инструмент Unix timestamp.