Skip to content

Определения интерфейсов

TokenManager

go
type TokenManager interface {
    Create(claims CustomClaims) (string, error)
    Validate(tokenString string) (Claims, bool, error)
    CreateRefresh(claims CustomClaims) (string, error)
    Refresh(refreshTokenString string) (string, error)
    ValidateInto(tokenString string, claims CustomClaims) (CustomClaims, bool, error)
    RefreshInto(refreshTokenString string, claims CustomClaims) (string, error)
    Revoke(tokenString string) error
    IsRevoked(tokenString string) (bool, error)
    ParseUnverified(tokenString string, claims any) error
    Close() error
    IsClosed() bool
}

Основной интерфейс операций с JWT-токенами. Все реализации должны быть безопасны для конкурентного использования. Реализация по умолчанию — *Processor.

Методы разделены на три группы по ответственности:

  • Создание токенов: Create, CreateRefresh
  • Проверка и обновление: Validate, ValidateInto, Refresh, RefreshInto
  • Общие операции: Revoke, IsRevoked, ParseUnverified, Close, IsClosed
interface

Методы

МетодСигнатураОписание
CreateCreate(claims CustomClaims) (string, error)Создаёт токен доступа
ValidateValidate(tokenString string) (Claims, bool, error)Проверяет токен
CreateRefreshCreateRefresh(claims CustomClaims) (string, error)Создаёт токен обновления
RefreshRefresh(refreshTokenString string) (string, error)Обновляет токен
ValidateIntoValidateInto(tokenString string, claims CustomClaims) (CustomClaims, bool, error)Проверяет в пользовательские Claims
RefreshIntoRefreshInto(refreshTokenString string, claims CustomClaims) (string, error)Обновляет в пользовательские Claims
RevokeRevoke(tokenString string) errorОтзывает токен
IsRevokedIsRevoked(tokenString string) (bool, error)Проверяет, отозван ли токен
ParseUnverifiedParseUnverified(tokenString string, claims any) errorПарсит без проверки
CloseClose() errorОсвобождает ресурсы
IsClosedIsClosed() boolПроверяет, закрыт ли Processor

Типы реализации

ТипОписание
*ProcessorРеализация по умолчанию

CustomClaims

go
type CustomClaims interface {
    GetRegisteredClaims() *RegisteredClaims
    Validate() error
}

Интерфейс пользовательских Claims. Используется в методах Create, ValidateInto, RefreshInto и других.

interface

Контракт валидации

Processor выполняет разные пути валидации для *Claims и других типов:

ТипПоведение при валидации
*ClaimsГлубокая валидация: все поля (ограничение длины, инъекционные паттерны, управляющие символы)
Другие типыВызывается Validate() + очистка строк зарегистрированных утверждений (Issuer, Subject, ID, TokenType, Audience)

Внимание

Для типов, отличных от *Claims, поля пользовательской структуры не проходят глубокую валидацию. Разработчики должны самостоятельно проверять все бизнес-поля в методе Validate().

Методы

МетодСигнатураОписание
GetRegisteredClaimsGetRegisteredClaims() *RegisteredClaimsВозвращает стандартные JWT-поля
ValidateValidate() errorПользовательская логика валидации

Типы реализации

ТипОписание
*ClaimsВстроенная реализация Claims

BlacklistStore

go
type BlacklistStore interface {
    Add(tokenID string, expiresAt time.Time) error
    Contains(tokenID string) (bool, error)
    Close() error
}

Интерфейс бэкенда хранилища чёрного списка.

interface

Методы

МетодСигнатураОписание
AddAdd(tokenID string, expiresAt time.Time) errorДобавляет в чёрный список
ContainsContains(tokenID string) (bool, error)Проверяет наличие в чёрном списке
CloseClose() errorОсвобождает ресурсы

RateLimitProvider

go
type RateLimitProvider interface {
    Allow(key string) bool
    Reset(key string)
    Close()
}

Интерфейс ограничения скорости. Processor вызывает Allow(key) для единичной проверки при создании токена.

Об AllowN

Сам интерфейс определяет только Allow для проверки одного запроса. Пакетный метод AllowN(key string, n int) bool — это метод-расширение конкретного типа *RateLimiter и не входит в этот интерфейс.

interface

Методы

МетодСигнатураОписание
AllowAllow(key string) boolПроверяет, разрешён ли один запрос
ResetReset(key string)Сбрасывает состояние ограничения для указанного key
CloseClose()Освобождает ресурсы

Типы реализации

ТипОписание
*RateLimiterВстроенная реализация на основе корзины токенов

ClockProvider

go
type ClockProvider interface {
    Now() time.Time
}

Интерфейс часов для внедрения времени (сценарии тестирования).

interface

Типы реализации

ТипОписание
SystemClockСистемные часы
FixedClockЧасы с фиксированным временем

RateLimitKeyer

go
type RateLimitKeyer interface {
    RateLimitKey() string
}

Необязательный интерфейс. Пользовательские Claims могут реализовать его для предоставления ключа ограничения скорости. Приоритет поиска ключа ограничения: Subject*Claims.UserIDRateLimitKey().

interface