SobesLab логотип SobesLab

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

Структура JWT

  1. Заголовок (Header):

    • Обычно содержит два поля: тип токена, который всегда будет JWT, и алгоритм подписи, например HMAC SHA256 или RSA.
    • Пример:
      {
        "alg": "HS256",
        "typ": "JWT"
      }
      
  2. Полезная нагрузка (Payload):

    • Содержит утверждения (claims), которые представляют информацию о пользователе и дополнительных данных. Утверждения делятся на три категории:
      • Registered claims: предопределённые поля, такие как iss (issuer), exp (expiration), sub (subject) и т.д.
      • Public claims: можно определять по своему усмотрению, но они должны быть уникальными, чтобы избежать коллизий.
      • Private claims: пользовательские поля, которые создаются для передачи информации между сторонами.
    • Пример:
      {
        "sub": "1234567890",
        "name": "John Doe",
        "admin": true
      }
      
  3. Подпись (Signature):

    • Для создания подписи используется закодированный заголовок и полезная нагрузка, а также секретный ключ. Это гарантирует целостность данных и аутентичность источника.
    • Пример создания подписи с использованием HMAC SHA256:
      HMACSHA256(
        base64UrlEncode(header) + "." +
        base64UrlEncode(payload),
        secret)
      

После создания токен объединяется в одну строку через точку (.), например:

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwibmFtZSI6IkpvaG4gRG9lIiwiaW5zdGFudCI6dHJ1ZX0.HWc5j6VZ5f1q4kX2t3OfH7w2q7H0k5F1YyRfM2WcP5E

Применение JWT

  1. Аутентификация:

    • При входе пользователя в систему сервер создает JWT и отправляет его клиенту. Клиент затем включает этот токен в заголовок Authorization при каждом запросе к защищенным ресурсам.
  2. Авторизация:

    • Сервер проверяет токен при каждом запросе, чтобы определить права доступа пользователя.

Преимущества JWT

  • Легковесность: Токены компактны и могут передаваться в URL, заголовках HTTP или теле запроса.
  • Автономность: Токены содержат всю необходимую информацию о пользователе, что позволяет избежать хранения сессий на сервере.
  • Безопасность: Подпись гарантирует целостность и подлинность данных.

Недостатки JWT

  • Размер: Токены могут быть большими, особенно если в них много данных.
  • Отсутствие механизма отзыва: Если токен скомпрометирован, его трудно отозвать до истечения срока действия.
  • Безопасность: Необходимо правильно управлять секретными ключами и выбирать безопасные алгоритмы.

Практические советы

  • Срок действия: Устанавливайте разумные сроки действия токенов и используйте refresh tokens (токены обновления) для продления сессий.
  • Шифрование: Если токен содержит чувствительную информацию, подумайте о шифровании полезной нагрузки.
  • Валидация: Всегда проверяйте подпись и срок действия токена на сервере перед его использованием.

Распространенные ошибки

  • Хранение токенов в локальном хранилище: Это может привести к уязвимостям XSS (межсайтовый скриптинг). Рассмотрите возможность использования HttpOnly cookies.
  • Игнорирование сроков действия: Не забывайте устанавливать сроки действия токенов и обрабатывать ошибки, связанные с истечением срока действия.
  • Недостаточная защита секретного ключа: Убедитесь, что секретный ключ хранится в защищенном месте и не доступен для неавторизованных пользователей.

JWT — мощный инструмент для аутентификации и авторизации в современных веб-приложениях, который предоставляет множество возможностей, но требует внимательного подхода к безопасности и архитектуре.

Как расширить ответ на собеседовании

Добавьте практический пример

Поделитесь кейсом из проекта, где вы применяли знание из вопроса. Структура: задача → действия → результат.

Укажите альтернативы

Расскажите о вариантах реализации, плюсах и минусах, а также о критериях выбора подхода.

Сделайте вывод

Завершите ответ кратким резюме: где применимо, какие риски и что важно помнить на практике.

Рекомендуемые категории

Дополнительные материалы