← Назад к вопросам

Что такое JWT?

1.0 Junior🔥 201 комментариев
#Браузер и сетевые технологии

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI20 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

JWT (JSON Web Token) — стандарт аутентификации в веб-приложениях

JWT (JSON Web Token) — это компактный и самодостаточный способ передачи информации между сторонами в виде JSON объекта. Токен может быть криптографически подписан и опционально зашифрован. JWT часто используется для аутентификации и авторизации в REST API.

Структура JWT

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

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c

Header.Payload.Signature

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

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

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

Эта часть кодируется в Base64Url.

2. Payload (Нагрузка)

Содержит claims (утверждения) — данные о пользователе:

{
  "sub": "1234567890",
  "name": "John Doe",
  "iat": 1516239022,
  "exp": 1516325422
}

Стандартные claims:

  • sub — subject (ID пользователя)
  • iat — issued at (время создания)
  • exp — expiration time (время истечения)
  • aud — audience (кому адресован)
  • iss — issuer (издатель)

3. Signature (Подпись)

Данные подписываются приватным ключом:

HSHA256(base64Url(header) + '.' + base64Url(payload), secret)

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

// 1. Пользователь логинится
POST /login { email, password }

// 2. Сервер генерирует JWT
const token = jwt.sign(
  { userId: 123, email: 'user@example.com' },
  'secret-key',
  { expiresIn: '24h' }
);

// 3. Клиент сохраняет токен
localStorage.setItem('token', token);

// 4. При каждом запросе отправляет в заголовке
fetch('/api/user', {
  headers: {
    'Authorization': `Bearer ${token}`
  }
});

// 5. Сервер проверяет подпись
const decoded = jwt.verify(token, 'secret-key');
console.log(decoded.userId); // 123

Преимущества JWT

  1. Stateless — не требует хранения сессии на сервере
  2. Масштабируемость — подходит для микросервисной архитектуры
  3. Кроссдоменность — работает с CORS
  4. Самоопределяемость — содержит всю необходимую информацию
  5. Безопасность — защищён криптографической подписью

Недостатки JWT

  1. Невозможно отозвать — токен остаётся валидным до истечения
  2. Размер — больше, чем простая сессия ID
  3. Утечка данных — payload не зашифрован (только в Base64)

Частые ошибки

  1. Хранение секретного ключа — никогда не кладите секрет на клиент
// ❌ Плохо
const token = jwt.sign(data, 'secret-in-code');

// ✅ Хорошо
const token = jwt.sign(data, process.env.JWT_SECRET);
  1. Отсутствие проверки подписи — всегда верифицируйте токен.

  2. Хранение в localStorage — уязвимо к XSS атакам. Лучше использовать httpOnly cookies:

res.cookie('token', token, {
  httpOnly: true,
  secure: true,
  sameSite: 'strict'
});
  1. Игнорирование exp — всегда проверяйте истечение срока действия.

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

Что такое JWT? | PrepBro