Что такое JWT

Ответ

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

  1. Header — содержит тип токена и алгоритм шифрования (например, HMAC SHA256).
  2. Payload — данные (например, user ID, роли, срок действия).
  3. Signature — подпись для проверки подлинности токена.

Пример структуры:

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

// Payload
{
  "sub": "1234567890",
  "name": "John Doe",
  "iat": 1516239022
}

Используется для аутентификации и обмена данными. После успешного входа сервер генерирует JWT и отправляет клиенту. Клиент сохраняет токен (например, в localStorage) и отправляет его в заголовке Authorization: Bearer <token> при последующих запросах.

Плюсы:

  • Не требует хранения состояния на сервере (stateless).
  • Можно подписать (JWS) или зашифровать (JWE).

Минусы:

  • Если токен украден, злоумышленник может им воспользоваться (нужны короткие сроки жизни + refresh-токены).
  • Размер больше, чем у session ID.

Пример кода для создания/верификации (Node.js + библиотека jsonwebtoken):

const jwt = require('jsonwebtoken');
const token = jwt.sign({ userId: 123 }, 'secret-key', { expiresIn: '1h' });
const decoded = jwt.verify(token, 'secret-key'); // throws error if invalid