Этот вопрос проверяет понимание механизма проверки подлинности JSON Web Tokens на стороне сервера, что необходимо для обеспечения безопасности API.
JSON Web Token (JWT) — это популярный стандарт для безопасной передачи утверждений между сторонами. После того как клиент получает токен (например, после входа в систему), он отправляет его серверу в заголовке Authorization: Bearer <token>. Задача сервера — убедиться, что этот токен подлинный, не был изменён и всё ещё действителен.
Проверка обычно состоит из следующих шагов:
exp (expiration time) — токен не просрочен.nbf (not before) — токен уже активен.iss (issuer) — издатель соответствует ожидаемому.aud (audience) — токен предназначен для этого сервиса.const jwt = require('jsonwebtoken');
const SECRET_KEY = 'your-secret-key';
function verifyToken(req, res, next) {
// 1. Извлечение токена из заголовка
const authHeader = req.headers.authorization;
if (!authHeader || !authHeader.startsWith('Bearer ')) {
return res.status(401).json({ error: 'Token not provided' });
}
const token = authHeader.split(' ')[1];
try {
// 2. Верификация подписи и проверка claims
const decoded = jwt.verify(token, SECRET_KEY, {
algorithms: ['HS256'], // Явное указание алгоритма
issuer: 'my-auth-server',
audience: 'my-api'
});
// 3. Данные пользователя доступны в decoded
req.user = decoded;
next(); // Передаём управление следующему middleware
} catch (error) {
// Обработка ошибок: просрочен, неверная подпись и т.д.
return res.status(403).json({ error: 'Invalid or expired token' });
}
}В этом примере метод jwt.verify() выполняет все ключевые проверки: валидность подписи, срок действия и опциональные параметры издателя и аудитории. В случае успеха возвращается расшифрованный payload, который можно использовать для идентификации пользователя.
Этот подход применяется в микросервисных архитектурах, мобильных и одностраничных приложениях (SPA). Важно хранить секретный ключ в безопасности на сервере (например, в переменных окружения) и использовать HTTPS для передачи токена. Для отзыва токенов до истечения срока их действия требуется дополнительная инфраструктура (например, чёрный список токенов).
Вывод: Проверка JWT на бэкенде — это фундаментальный механизм для stateless-аутентификации. Её стоит применять, когда нужен масштабируемый и декомпозированный способ управления сессиями без хранения состояния на сервере.
Уровень
Рейтинг:
4
Сложность:
4
Навыки
JavaScript
Node.js
Ключевые слова
Подпишись на Python Developer в телеграм