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

«Из каких частей состоит JWT токен?» — вопрос из категории Безопасность, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

JWT (JSON Web Token) состоит из трёх частей, разделённых точками:

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

  • Содержит метаданные: тип токена (typ: "JWT") и алгоритм подписи (alg: "HS256", "RS256").
  • Кодируется в Base64URL.
  • Пример: {"alg": "HS256", "typ": "JWT"}.

2. Payload (Полезная нагрузка)

  • Содержит утверждения (claims) о пользователе и данные: идентификатор (sub), срок действия (exp), издатель (iss).
  • Кодируется в Base64URL.
  • Пример: {"sub": "123", "name": "John", "exp": 1516239022}.

3. Signature (Подпись)

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

Итоговый формат: header.payload.signature

Пример токена:

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjMiLCJuYW1lIjoiSm9obiJ9.ABC123...