Из каких частей состоит JWT-токен?

Ответ

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

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

    • Содержит метаданные о токене, такие как тип токена (typ, всегда JWT) и алгоритм подписи (alg), используемый для создания подписи.
    • Пример:
      {
        "alg": "HS256",
        "typ": "JWT"
      }
    • Эта JSON-структура кодируется в Base64URL.
  2. Payload (Полезная нагрузка):

    • Содержит утверждения (claims) — информацию о сущности (обычно пользователе) и дополнительные данные. Claims могут быть зарегистрированными (например, iss - издатель, exp - время истечения, sub - субъект), публичными или приватными.
    • Пример:
      {
        "sub": "1234567890",
        "name": "John Doe",
        "iat": 1516239022,
        "exp": 1516242622
      }
    • Эта JSON-структура также кодируется в Base64URL.
  3. Signature (Подпись):

    • Используется для проверки целостности токена и подтверждения того, что он был отправлен доверенным источником и не был изменен по пути.
    • Создается путем хеширования закодированных Header и Payload с использованием секретного ключа (для симметричных алгоритмов, например, HS256) или приватного ключа (для асимметричных алгоритмов, например, RS256).
    • Формула для HS256:
      HMACSHA256(
        base64UrlEncode(header) + "." + base64UrlEncode(payload),
        secret_key
      )

Итоговая структура JWT: Токен представляет собой конкатенацию этих трех частей, разделенных точками: base64UrlEncode(Header).base64UrlEncode(Payload).Signature Пример: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c

Важное замечание: JWT не шифрует данные в Header и Payload, а лишь кодирует их в Base64URL. Это означает, что любая информация в этих частях токена видна всем. Для обеспечения конфиденциальности данных используйте HTTPS и никогда не храните чувствительную информацию в Payload без дополнительного шифрования. Подпись гарантирует только целостность и аутентичность, но не конфиденциальность.