Из чего состоит 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)
Подпись создается для обеспечения целостности и подлинности токена. Она формируется путем кодирования заголовка и полезной нагрузки с использованием алгоритма, указанного в заголовке, и секретного ключа.
Процесс создания подписи:
- Кодирование заголовка и полезной нагрузки в Base64Url.
- Объединение этих двух строк через точку.
- Применение алгоритма шифрования с секретным ключом к полученной строке.
Пример создания подписи:
HMACSHA256(
base64UrlEncode(header) + "." +
base64UrlEncode(payload),
secret)
Пример полного JWT
Пример JWT может выглядеть следующим образом:
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWV9.TJVA95OrM7E2cBab30RMHrHDcEfxjoYZgeFONFh7HgQ
- Первая часть (до первой точки) — это закодированный заголовок.
- Вторая часть — закодированная полезная нагрузка.
- Третья часть — подпись.
JWT используется для передачи информации, которая может быть проверена и доверена, так как она подписана с использованием секретного ключа или пары ключей. Это делает JWT полезным для аутентификации и авторизации в веб-приложениях.
🔒 Подпишись на бусти автора и стань Алигатором, чтобы получить полный доступ к функционалу сайта и отслеживать свой прогресс!
Подписаться