Как декодировать и проверять JWT-токены

· 4 мин чтения

JSON Web Tokens (JWT) — это самый распространённый способ управления аутентификацией в современных веб-приложениях. Когда что-то идёт не так с auth — пользователь отключается без причины, права неправильные или API возвращает 401 — декодирование JWT часто является первым шагом отладки.

Что содержит JWT

JWT имеет три части, разделённые точками:

eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiIxMjM0NTY3ODkwIn0.dozjgNryP4J3jVmNHl0w5N_XgL0n3I9PlFUP0THsR8U

Заголовок — содержит алгоритм (HS256, RS256 и т. д.) и тип токена.

{"alg": "HS256", "typ": "JWT"}

Полезная нагрузка — содержит заявления (утверждения) о пользователе и токене.

{"sub": "1234567890", "name": "Alice", "exp": 1700000000}

Подпись — криптографический отпечаток, гарантирующий, что токен не был изменён. Вы не можете прочитать её без ключа подписи.

Распространённые JWT-заявления

Заявление Полное имя Содержимое
sub Subject ID или идентификатор пользователя
exp Expiration Unix-timestamp окончания действия
iat Issued At Unix-timestamp создания
iss Issuer Кто создал токен (ваш auth-сервер)
aud Audience Кому предназначен токен
nbf Not Before Токен не действителен до этой даты
jti JWT ID Уникальный идентификатор токена

Как декодировать JWT

  1. Вставьте ваш токен — введите полный JWT (формат заголовок.нагрузка.подпись) в декодер.
  2. Просмотрите декодированные секции — инструмент отображает заголовок (алгоритм), полезную нагрузку (заявления) и подпись в виде отформатированного JSON.
  3. Проверьте заявления — изучите дату истечения, эмитента, субъекта и любые пользовательские заявления.

Отладка с JWT

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

Неправильные права? Ищите заявления роли или области в полезной нагрузке. Они различаются по реализациям, но часто похожи на "role": "admin" или "scope": "read write".

Проблема с идентичностью пользователя? Заявление sub идентифицирует пользователя. Проверьте, что оно соответствует ожидаемому ID.

Токен отклонён? Проверьте заявление aud (audience). Если API ожидает определённую аудиторию, а у токена другая, он будет отклонён.

Важные заметки безопасности

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

Можно ли проверить подпись JWT с помощью декодера?

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

Безопасно ли вставлять JWT в онлайн-инструмент?

Да, когда инструмент работает в вашем браузере. Браузерные декодеры обрабатывают токен локально — ничего не отправляется на сервер. Избегайте инструментов, которые делают сетевые запросы с вашим токеном.

Что такое заявление exp?

Заявление exp (expiration) — это Unix-timestamp, указывающий, когда токен истекает. После этой даты токен должен быть отклонён. Всегда проверяйте это заявление для отладки проблем аутентификации.

Могут ли JWT быть зашифрованы?

Стандартные JWT (JWS) подписаны, но не зашифрованы — любой может декодировать полезную нагрузку. Токены JWE (JSON Web Encryption) зашифрованы, но менее распространены. Никогда не помещайте конфиденциальные данные (пароли, секреты) в стандартную полезную нагрузку JWT.