Menu
Русский

Декодер JWT

Разбирайте и проверяйте JSON Web Tokens по частям.

Последнее обновление

Алгоритм
ЗакодированоВставьте JSON Web Token
Декодировано
Заголовок и полезная нагрузка появятся здесь — токены не покидают ваш браузер.

Что такое JWT-декодер?

JWT-декодер разбивает JSON Web Token на три части — header, payload и signature — и декодирует первые две из Base64URL, чтобы вы увидели обычный JSON. Это инструмент, к которому постоянно возвращаешься при отладке логина, авторизации, claim'ов сессии и проблем с истечением токена.

Декодировать JWT — это *не* то же самое, что ему доверять. Header и payload читаются по задумке: они только закодированы в Base64URL, а не зашифрованы. Проверка подлинности (verification) — отдельный шаг, на котором вы убеждаетесь, что токен действительно подписан нужной стороной и не был изменён.

JWT выглядит как header.payload.signature. Каждая часть закодирована в Base64URL и отделена точкой. В header указан алгоритм подписи, в payload — claim'ы (кто пользователь, когда токен истекает, что ему разрешено), а подпись позволяет серверу убедиться, что токен не подменили.

Что вы поймёте, разбирая JWT

  • JWT состоит из трёх частей в Base64URL, разделённых точками: header.payload.signature.
  • Стандартные claim'ы вроде sub, role, iat, nbf и exp описывают пользователя, права, время выпуска и время истечения.
  • Декодированный payload может изменить кто угодно — обнаружить подмену помогает только подпись.

Как декодировать JWT по шагам

  1. Вставьте токен целиком

    Вставьте JWT в поле ввода. Он должен иметь вид xxxx.yyyy.zzzz — три части в Base64URL, соединённые точками.

  2. Прочитайте header

    Header показывает алгоритм подписи (alg) и тип токена. Будьте внимательны к "alg": "none" — это значит, что токен не подписан и доверять ему нельзя.

  3. Разберите claim'ы из payload

    Payload — это JSON со всеми claim'ами. Ищите sub (id пользователя), exp (срок действия), iat (когда выпущен), а также свои поля приложения, например role или tenant.

  4. Проверьте срок действия

    Переведите Unix-время из exp в дату — если оно уже в прошлом, токен просрочен, и нормальный API его отвергнет.

  5. Проверьте подпись (опционально)

    Если у вас есть секрет или публичный ключ, вставьте его в верификатор, чтобы убедиться, что подпись валидна. Содержимому токена можно доверять только после успешной проверки подписи.

Стандартные claim'ы JWT

Это зарегистрированные claim'ы из спецификации JWT (RFC 7519). Любое приложение может добавлять рядом и свои собственные.

ClaimНазваниеЧто означает
issIssuerКто выпустил и подписал токен
subSubjectО ком токен — обычно id пользователя
audAudienceКому предназначен токен
expExpirationUnix-время, после которого токен уже недействителен
nbfNot BeforeРаньше этого времени токен принимать нельзя
iatIssued AtКогда токен был создан
jtiJWT IDУникальный идентификатор — полезен при отзыве токенов
algAlgorithm (header)Алгоритм подписи: HS256, RS256, ES256, …

Примеры JWT для практики

Разбор типового JWT

Токен

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJ1c2VyXzEyMyIsInJvbGUiOiJzdHVkZW50IiwiZXhwIjoxNzEwMDAwMDAwfQ.Q3hH8yzqI2OsHJ1Lyj8jJfJPa5ZpIVlh1FhJpJbqMcs

Header
{  "alg": "HS256",  "typ": "JWT"}
Payload
{  "sub": "user_123",  "role": "student",  "exp": 1710000000}

В header указан HS256 — алгоритм с общим секретом. В payload — id пользователя, его роль и время истечения токена. Третья часть — подпись. (Это демонстрационный токен; его подпись ни с каким реальным секретом не сойдётся.)

Проверяем, не истёк ли токен

Claim из payload
{  "exp": 1710000000}

exp — это Unix-время в секундах. Переведите его в дату: если она в прошлом, токен просрочен, и корректный бэкенд его не примет.

Замечаем опасный алгоритм "none"

Header
{  "alg": "none",  "typ": "JWT"}

Если сервер принимает "alg": "none", злоумышленник может подделать любой payload вообще без подписи. В продакшене такой header нужно отвергать всегда.

Частые ошибки при работе с JWT

  • Класть в payload пароли, секреты или чувствительные персональные данные. JWT не зашифрован — он просто читается.
  • Декодировать токен и считать его валидным, не проверив подпись.
  • Путать «удобочитаемость Base64URL» с шифрованием — payload JWT и должен легко читаться.

FAQ по JWT

Что такое JWT?
JWT расшифровывается как JSON Web Token. Это компактный подписанный URL-safe формат токена, в котором передают claim'ы между двумя сторонами — чаще всего между сервером и браузером, чтобы представлять авторизованного пользователя.
Как декодировать JWT?
Вставьте токен в JWT-декодер или разбейте его по точкам и декодируйте первые две части из Base64URL. Header и payload вернутся в виде JSON, третья часть — это подпись.
Как проверить, не истёк ли JWT?
Посмотрите на claim exp в payload — это Unix-время в секундах. Если текущее время больше exp, токен просрочен.
Может ли любой человек прочитать JWT?
Да. Header и payload только закодированы в Base64URL, а не зашифрованы. Подпись лишь подтверждает, что токен не изменили — содержимое она не скрывает.
Что значит «верификация JWT»?
Верификация — это пересчёт подписи с помощью ожидаемого секрета или публичного ключа и сравнение её с подписью токена. Если они совпадают, payload можно считать достоверным и неизменённым.
Можно ли хранить пароли в JWT?
Нет. У всех, у кого есть токен, есть и доступ к payload. Кладите туда только нечувствительные идентификаторы и claim'ы, а безопасность обеспечивайте короткими сроками жизни и refresh-токенами.

Узнать больше

Другие инструменты разработчика

Учитесь программировать с Coddy

НАЧАТЬ