Skip to main content
CheckTown
Валидаторы

Валидатор JWT: Проверьте структуру и заявки JSON Web Token

Опубликовано 6 мин чтения
В этой статье

Что такое JWT?

JWT (JSON Web Token) — компактный, безопасный для URL формат токена, используемый для безопасной передачи информации между сторонами в виде JSON-объекта. Определённый RFC 7519, JWT является де-факто стандартом аутентификации и авторизации в современных веб-приложениях и API.

JWT самодостаточны — они содержат всю информацию, необходимую для проверки подлинности токена и извлечения пользовательских данных без обращения к базе данных. Это делает их идеальными для аутентификации без сохранения состояния в распределённых системах и архитектурах микросервисов.

Структура JWT

JWT состоит из трёх частей в кодировке Base64URL, разделённых точками: заголовок.данные.подпись.

  • Заголовок — JSON-объект, указывающий тип токена (JWT) и алгоритм подписи (например, HS256, RS256, ES256)
  • Данные — JSON-объект, содержащий утверждения: зарегистрированные утверждения (iss, sub, exp, iat), публичные и приватные утверждения
  • Подпись — создаётся путём подписания закодированного заголовка и данных секретным ключом (HMAC) или приватным ключом (RSA/ECDSA)

Попробуйте бесплатно — без регистрации

Проверить JWT →

Как работает проверка JWT

Валидация JWT включает структурные проверки, верификацию подписи и валидацию утверждений.

  • Проверка структуры — токен должен содержать ровно три сегмента в кодировке Base64URL, разделённых двумя точками
  • Валидация заголовка — заголовок должен содержать действительные поля typ и alg. Алгоритм должен соответствовать тому, что ожидает сервер
  • Верификация подписи — подпись пересчитывается с использованием заголовка, данных и ключа подписи. Если пересчитанная подпись совпадает, токен не был изменён
  • Валидация утверждений — утверждения exp (истечение срока), nbf (не ранее) и iss (эмитент) проверяются относительно текущего времени и ожидаемых значений

Распространённые случаи использования

JWT обеспечивают аутентификацию и авторизацию во всём современном стеке веб-технологий.

  • Аутентификация API — клиенты включают JWT в заголовки Authorization (схема Bearer) для аутентификации API-запросов без сессий
  • Единый вход (SSO) — провайдеры идентификации выдают JWT, принимаемые несколькими приложениями, обеспечивая бесшовную аутентификацию между приложениями
  • Токены доступа OAuth 2.0 — многие реализации OAuth используют JWT в качестве токенов доступа, кодируя области действия и разрешения прямо в токене
  • Взаимодействие микросервисов — сервисы передают JWT для распространения пользовательского контекста и решений авторизации через границы сервисов

Лучшие практики безопасности JWT

JWT мощны, но требуют осторожного обращения, чтобы избежать распространённых проблем безопасности.

  • Всегда проверяйте алгоритм — никогда не позволяйте полю alg из токена диктовать, какой алгоритм использует ваш сервер. Это предотвращает атаку с алгоритмом none
  • Устанавливайте короткие сроки истечения — JWT нельзя отозвать после выдачи. Держите времена exp короткими (15 минут для токенов доступа) и используйте refresh-токены для долгоживущих сессий
  • Используйте асимметричные алгоритмы для распределённых систем — RS256 или ES256 позволяют сервисам проверять токены без обмена секретом подписи
  • Никогда не храните чувствительные данные в полезной нагрузке — JWT кодируются, но не шифруются. Любой может декодировать данные. Храните секреты в базе данных, а не в токене

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

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

Да. Полезные нагрузки JWT закодированы в Base64URL, а не зашифрованы. Любой может декодировать и прочитать заголовок и данные. Секретный ключ нужен только для проверки подписи — для подтверждения того, что токен не был изменён.

В чём разница между JWS и JWE?

JWS (JSON Web Signature) — это то, что большинство людей подразумевают под JWT — подписанный токен. JWE (JSON Web Encryption) — зашифрованный токен, полезная нагрузка которого не может быть прочитана без ключа расшифровки. Большинство JWT — это токены JWS.

Хранить ли JWT в localStorage или cookies?

Cookies HttpOnly более безопасны, так как недоступны через JavaScript (предотвращая XSS-кражу). localStorage уязвим к XSS-атакам. Для чувствительных приложений используйте cookies HttpOnly Secure SameSite.

Похожие инструменты