UltKit
Изображения11
PDF13
Документы и данные7
Видео6
Аудио4
Другие инструменты22

Декодер JWT

Вставьте JSON Web Token, и вы увидите его заголовок и payload в виде отформатированного JSON, время выпуска и окончания срока действия в виде дат, а также пометку о том, действителен ли токен сейчас. Декодирование полностью выполняется в вашем браузере. Это важно, если токен является действующими учетными данными.

Символов: 0 · слов: 0 · строк: 0

Символов: 0 · слов: 0 · строк: 0

Всё работает в этой вкладке браузера. Ваш текст никуда не загружается и не сохраняется.

Зарегистрированные поля (claims)

Семь имён полей, определённых в RFC 7519 §4.1. Все необязательны; время указывается в секундах с 1970-01-01 UTC.

Поле (claim)Значение
issИздатель: кто создал и подписал токен
subСубъект: пользователь или сущность, к которой относится токен
audАудитория: для кого предназначен токен
expВремя истечения: отклонять токен после этого момента
nbfНе раньше: отклонять токен до этого момента
iatВремя выдачи: когда токен был создан
jtiID JWT: уникальный идентификатор для защиты от повторного использования

Распространённые значения alg

Значение algЗначение
HS256HMAC с SHA-256; один общий секрет и подписывает, и проверяет
RS256Подпись RSA PKCS#1 v1.5 с SHA-256; закрытый ключ подписывает, открытый проверяет
PS256RSA-PSS с SHA-256
ES256ECDSA на кривой P-256 с SHA-256; короткие подписи
EdDSAПодписи Ed25519 или Ed448
noneНеподписанный токен; серверы должны его отклонять

Из чего состоит JSON Web Token

JWT описан в RFC 7519 (май 2015 года), где предлагается произносить его как английское слово «jot». Обычная подписанная форма — это три строки Base64url, соединённые точками: header.payload.signature. Заголовок (header) указывает в поле alg алгоритм подписи, например HS256 или RS256, и часто идентификатор ключа в kid. Полезная нагрузка (payload) содержит claims — JSON-поля, такие как sub (пользователь), iss (издатель), aud (предполагаемая аудитория), а также exp, nbf и iat — время в секундах с 1 января 1970 года UTC. Декодер переводит эти три значения в ваше местное время и в формат ISO 8601 и сообщает, истёк ли токен, ещё не действует или находится в пределах срока действия.

Base64url — это кодирование, а не шифрование, поэтому любой, у кого есть токен, может прочитать его payload так же, как это делает эта страница. Никогда не помещайте в claims пароли, номера карт и другие секреты. Токен из пяти частей, разделённых точками, — это JWE, зашифрованный токен: без ключа его содержимое прочитать нельзя, и декодер сообщает об этом. Префикс «Bearer », скопированный из заголовка Authorization, удаляется автоматически.

Почему подпись здесь не проверяется

Подпись доказывает, что заголовок и payload созданы тем, у кого есть ключ, и с тех пор не менялись. Для проверки нужен этот ключ: общий секрет для HMAC-алгоритмов вроде HS256 или открытый ключ издателя для RS256, ES256 или EdDSA. Вставлять рабочий секрет подписи на любую веб-страницу — плохая идея, а декодер, который без ключа делал бы вид, что ручается за токен, создавал бы ложное чувство надёжности, поэтому этот инструмент показывает подпись, но не проверяет её. Относитесь к увиденному как к утверждению самого токена, а не как к факту.

Проверка должна выполняться на вашем сервере с помощью поддерживаемой библиотеки с жёстко заданным ожидаемым алгоритмом. Это объясняют две известные ошибки: приём alg «none», позволяющий любому подделать неподписанный токен, и подмена алгоритма, когда сервер, ожидающий RS256, обманом заставляют проверить подпись HS256, используя открытый ключ как секрет HMAC. Декодер нужен для отладки: посмотреть, какие claims выдаёт провайдер, заметить неверную аудиторию или выяснить, что сессия оборвалась, потому что exp истёк минуту назад. Чтобы прочитать сегменты Base64url как есть, воспользуйтесь декодером Base64.

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

Безопасно ли вставлять настоящий access-токен в декодер JWT?
На этой странице токен не покидает ваш браузер. Тем не менее действующий токен работает как пароль до истечения срока, поэтому лучше использовать истёкшие или тестовые токены и не выкладывать рабочие в скриншоты и чаты.
Почему токен отображается как истекший, хотя его только что выпустили?
Сначала проверьте часы на устройстве. Некоторые издатели выдают токены доступа со сроком жизни всего в несколько минут, а токен, скопированный из лога, может быть старше, чем кажется. Значение exp, записанное в миллисекундах вместо секунд, даёт обратный эффект: дата уходит на тысячи лет вперёд.
Может ли кто-то изменить payload моего JWT?
Они могут изменить и заново закодировать токен, но подпись перестанет совпадать. Сервер, который проверяет подписи с правильным ключом и алгоритмом, отклонит изменённый токен.
Чем JWS отличается от JWE?
JWS (RFC 7515) подписан, состоит из трёх частей, и прочитать его может любой. JWE (RFC 7516) зашифрован, состоит из пяти частей, и прочитать payload может только владелец ключа.
Делает ли выход из аккаунта JWT недействительным?
Сам по себе — нет. Подписанный JWT остаётся действительным до exp, если сервер не ведёт список отзыва или не проверяет запись о сессии, поэтому токенам доступа обычно задают короткий срок жизни.