← Назад ко всем вопросам

Как работает JWT авторизация

1️⃣ Как кратко ответить

JWT (JSON Web Token) авторизация работает путем создания токена, который содержит закодированную информацию о пользователе. Этот токен передается клиенту после успешной аутентификации и используется для доступа к защищенным ресурсам. Токен подписывается сервером, что позволяет проверять его подлинность без необходимости хранить сессии на сервере.

2️⃣ Подробное объяснение темы

JWT (JSON Web Token) — это стандарт для создания токенов доступа, которые позволяют безопасно передавать информацию между клиентом и сервером. JWT состоит из трех частей: заголовка, полезной нагрузки и подписи. Эти части кодируются в формате Base64 и объединяются точками.

  1. Заголовок (Header): Заголовок обычно содержит два поля: тип токена (JWT) и алгоритм подписи (например, HMAC SHA256).

    {
      "alg": "HS256",
      "typ": "JWT"
    }
    
  2. Полезная нагрузка (Payload): Полезная нагрузка содержит утверждения (claims). Утверждения могут быть зарегистрированными (например, iss — издатель, exp — срок действия), публичными или частными. В полезной нагрузке можно хранить информацию о пользователе, такую как идентификатор пользователя или роли.

    {
      "sub": "1234567890",
      "name": "John Doe",
      "admin": true
    }
    
  3. Подпись (Signature): Подпись создается путем кодирования заголовка и полезной нагрузки и их объединения с секретным ключом с использованием указанного алгоритма. Подпись обеспечивает целостность токена и подтверждает, что он не был изменен.

    HMACSHA256(
      base64UrlEncode(header) + "." +
      base64UrlEncode(payload),
      secret
    )
    

Как работает JWT авторизация:

  1. Аутентификация пользователя: Пользователь вводит свои учетные данные (например, логин и пароль) и отправляет их на сервер.

  2. Создание JWT: Если учетные данные верны, сервер создает JWT, который включает информацию о пользователе в полезной нагрузке. Токен подписывается с использованием секретного ключа.

  3. Передача JWT клиенту: Сервер отправляет JWT обратно клиенту. Обычно токен сохраняется в локальном хранилище (localStorage) или в куки.

  4. Доступ к защищенным ресурсам: При последующих запросах клиент отправляет JWT в заголовке HTTP Authorization (например, Authorization: Bearer <token>).

  5. Проверка 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 авторизация позволяет создавать безсессионные системы, где серверу не нужно хранить информацию о состоянии пользователя, что упрощает масштабирование и повышает безопасность.

Тема: Безопасность
Стадия: Tech

🔒 Подпишись на бусти автора и стань Алигатором, чтобы получить полный доступ к функционалу сайта и отслеживать свой прогресс!

Твои заметки