JWT (JSON Web Token)
JWT — это открытый стандарт (RFC 7519) для создания компактных, URL-безопасных токенов, которые содержат JSON данные между сторонами.
Структура JWT
JWT состоит из трех частей, разделенных точками:
- Header — заголовок с информацией о типе токена
- Payload — полезная нагрузка с claims
- Signature — подпись для верификации
Пример JWT
Стандартные Claims
- iss — issuer (издатель)
- sub — subject (субъект)
- aud — audience (аудитория)
- exp — expiration time (время истечения)
- nbf — not before (не раньше чем)
- iat — issued at (время выпуска)
- jti — JWT ID (уникальный идентификатор)
Создание JWT в Node.js
1const jwt = require('jsonwebtoken');
2
3// Создание токена
4const payload = {
5 userId: 123,
6 username: 'john_doe',
7 role: 'user'
8};
9
10const secret = 'your-secret-key';
11const token = jwt.sign(payload, secret, {
12 expiresIn: '1h',
13 issuer: 'your-app'
14});
15
16// Верификация токена
17try {
18 const decoded = jwt.verify(token, secret);
19 console.log(decoded);
20} catch (error) {
21 console.log('Invalid token:', error.message);
22}
Установка библиотеки
Преимущества JWT
- Stateless — не требует хранения на сервере
- Компактность — URL-безопасный формат
- Самодостаточность — содержит всю необходимую информацию
- Кроссплатформенность — поддержка многих языков
Недостатки JWT
- Невозможность отзыва без дополнительной логики
- Размер больше чем у session ID
- Чувствительность к утечке секретного ключа
FAQ
Где хранить JWT на клиенте?
localStorage прост, но уязвим для XSS. httpOnly cookies безопаснее, но требуют защиты от CSRF.