Как работает JWT авторизация
1️⃣ Как кратко ответить
JWT (JSON Web Token) авторизация работает путем создания токена, который содержит закодированную информацию о пользователе. Этот токен передается клиенту после успешной аутентификации и используется для доступа к защищенным ресурсам. Токен подписывается сервером, что позволяет проверять его подлинность без необходимости хранить сессии на сервере.
2️⃣ Подробное объяснение темы
JWT (JSON Web Token) — это стандарт для создания токенов доступа, которые позволяют безопасно передавать информацию между клиентом и сервером. JWT состоит из трех частей: заголовка, полезной нагрузки и подписи. Эти части кодируются в формате Base64 и объединяются точками.
-
Заголовок (Header): Заголовок обычно содержит два поля: тип токена (JWT) и алгоритм подписи (например, HMAC SHA256).
{ "alg": "HS256", "typ": "JWT" } -
Полезная нагрузка (Payload): Полезная нагрузка содержит утверждения (claims). Утверждения могут быть зарегистрированными (например,
iss— издатель,exp— срок действия), публичными или частными. В полезной нагрузке можно хранить информацию о пользователе, такую как идентификатор пользователя или роли.{ "sub": "1234567890", "name": "John Doe", "admin": true } -
Подпись (Signature): Подпись создается путем кодирования заголовка и полезной нагрузки и их объединения с секретным ключом с использованием указанного алгоритма. Подпись обеспечивает целостность токена и подтверждает, что он не был изменен.
HMACSHA256( base64UrlEncode(header) + "." + base64UrlEncode(payload), secret )
Как работает JWT авторизация:
-
Аутентификация пользователя: Пользователь вводит свои учетные данные (например, логин и пароль) и отправляет их на сервер.
-
Создание JWT: Если учетные данные верны, сервер создает JWT, который включает информацию о пользователе в полезной нагрузке. Токен подписывается с использованием секретного ключа.
-
Передача JWT клиенту: Сервер отправляет JWT обратно клиенту. Обычно токен сохраняется в локальном хранилище (localStorage) или в куки.
-
Доступ к защищенным ресурсам: При последующих запросах клиент отправляет JWT в заголовке HTTP Authorization (например,
Authorization: Bearer <token>). -
Проверка JWT на сервере: Сервер проверяет подпись токена с использованием секретного ключа. Если подпись действительна и токен не истек, сервер предоставляет доступ к запрашиваемым ресурсам.
Пример использования JWT в коде:
// Пример создания JWT на сервере с использованием библиотеки jsonwebtoken
const jwt = require('jsonwebtoken');
// Данные пользователя, которые будут включены в токен
const user = {
id: 1,
username: 'johndoe',
role: 'admin'
};
// Секретный ключ для подписи токена
const secretKey = 'your-256-bit-secret';
// Создание токена
const token = jwt.sign(user, secretKey, { expiresIn: '1h' });
// Отправка токена клиенту
console.log('JWT:', token);
require('jsonwebtoken'): Импорт библиотеки для работы с JWT.user: Объект с данными пользователя, которые будут включены в полезную нагрузку токена.secretKey: Секретный ключ, используемый для подписи токена.jwt.sign(user, secretKey, { expiresIn: '1h' }): Создание токена с данными пользователя и сроком действия 1 час.console.log('JWT:', token): Вывод созданного токена в консоль.
JWT авторизация позволяет создавать безсессионные системы, где серверу не нужно хранить информацию о состоянии пользователя, что упрощает масштабирование и повышает безопасность.
🔒 Подпишись на бусти автора и стань Алигатором, чтобы получить полный доступ к функционалу сайта и отслеживать свой прогресс!
Подписаться