СтатьиКаталог

Что такое JWT токен: структура, claims и примеры использования

Подробное руководство по JSON Web Token (JWT): структура токена, стандартные claims, алгоритмы подписи, примеры использования в аутентификации и авторизации.

🔐 Инструмент: Используйте наш JWT декодер и генератор для анализа и создания токенов онлайн.

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

Структура JWT токена

JWT состоит из трёх частей, разделённых точками: Header.Payload.Signature. Каждая часть закодирована в Base64URL — модифицированной версии Base64, безопасной для использования в URL.

Header (Заголовок)

Заголовок содержит метаданные о токене: тип токена и алгоритм подписи.

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

Распространённые алгоритмы:

  • HS256 — HMAC с SHA-256, симметричный алгоритм (один секретный ключ)
  • RS256 — RSA с SHA-256, асимметричный (приватный и публичный ключи)
  • ES256 — ECDSA с SHA-256, асимметричный на эллиптических кривых

Payload (Полезная нагрузка)

Payload содержит claims (утверждения) — данные о пользователе и дополнительную информацию.

{
  "sub": "1234567890",
  "name": "John Doe",
  "email": "john@example.com",
  "role": "admin",
  "iat": 1516239022,
  "exp": 1516242622
}

Signature (Подпись)

Подпись создаётся путём кодирования Header и Payload, а затем подписания секретным ключом:

HMACSHA256(
  base64UrlEncode(header) + "." + base64UrlEncode(payload),
  secret
)

Подпись гарантирует, что токен не был изменён после создания.

Стандартные Claims (Registered Claims)

Спецификация JWT определяет набор стандартных claims:

ClaimНазваниеОписание
issIssuerИздатель токена (URL или идентификатор сервиса)
subSubjectСубъект токена (обычно ID пользователя)
audAudienceАудитория — для кого предназначен токен
expExpirationВремя истечения (Unix timestamp)
nbfNot BeforeВремя, до которого токен недействителен
iatIssued AtВремя создания токена
jtiJWT IDУникальный идентификатор токена

Примеры использования JWT

Аутентификация в API

Наиболее распространённый сценарий — передача токена в заголовке Authorization. Сервер проверяет подпись и извлекает данные пользователя из Payload без обращения к базе данных.

Single Sign-On (SSO)

JWT позволяет реализовать единую точку входа для нескольких приложений. После аутентификации в Identity Provider пользователь получает токен, который принимается всеми связанными сервисами.

Микросервисная архитектура

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

Безопасность JWT

Что нужно помнить

  • Payload не зашифрован — данные лишь закодированы в Base64, любой может их прочитать. Не храните в JWT пароли, номера карт и другие секретные данные.
  • Используйте HTTPS — токен передаётся в открытом виде, без TLS его можно перехватить.
  • Устанавливайте короткий срок действия — рекомендуется exp от 15 минут до нескольких часов.
  • Храните токены безопасно — на клиенте используйте httpOnly cookies вместо localStorage.
  • Используйте сильные ключи — для HS256 минимум 256 бит (32 символа).

Отзыв токенов

JWT по своей природе stateless — сервер не хранит информацию о выданных токенах. Для отзыва используют чёрные списки токенов в Redis, короткий срок жизни access-токена + refresh-токен для обновления, или версионирование токенов через claim с номером версии.

JWT vs Session

КритерийJWTСессии
Хранение состоянияStateless (на клиенте)Stateful (на сервере)
МасштабированиеЛегко (нет общего состояния)Сложнее (нужен shared storage)
Отзыв доступаСложнееПросто удалить сессию
РазмерБольше (содержит данные)Меньше (только ID)
Кросс-доменностьЛегкоТребует настройки

Пример декодирования на JavaScript

function decodeJwt(token) {
  const parts = token.split('.');
  if (parts.length !== 3) {
    throw new Error('Invalid JWT format');
  }
  
  // Decode header and payload
  const header = JSON.parse(atob(parts[0]));
  const payload = JSON.parse(atob(parts[1]));
  
  return { header, payload, signature: parts[2] };
}

// Использование
const token = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...';
const { header, payload } = decodeJwt(token);

console.log('Algorithm:', header.alg);
console.log('User ID:', payload.sub);
console.log('Expires:', new Date(payload.exp * 1000));

Заключение

JWT — мощный инструмент для аутентификации в современных приложениях. Он обеспечивает stateless-архитектуру, легко масштабируется и хорошо подходит для API и микросервисов. Однако важно понимать его ограничения: данные в Payload не зашифрованы, а отзыв токена требует дополнительной логики.

Для анализа и создания JWT токенов используйте наш онлайн JWT декодер — он работает полностью в браузере и не отправляет ваши данные на сервер.

Краткое резюме

Подробное руководство по JSON Web Token (JWT): структура токена, стандартные claims, алгоритмы подписи, примеры использования в аутентификации и авторизации.