Декодер JWT

Вставьте JSON Web Token, чтобы увидеть его заголовок и полезную нагрузку в виде отформатированного JSON, время exp, iat и nbf в виде дат, а также узнать, не истёк ли срок действия токена. Подпись можно проверить локально с помощью секретного или открытого ключа.

Заголовок

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

Утверждения

Подпись

Проверить подпись

Работает полностью в браузере. Данные никуда не загружаются.

Как пользоваться

  1. Вставьте токен целиком: три части в Base64URL, разделённые точками.
  2. Изучите декодированные заголовок и полезную нагрузку. Утверждения exp, iat и nbf показаны в виде дат, а если срок действия токена истёк или ещё не наступил, появится предупреждение.
  3. Чтобы проверить подпись, введите общий секрет в поле «Секретный ключ» для HS256, HS384 или HS512 либо вставьте открытый ключ PEM в поле «Открытый ключ (PEM, SPKI)» для алгоритмов RS, PS или ES.
  4. Убедитесь, что утверждения об издателе, получателе и субъекте соответствуют ожиданиям вашего приложения.

Как устроен JWT

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

  • Заголовок: алгоритм подписи в поле alg, обычно "typ": "JWT" и часто kid с идентификатором ключа.
  • Полезная нагрузка: утверждения, например о том, кто пользователь, кто выдал токен и когда истекает срок его действия.
  • Подпись: подпись HMAC, RSA или ECDSA, которая доказывает, что заголовок и полезная нагрузка не изменялись.

Токен из пяти частей — это зашифрованный JWE; его содержимое нельзя прочитать без ключа расшифровки.

Зарегистрированные утверждения

УтверждениеНазваниеЗначение
issИздательКто создал и подписал токен
subСубъектК кому относится токен, обычно идентификатор пользователя
audПолучательСервис, для которого предназначен токен
expВремя истеченияПосле этого момента токен нужно отклонять
nbfНе ранееДо этого момента токен нужно отклонять
iatВремя выдачиКогда токен был создан
jtiИдентификатор JWTУникальный идентификатор для обнаружения повторного использования

Время задаётся значениями NumericDate: это секунды, прошедшие с 1 января 1970 года UTC, а не миллисекунды. Декодер показывает их в виде понятных дат и сравнивает с часами вашего устройства.

Декодирование — это не проверка

Декодировать JWT может кто угодно, потому что полезная нагрузка только закодирована, а не зашифрована; никогда не помещайте в неё пароли и другие секреты. Доверять токену можно только после проверки подписи правильным ключом, а сервер, принимающий токены, также должен:

  • разрешать только ожидаемый алгоритм и отклонять "alg": "none" — так обозначается неподписанный токен;
  • никогда не позволять заголовку токена выбирать между HMAC и RSA, иначе злоумышленник сможет подписать поддельный токен вашим открытым ключом, использовав его как секрет HMAC;
  • проверять exp, nbf, iss и aud при каждом запросе.

Необязательная проверка на этой странице использует встроенный в браузер Web Crypto API. Декодирование и проверка выполняются на вашем устройстве, и ничего никуда не загружается. И общее правило: никогда не вставляйте рабочие ключи подписи и действующие токены на сайты, которым вы не доверяете.

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

Безопасно ли вставлять JWT в этот декодер?

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

Можно ли декодировать JWT без секретного ключа?

Да. Заголовок и полезная нагрузка — это обычный JSON в кодировке Base64URL, поэтому их можно прочитать без всякого ключа. Секретный или открытый ключ нужен только для проверки подписи.

Почему декодер сообщает, что срок действия моего токена истёк?
Время в утверждении exp уже прошло по часам вашего устройства. Если токен должен быть ещё действителен, проверьте системные часы и срок жизни токена, настроенный издателем.
Какие алгоритмы подписи можно проверить?

HS256, HS384 и HS512 с общим секретным ключом, а также RS256, RS384, RS512, PS256, PS384, PS512, ES256, ES384 и ES512 с открытым ключом в формате PEM.

Что означает "alg": "none"?

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