Декодер 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 | Время выдачи: когда токен был создан |
jti | ID JWT: уникальный идентификатор для защиты от повторного использования |
Распространённые значения alg
| Значение alg | Значение |
|---|---|
HS256 | HMAC с SHA-256; один общий секрет и подписывает, и проверяет |
RS256 | Подпись RSA PKCS#1 v1.5 с SHA-256; закрытый ключ подписывает, открытый проверяет |
PS256 | RSA-PSS с SHA-256 |
ES256 | ECDSA на кривой 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, если сервер не ведёт список отзыва или не проверяет запись о сессии, поэтому токенам доступа обычно задают короткий срок жизни.