Определения интерфейсов
TokenManager
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
Методы
| Метод | Сигнатура | Описание |
|---|---|---|
Create | Create(claims CustomClaims) (string, error) | Создаёт токен доступа |
Validate | Validate(tokenString string) (Claims, bool, error) | Проверяет токен |
CreateRefresh | CreateRefresh(claims CustomClaims) (string, error) | Создаёт токен обновления |
Refresh | Refresh(refreshTokenString string) (string, error) | Обновляет токен |
ValidateInto | ValidateInto(tokenString string, claims CustomClaims) (CustomClaims, bool, error) | Проверяет в пользовательские Claims |
RefreshInto | RefreshInto(refreshTokenString string, claims CustomClaims) (string, error) | Обновляет в пользовательские Claims |
Revoke | Revoke(tokenString string) error | Отзывает токен |
IsRevoked | IsRevoked(tokenString string) (bool, error) | Проверяет, отозван ли токен |
ParseUnverified | ParseUnverified(tokenString string, claims any) error | Парсит без проверки |
Close | Close() error | Освобождает ресурсы |
IsClosed | IsClosed() bool | Проверяет, закрыт ли Processor |
Типы реализации
| Тип | Описание |
|---|---|
*Processor | Реализация по умолчанию |
CustomClaims
type CustomClaims interface {
GetRegisteredClaims() *RegisteredClaims
Validate() error
}Интерфейс пользовательских Claims. Используется в методах Create, ValidateInto, RefreshInto и других.
Контракт валидации
Processor выполняет разные пути валидации для *Claims и других типов:
| Тип | Поведение при валидации |
|---|---|
*Claims | Глубокая валидация: все поля (ограничение длины, инъекционные паттерны, управляющие символы) |
| Другие типы | Вызывается Validate() + очистка строк зарегистрированных утверждений (Issuer, Subject, ID, TokenType, Audience) |
Внимание
Для типов, отличных от *Claims, поля пользовательской структуры не проходят глубокую валидацию. Разработчики должны самостоятельно проверять все бизнес-поля в методе Validate().
Методы
| Метод | Сигнатура | Описание |
|---|---|---|
GetRegisteredClaims | GetRegisteredClaims() *RegisteredClaims | Возвращает стандартные JWT-поля |
Validate | Validate() error | Пользовательская логика валидации |
Типы реализации
| Тип | Описание |
|---|---|
*Claims | Встроенная реализация Claims |
BlacklistStore
type BlacklistStore interface {
Add(tokenID string, expiresAt time.Time) error
Contains(tokenID string) (bool, error)
Close() error
}Интерфейс бэкенда хранилища чёрного списка.
interfaceМетоды
| Метод | Сигнатура | Описание |
|---|---|---|
Add | Add(tokenID string, expiresAt time.Time) error | Добавляет в чёрный список |
Contains | Contains(tokenID string) (bool, error) | Проверяет наличие в чёрном списке |
Close | Close() error | Освобождает ресурсы |
RateLimitProvider
type RateLimitProvider interface {
Allow(key string) bool
Reset(key string)
Close()
}Интерфейс ограничения скорости. Processor вызывает Allow(key) для единичной проверки при создании токена.
Об AllowN
Сам интерфейс определяет только Allow для проверки одного запроса. Пакетный метод AllowN(key string, n int) bool — это метод-расширение конкретного типа *RateLimiter и не входит в этот интерфейс.
Методы
| Метод | Сигнатура | Описание |
|---|---|---|
Allow | Allow(key string) bool | Проверяет, разрешён ли один запрос |
Reset | Reset(key string) | Сбрасывает состояние ограничения для указанного key |
Close | Close() | Освобождает ресурсы |
Типы реализации
| Тип | Описание |
|---|---|
*RateLimiter | Встроенная реализация на основе корзины токенов |
ClockProvider
type ClockProvider interface {
Now() time.Time
}Интерфейс часов для внедрения времени (сценарии тестирования).
interfaceТипы реализации
| Тип | Описание |
|---|---|
SystemClock | Системные часы |
FixedClock | Часы с фиксированным временем |
RateLimitKeyer
type RateLimitKeyer interface {
RateLimitKey() string
}Необязательный интерфейс. Пользовательские Claims могут реализовать его для предоставления ключа ограничения скорости. Приоритет поиска ключа ограничения: Subject → *Claims.UserID → RateLimitKey().