Перейти к содержимому

header.payload.signature

Декодер JWT

JSON Web Token (JWT) — это 3 части в Base64url, разделённые точками: заголовок, payload и подпись. Вставьте токен, чтобы прочитать его claims и время; он здесь декодируется, а не проверяется.

Токен остаётся в этой вкладке и никуда не отправляется. Декодированный токен — не доверенный токен: подпись здесь никогда не проверяется.

Scanned by NortonTM Safe Web

Коротко

Цена
Без оплаты
Аккаунт
Не нужен
Стандарты
RFC 7519 (JWT), RFC 7515 (JWS), RFC 7516 (JWE)
Подпись
Не проверяется — токен только декодируется
Время
exp, nbf и iat показаны в UTC и сравниваются с вашими часами
Загрузка
Нет — токен остаётся во вкладке вашего браузера

Пример токена и распространённые алгоритмы

Пример токена на этой странице подписан HMAC-SHA-256 с одноразовым ключом. Страница декодировала его, чтобы получить первую таблицу.

Claims примера токена
ClaimЗначениеВремя (UTC)
issauth.example.com—
subuser-42—
audapi—
iat17000000002023-11-14 22:13:20 UTC
exp17000036002023-11-14 23:13:20 UTC
Распространённые алгоритмы подписи (alg)
algСемействоХешРазмер подписи
HS256HMACSHA-25632 B
HS512HMACSHA-51264 B
RS256RSASSA-PKCS1-v1_5SHA-256256 B (2048-bit key)
ES256ECDSA P-256SHA-25664 B
ES512ECDSA P-521SHA-512132 B
EdDSAEdDSA—64 B (Ed25519)

Как декодировать JWT

1

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

Вставьте токен целиком, с Bearer в начале или без него. В нём 3 части, разделённые точками, или 5, если это зашифрованный JWE.

2

Прочитайте части

Заголовок и payload показаны как отформатированный JSON, а каждый claim указан в таблице. Время exp, nbf и iat показывается в UTC.

3

Проверьте время

Страница сравнивает exp и nbf с часами вашего устройства и сообщает, истёк ли срок действия токена. Подлинность токена она не проверяет.

Как устроен JWT

JWT (RFC 7519) записывается как header.payload.signature. Заголовок и payload — это JSON-объекты, каждый закодирован в Base64url без дополнения (RFC 4648, раздел 5), а подпись — сырые байты в той же кодировке. Декодирование лишь меняет кодировку, поэтому любой, у кого есть токен, может прочитать его payload: не помещайте в него секреты. Заголовок называет алгоритм подписи в поле alg, например HS256 (HMAC с SHA-256, подпись 32 байта) или RS256 (RSA с SHA-256, 256 байт для ключа 2048 бит).

Эта страница декодирует токен и больше ничего не делает. Она не проверяет подпись, потому что для этого нужен ключ, и не может сказать, подлинен ли токен, отозван ли он или принимается ли сервером. Она сравнивает claims exp, nbf и iat, которые считают секунды с 1970-01-01 UTC, с часами вашего устройства и выводит их как дату и время в UTC. Токен из 5 частей — это JWE: его содержимое зашифровано, поэтому можно показать только заголовок.

Вопросы о JWT

Как декодировать JWT?

Вставьте токен в поле. Страница разделяет его по точкам, преобразует первые две части из Base64url и показывает их как JSON. Bearer в начале игнорируется. Для примера токена заголовок — {"alg":"HS256","typ":"JWT"}.

Проверяет ли эта страница подпись?

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

Что означают exp, iat и nbf?

Это время в секундах с 1970-01-01 UTC (RFC 7519). exp — когда токен истекает, nbf — время, раньше которого его нельзя принимать, а iat — когда он выпущен. В примере токена iat 1700000000 — это 2023-11-14 22:13:20 UTC, а exp 1700003600 — на один час позже.

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

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

Почему в моём токене 5 частей?

Токен из 5 частей — это JWE, зашифрованный JSON Web Token (RFC 7516). Его payload зашифрован для получателя, поэтому эта страница показывает только заголовок и размеры частей. Содержимое здесь прочитать нельзя.

Что значит «not Base64url» или «not JSON»?

Каждая из первых двух частей должна быть текстом Base64url, который декодируется в JSON-объект. Страница называет часть, которая не прошла, и причину: символ вне алфавита, байты не в UTF-8 или JSON с ошибкой в указанной строке и столбце. Обычная причина — обрезанный токен или лишние символы.