Пакет jws (JSON Web Signature)

Пакет jws предоставляет частичную реализацию кодирования и декодирования JSON Web Signature. Существует для поддержки пакета golang.org/x/oauth2.

Устарело: этот пакет не предназначен для публичного использования и может быть удален в будущем. Существует только для внутреннего использования. Рекомендуется использовать другой JWS-пакет или скопировать этот пакет в свой исходный код.

Функции

func Encode

func Encode(header *Header, c *ClaimSet, key *rsa.PrivateKey) (string, error)

Encode кодирует подписанный JWS с предоставленными заголовком и набором claims. Использует crypto/rsa.SignPKCS1v15 с указанным RSA-приватным ключом.

func EncodeWithSigner

func EncodeWithSigner(header *Header, c *ClaimSet, sg Signer) (string, error)

EncodeWithSigner кодирует заголовок и набор claims с использованием предоставленного подписывающего устройства.

func Verify

func Verify(token string, key *rsa.PublicKey) error

Verify проверяет, была ли подпись JWT-токена создана приватным ключом, соответствующим предоставленному публичному ключу.

Типы

type ClaimSet

type ClaimSet struct {
    Iss   string `json:"iss"`             // email клиентского приложения
    Scope string `json:"scope,omitempty"` // запрашиваемые разрешения
    Aud   string `json:"aud"`             // целевая аудитория (опционально)
    Exp   int64  `json:"exp"`             // время истечения (Unix epoch)
    Iat   int64  `json:"iat"`             // время выдачи (Unix epoch)
    Typ   string `json:"typ,omitempty"`   // тип токена (опционально)
    Sub   string `json:"sub,omitempty"`   // email для делегированного доступа
    Prn   string `json:"prn,omitempty"`   // устаревший аналог Sub
    PrivateClaims map[string]any `json:"-"` // кастомные claims
}

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

func Decode

func Decode(payload string) (*ClaimSet, error)

Decode декодирует набор claims из JWS-полезной нагрузки.

type Header

type Header struct {
    Algorithm string `json:"alg"`  // алгоритм подписи
    Typ       string `json:"typ"`  // тип токена
    KeyID     string `json:"kid,omitempty"` // идентификатор ключа (опционально)
}

Header представляет заголовок для подписанных JWS-полезных нагрузок.

type Signer

type Signer func(data []byte) (sig []byte, err error)

Signer возвращает подпись для предоставленных данных.

Особенности реализации

  1. Поддержка алгоритмов:

    • Основная реализация использует RSA с PKCS1v15
    • Возможность подключения кастомных подписывающих устройств
  2. Устаревшие поля:

    • Поле Prn сохраняется для обратной совместимости
    • Рекомендуется использовать Sub вместо Prn
  3. Кастомные claims:

    • Поддерживаются через поле PrivateClaims
    • Не включаются в стандартную JSON-маршализацию
  4. Безопасность:

    • Пакет помечен как устаревший для публичного использования
    • Рекомендуется использовать более полные реализации JWS