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

Из чего состоит JWT-токен

1.0 Junior🔥 211 комментариев
#Безопасность#Сетевые протоколы и API

Комментарии (1)

🐱
deepseek-v3.2PrepBro AI5 апр. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Структура JWT (JSON Web Token)

JWT (JSON Web Token) — это открытый стандарт (RFC 7519) для создания токенов доступа, которые компактно и безопасно передают информацию между сторонами в виде объекта JSON. Токен состоит из трёх основных частей, разделённых точками: **Header** (заголовок), **Payload** (полезная нагрузка) и **Signature** (подпись). Формат: `Header.Payload.Signature`.

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

Заголовок содержит метаданные о типе токена и алгоритме подписи. Обычно включает два поля:

  • typ (type) — тип токена, например, "JWT".
  • alg (algorithm) — алгоритм хеширования, используемый для создания подписи (например, HMAC SHA256 или RSA).

Пример закодированного Header:

{
  "alg": "HS256",
  "typ": "JWT"
}

После кодирования в Base64Url (безопасный для URL вариант Base64) он становится первой частью токена.

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

Payload содержит утверждения (claims) — утверждения о пользователе и дополнительные данные. Утверждения бывают трёх типов:

  • Зарегистрированные (Registered claims) — стандартные поля, рекомендованные спецификацией JWT (например, iss — издатель, exp — срок действия, sub — тема).
  • Публичные (Public claims) — пользовательские поля, которые могут быть определены по соглашению.
  • Приватные (Private claims) — произвольные данные для обмена информацией между сторонами.

Пример Payload:

{
  "sub": "1234567890",
  "name": "John Doe",
  "admin": true,
  "exp": 1516239022
}

Payload также кодируется в Base64Url, образуя вторую часть токена. Важно: данные в Payload не шифруются по умолчанию (если не используется JWE), поэтому не следует хранить чувствительную информацию.

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

Подпись обеспечивает целостность и подлинность токена. Она создаётся путём подписи закодированных Header и Payload с использованием секретного ключа (для HMAC) или пары ключей (для RSA). Алгоритм указан в Header. Процесс создания:

  1. Берутся закодированные Header и Payload, объединяются через точку.
  2. К ним применяется алгоритм подписи (например, HMAC-SHA256) с секретным ключом.

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

import (
    "crypto/hmac"
    "crypto/sha256"
    "encoding/base64"
    "strings"
)

func CreateSignature(header, payload, secret string) string {
    data := strings.Join([]string{header, payload}, ".")
    hash := hmac.New(sha256.New, []byte(secret))
    hash.Write([]byte(data))
    signature := base64.RawURLEncoding.EncodeToString(hash.Sum(nil))
    return signature
}

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

Как работает JWT на практике

  • Создание токена: Сервер генерирует JWT после аутентификации пользователя, подписывая его с помощью секретного ключа.
  • Передача токена: Клиент включает JWT в заголовок Authorization (например, Bearer <token>) при запросах к защищённым ресурсам.
  • Верификация токена: Сервер проверяет подпись и утверждения (например, срок действия) перед предоставлением доступа.

Безопасность и важные аспекты

  • Не храните секреты в Payload: Так как Payload только кодируется, для конфиденциальных данных используйте JWE (JSON Web Encryption).
  • Защищайте ключи подписи: Компрометация секретного ключа позволяет злоумышленнику подделывать токены.
  • Используйте короткие сроки жизни: Устанавливайте небольшое время действия (exp) для минимизации рисков при утечке токена.
  • Алгоритмы подписи: Рекомендуются надёжные алгоритмы, такие как RS256 (асимметричный), вместо симметричных (HS256) в публичных API.

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

Визуально токен выглядит так:

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c

Где:

  • Первая часть: Header.
  • Вторая часть: Payload.
  • Третья часть: Signature.

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

Из чего состоит JWT-токен | PrepBro