Разбирайте и проверяйте JSON Web Tokens по частям.
Последнее обновление
Алгоритм—
ЗакодированоВставьте JSON Web Token
header.payload.signature
Декодировано
Заголовок и полезная нагрузка появятся здесь — токены не покидают ваш браузер.
Что такое 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
Название
Что означает
iss
Issuer
Кто выпустил и подписал токен
sub
Subject
О ком токен — обычно id пользователя
aud
Audience
Кому предназначен токен
exp
Expiration
Unix-время, после которого токен уже недействителен
nbf
Not Before
Раньше этого времени токен принимать нельзя
iat
Issued At
Когда токен был создан
jti
JWT ID
Уникальный идентификатор — полезен при отзыве токенов
В 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-токенами.