Ответ
JWT (JSON Web Token) — это компактный и самодостаточный способ передачи информации между сторонами в виде JSON-объекта. Он состоит из трех частей, разделенных точками:
- Header — содержит тип токена и алгоритм шифрования (например, HMAC SHA256).
- Payload — данные (например, user ID, роли, срок действия).
- 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