Комментарии (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
- Stateless — не требует хранения сессии на сервере
- Масштабируемость — подходит для микросервисной архитектуры
- Кроссдоменность — работает с CORS
- Самоопределяемость — содержит всю необходимую информацию
- Безопасность — защищён криптографической подписью
Недостатки JWT
- Невозможно отозвать — токен остаётся валидным до истечения
- Размер — больше, чем простая сессия ID
- Утечка данных — payload не зашифрован (только в Base64)
Частые ошибки
- Хранение секретного ключа — никогда не кладите секрет на клиент
// ❌ Плохо
const token = jwt.sign(data, 'secret-in-code');
// ✅ Хорошо
const token = jwt.sign(data, process.env.JWT_SECRET);
-
Отсутствие проверки подписи — всегда верифицируйте токен.
-
Хранение в localStorage — уязвимо к XSS атакам. Лучше использовать httpOnly cookies:
res.cookie('token', token, {
httpOnly: true,
secure: true,
sameSite: 'strict'
});
- Игнорирование exp — всегда проверяйте истечение срока действия.
JWT — мощный инструмент для аутентификации, но требует правильной реализации для обеспечения безопасности.