Декодер / проверка JWT

Декодируйте header и payload JWT, проверьте его подпись и узнайте, когда он истекает.

Токен

Что такое JSON Web Token

JSON Web Token (JWT) — это компактный, самодостаточный способ переносить набор claims — утверждений вроде «это пользователь 42» или «этот токен истекает в полдень» — в проверяемой форме. JWT повсеместны в современной аутентификации: после входа сервер часто выдаёт вашему браузеру подписанный JWT, и каждый последующий запрос включает его, чтобы сервер мог доверять тому, кто вы, ничего не запрашивая. Поскольку токен несёт собственные claims и подпись, его называют «не хранящим состояние» (stateless).

JWT — это три части в кодировке Base64URL, соединённые точками: header.payload.signature. Этот инструмент разделяет и декодирует эти части за вас, показывает claims в читаемом виде и — если вы предоставите ключ подписи — проверяет подлинность подписи.

Три части

  • Header: описывает, как подписан токен, прежде всего алгоритм («alg», например HS256 или RS256) и тип токена.
  • Payload: сами claims — объект JSON с полями вроде sub (субъект/пользователь), exp (истечение), iat (выпущен) и любыми пользовательскими данными, добавленными издателем.
  • Signature: криптографическое значение, вычисленное по header и payload с помощью секрета или закрытого ключа. Именно оно делает JWT надёжным: измените один символ в payload — и подпись перестанет совпадать.

Крайне важно: header и payload только закодированы, но не зашифрованы. Любой, у кого есть токен, может их прочитать. Подпись не скрывает содержимое — она доказывает, что его не подменяли. Никогда не помещайте пароли или секреты в payload JWT.

Проверка подписи

Декодирование JWT говорит, что он утверждает; проверка говорит, стоит ли этим утверждениям верить. Проверка заново вычисляет подпись по header и payload с помощью ключа и сверяет совпадение. Есть два семейства алгоритмов, и они используют разные виды ключей:

  • HMAC (HS256, HS384, HS512): симметричная схема. Один и тот же общий секрет и подписывает, и проверяет. Укажите этот секрет для проверки.
  • RSA и ECDSA (RS256, PS256, ES256 и родственные): асимметричные схемы. Закрытый ключ подписывает, а открытый проверяет. Укажите открытый ключ в формате PEM для проверки — закрытый ключ никогда не нужен только для того, чтобы проверить токен.

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

Чтение стандартных claims

Несколько имён claim стандартизированы (их называют «registered claims»). Инструмент подписывает их и преобразует временные из «сырых» отметок времени Unix в ваше местное время, с понятным статусом, чтобы вы с первого взгляда видели, действителен ли токен, истёк или ещё не вступил в силу:

  • exp — время истечения: после этого момента токен следует отклонять.
  • nbf — not before: токен недействителен до этого момента.
  • iat — issued at: когда токен был создан.
  • iss — issuer: кто создал токен.
  • sub — subject: о ком или о чём токен (часто идентификатор пользователя).
  • aud — audience: для кого предназначен токен.
  • jti — уникальный идентификатор токена.

Частые вопросы

Отправляются ли мой токен или ключ куда-либо?
Нет. Декодирование и проверка подписи выполняются целиком в вашем браузере с помощью Web Crypto API. Токен, секрет и открытый ключ никогда не покидают ваше устройство, поэтому безопасно изучать рабочие токены.
Какие алгоритмы подписи он может проверять?
HMAC (HS256, HS384, HS512) с общим секретом, а также RSA (варианты RS и PS) и ECDSA (ES256, ES384) с открытым ключом в формате PEM. Алгоритм определяется автоматически из header токена.
Зашифрован ли JWT?
Нет. Стандартный подписанный JWT только закодирован, но не зашифрован — любой может прочитать его header и payload. Подпись доказывает, что токен не изменяли, но не скрывает содержимое, поэтому никогда не храните секреты в payload.
Нужен ли закрытый ключ для проверки токена RS256?
Нет. Асимметричные алгоритмы проверяют с помощью открытого ключа. Закрытый ключ нужен только для создания (подписания) токена, но никогда для его проверки.
Почему мой токен отображается как истёкший?
Claim exp находится в прошлом относительно часов вашего устройства. Инструмент преобразует exp, nbf и iat в ваше местное время и показывает статус, чтобы вы с первого взгляда подтвердили окно действия токена.
В чём разница между HS256 и RS256?
HS256 симметричен: один общий секрет и подписывает, и проверяет, что проще всего, когда обе операции выполняет одна сторона. RS256 асимметричен: закрытый ключ подписывает, а открытый проверяет, что позволяет многим сторонам проверять токены, не имея возможности их подделать.
Можно ли изменить payload и переподписать токен?
Этот инструмент работает только на чтение: он декодирует и проверяет, но не создаёт и не переподписывает токены. Это сохраняет его сфокусированность и избавляет от работы с закрытыми ключами подписи.