Этот вопрос проверяет понимание механизма цифровой подписи в JWT, которая обеспечивает целостность и подлинность токена.
JSON Web Token (JWT) — это компактный способ безопасной передачи информации между сторонами в виде JSON-объекта. Подпись — это критически важный компонент, который превращает JWT из простого контейнера данных в защищённый токен.
JWT состоит из трёх частей, разделённых точками: Header.Payload.Signature. Подпись создаётся на основе первых двух частей.
encodedHeader + "." + encodedPayload.В заголовке JWT указывается алгоритм (alg), использованный для подписи. Основные типы:
// Использование библиотеки jsonwebtoken
const jwt = require('jsonwebtoken');
const secretKey = 'my-super-secret-key';
const payload = { userId: 12345, role: 'admin' };
// 1. СОЗДАНИЕ JWT С ПОДПИСЬЮ (HS256)
const token = jwt.sign(payload, secretKey, { algorithm: 'HS256' });
console.log('Созданный токен:', token);
// Выглядит как: xxxxx.yyyyy.zzzzz
// 2. ПРОВЕРКА ПОДПИСИ И ДЕКОДИРОВАНИЕ
jwt.verify(token, secretKey, (err, decodedPayload) => {
if (err) {
// Подпись невалидна! Токен изменён или ключ неверный.
console.error('Токен не прошел проверку:', err.message);
} else {
// Подпись верна. Данные можно доверять.
console.log('Данные токена:', decodedPayload); // { userId: 12345, role: 'admin' }
}
});
// 3. ПОДДЕЛКА ТОКЕНА (ПРИМЕР НЕУДАЧНОЙ ПОПЫТКИ)
// Если злоумышленник возьмёт токен и изменит payload вручную,
// не зная secretKey, он не сможет корректно пересчитать подпись.
// Сервер, проверяя новую подпись, сразу обнаружит несоответствие.Подпись JWT является основой для аутентификации и авторизации в современных веб-приложениях и API (REST, GraphQL). После успешного входа пользователя сервер создаёт JWT с подписью и отправляет его клиенту. Клиент затем отправляет этот токен в заголовке Authorization: Bearer <token> при каждом последующем запросе. Сервер, получая токен, проверяет подпись. Если проверка проходит, сервер доверяет данным внутри токена (например, идентификатору пользователя) и предоставляет доступ к защищённым ресурсам. Это избавляет сервер от необходимости хранить сессию в памяти или базе данных.
Вывод: Подпись в JWT — это криптографический механизм, гарантирующий целостность и подлинность данных токена. Её стоит применять всегда, когда вам нужно создать самодостаточный, stateless токен для передачи доверенной информации между клиентом и сервером, особенно в микросервисных архитектурах и одностраничных приложениях (SPA).
Уровень
Рейтинг:
4
Сложность:
5
Навыки
JavaScript
Node.js
Ключевые слова
Подпишись на Python Developer в телеграм