JSON Web Токены (JWT) представляют собой компактный и безопасный способ представления утверждений между двумя сторонами. Они широко используются для аутентификации и авторизации в современных веб-приложениях. Вместо хранения данных сессии на сервере, JWT позволяет осуществлять бесстатную аутентификацию, кодируя информацию о пользователе непосредственно в токен.
Структура Токена
Токен JWT состоит из трех частей, закодированных в Base64URL и разделенных точками: заголовок, полезная нагрузка и подпись.
- Заголовок: Определяет тип токена и алгоритм подписи.
- Полезная нагрузка: Содержит утверждения — заявления об пользователе и дополнительные метаданные.
- Подпись: Обеспечивает целостность токена и гарантирует, что он не был изменен.
Общие Утверждения
Существует несколько общих утверждений, которые используются в токенах JWT:
- iss: Издатель
- sub: Субъект (ID пользователя)
- exp: Время истечения срока действия
- iat: Время создания
- aud: Аудитория
Принцип Работы Аутентификации JWT
Типичный процесс аутентификации с помощью JWT включает в себя следующие шаги:
- Пользователь отправляет учетные данные (имя пользователя и пароль) на сервер.
- Сервер проверяет учетные данные и генерирует токен JWT.
- Клиент хранит токен JWT (обычно в памяти или в cookie с флагом httpOnly).
- При каждом последующем запросе клиент отправляет токен JWT в заголовке Authorization.
- Сервер проверяет подпись токена и извлекает данные пользователя из полезной нагрузки.
Создание и Верификация Токенов в Node.js
Чтобы работать с токенами JWT в Node.js, необходимо установить пакет jsonwebtoken.
const jwt = require('jsonwebtoken');
const SECRET = process.env.JWT_SECRET || 'your-secret-key';
function generateToken(user) {
const payload = {
sub: user.id,
name: user.name,
role: user.role
};
return jwt.sign(payload, SECRET, { expiresIn: '1h', issuer: 'myapp.com' });
}
const token = generateToken({ id: 42, name: 'Alice', role: 'admin' });
console.log('Token:', token);
function verifyToken(token) {
try {
const decoded = jwt.verify(token, SECRET);
console.log('Данные пользователя:', decoded);
} catch (error) {
console.error('Ошибка верификации токена:', error);
}
}
Эта статья предоставляет полное руководство по токенам JSON Web и их использованию в аутентификации и авторизации веб-приложений.