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

Из чего состоит JWT (header/payload/signature) и что такое claims?

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

JWT (JSON Web Token) состоит из трех частей: заголовка (header), полезной нагрузки (payload) и подписи (signature). Заголовок содержит информацию о типе токена и алгоритме шифрования. Полезная нагрузка включает в себя claims — утверждения о сущности (например, пользовательские данные). Подпись обеспечивает целостность и подлинность токена.

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

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

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

Заголовок обычно состоит из двух частей: типа токена (например, JWT) и алгоритма шифрования, используемого для создания подписи (например, HMAC SHA256 или RSA).

Пример заголовка в формате JSON:

{
  "alg": "HS256",
  "typ": "JWT"
}
  • alg: Указывает алгоритм, используемый для подписи токена. В данном примере это HMAC с SHA-256.
  • typ: Указывает тип токена, обычно это "JWT".

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

Полезная нагрузка содержит claims — утверждения о сущности, например, о пользователе и дополнительных данных. Claims бывают трех типов:

  • Registered claims: Зарезервированные утверждения, которые не обязательны, но рекомендуются для обеспечения совместимости. Примеры: iss (issuer), exp (expiration), sub (subject), aud (audience).
  • Public claims: Пользовательские утверждения, которые могут быть определены пользователем. Они должны быть уникальными и могут быть зарегистрированы в IANA JSON Web Token Registry.
  • Private claims: Пользовательские утверждения, используемые для обмена информацией между сторонами, которые согласовали их использование.

Пример полезной нагрузки:

{
  "sub": "1234567890",
  "name": "John Doe",
  "admin": true
}
  • sub: Идентификатор субъекта токена.
  • name: Имя пользователя.
  • admin: Признак административных прав.

Подпись (Signature)

Подпись создается для обеспечения целостности и подлинности токена. Она формируется путем кодирования заголовка и полезной нагрузки с использованием алгоритма, указанного в заголовке, и секретного ключа.

Процесс создания подписи:

  1. Кодирование заголовка и полезной нагрузки в Base64Url.
  2. Объединение этих двух строк через точку.
  3. Применение алгоритма шифрования с секретным ключом к полученной строке.

Пример создания подписи:

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

Пример полного JWT

Пример JWT может выглядеть следующим образом:

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWV9.TJVA95OrM7E2cBab30RMHrHDcEfxjoYZgeFONFh7HgQ
  • Первая часть (до первой точки) — это закодированный заголовок.
  • Вторая часть — закодированная полезная нагрузка.
  • Третья часть — подпись.

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

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

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

Твои заметки