В этой статье
Что такое JWT?
JSON Web Token (JWT) — это компактный, безопасный для URL формат токенов, используемый для безопасной передачи информации между сторонами в виде JSON-объекта. JWT состоит из трёх частей, закодированных в Base64URL и разделённых точками: заголовок.полезная-нагрузка.подпись.
JWT обеспечивают аутентификацию без сохранения состояния — серверу не нужно хранить данные сессии, поскольку вся необходимая информация встроена в сам токен.
Структура JWT
Каждый JWT состоит из трёх отдельных частей:
- Заголовок (Header) — JSON-объект, указывающий тип токена (typ: JWT) и алгоритм подписи (alg: HS256, RS256 и т.д.)
- Полезная нагрузка (Payload) — JSON-объект с утверждениями: iss (издатель), sub (субъект), exp (срок действия), iat (дата выпуска) и пользовательские данные
- Подпись (Signature) — создаётся путём подписания закодированных заголовка и полезной нагрузки секретным ключом (HMAC) или приватным ключом (RSA/ECDSA)
Полезная нагрузка не зашифрована — любой может её декодировать и прочитать. Никогда не храните конфиденциальные данные в полезной нагрузке JWT.
Алгоритмы подписи
Выбор алгоритма подписи определяет способ создания и проверки подписи JWT:
- HMAC (HS256, HS384, HS512) — симметричные алгоритмы, использующие один и тот же секретный ключ для подписи и проверки
- RSA (RS256, RS384, RS512) — асимметричные алгоритмы, использующие приватный ключ для подписи и публичный для проверки
- ECDSA (ES256, ES384, ES512) — асимметричные алгоритмы на основе криптографии эллиптических кривых
Для большинства веб-приложений HS256 достаточно. Выбирайте RS256 или ES256, когда токены должны проверяться третьими сторонами.
Попробуйте бесплатно — без регистрации
Создать и подписать JWT →Кодирование и декодирование
Кодирование JWT означает создание нового токена путём сборки заголовка, полезной нагрузки и генерации подписи с помощью секретного или приватного ключа.
Декодирование JWT может означать извлечение утверждений без проверки подписи или полную проверку подписи. Производственные системы всегда должны проверять подпись.
Распространённые варианты использования
JWT стали стандартом для современной аутентификации и авторизации:
- Аутентификация API — клиенты включают JWT в заголовок Authorization (Bearer token)
- Токены доступа OAuth 2.0 — провайдеры OAuth выдают JWT как токены доступа
- Коммуникация между микросервисами — сервисы передают JWT для распространения идентичности пользователя
- Единый вход (SSO) — центральный провайдер идентичности выдаёт JWT, принимаемый несколькими приложениями
Лучшие практики безопасности
JWT мощны, но требуют тщательной реализации:
- Устанавливайте короткие сроки действия
- Никогда не храните конфиденциальные данные в полезной нагрузке
- Всегда проверяйте все утверждения
- Используйте исключительно HTTPS
- Отклоняйте алгоритм "none"
Часто задаваемые вопросы
В чём разница между JWT и сессионными cookie?
Сессионные cookie хранят идентификатор сессии на клиенте, а данные сессии — на сервере. JWT автономны — все данные содержатся в самом токене.
Как отозвать JWT до истечения срока?
Поскольку JWT не сохраняют состояние, встроенного механизма отзыва нет. Распространённые стратегии включают чёрные списки токенов и ротацию токенов обновления.
Есть ли ограничение размера JWT?
Формального ограничения нет, но практические лимиты существуют. Рекомендуется держать токены менее 4 КБ.