Config
Config
go
type Config struct {
SecretKey string
SigningKey any
VerificationKey any
SigningMethod SigningMethod
AccessTokenTTL time.Duration
RefreshTokenTTL time.Duration
Issuer string
ExpectedAudience string
RequireExpiration bool
ClockSkew time.Duration
Blacklist BlacklistConfig
EnableRateLimit bool
RateLimitRate int
RateLimitWindow time.Duration
RateLimiter RateLimitProvider
Clock ClockProvider
}Унифицированная конфигурация JWT Processor. Поля с нулевыми значениями автоматически заполняются значениями по умолчанию в New() (через normalizeConfig).
Правила автоматического заполнения
RateLimitRateиRateLimitWindowзаполняются только приEnableRateLimit = trueEnableAutoCleanupвстроенного хранилища чёрного списка всегда принудительно устанавливается вtrue(предотвращает неограниченный рост)SecretKey,SigningKey,VerificationKeyне заполняются автоматически и должны быть установлены вручную
Поля
| Поле | Тип | По умолчанию | Описание |
|---|---|---|---|
SecretKey | string | — | HMAC-ключ (минимум 32 байта) |
SigningKey | any | — | Приватный ключ асимметричного алгоритма (*rsa.PrivateKey или *ecdsa.PrivateKey) |
VerificationKey | any | — | Публичный ключ асимметричного алгоритма (необязательно, по умолчанию используется SigningKey) |
SigningMethod | SigningMethod | HS256 | Алгоритм подписи |
AccessTokenTTL | time.Duration | 15m | Срок действия токена доступа |
RefreshTokenTTL | time.Duration | 168h | Срок действия токена обновления |
Issuer | string | "jwt-service" | Издатель |
ExpectedAudience | string | — | Ожидаемая аудитория (необязательно) |
RequireExpiration | bool | false | При true отклоняет токены без утверждения exp во время валидации (возвращает ErrExpirationRequired) |
ClockSkew | time.Duration | 0 | Допуск рассинхронизации часов, применяемый к exp/nbf при валидации (компенсирует расхождения часов между издателем и проверяющим); отрицательные значения отклоняются методом Validate() |
Blacklist | BlacklistConfig | — | Конфигурация чёрного списка |
EnableRateLimit | bool | false | Включить ограничение скорости |
RateLimitRate | int | 100 | Максимальное количество запросов в окне |
RateLimitWindow | time.Duration | 1m | Окно ограничения скорости |
RateLimiter | RateLimitProvider | — | Пользовательский ограничитель (необязательно) |
Clock | ClockProvider | SystemClock{} | Провайдер часов |
Методы
| Метод | Сигнатура | Описание |
|---|---|---|
Validate | func (c *Config) Validate() error | Проверяет корректность конфигурации |
Проверки Validate():
| Проверка | Описание |
|---|---|
| Ключ подписи | HMAC требует SecretKey ≥32 байта и не слабый ключ; RSA/ECDSA требует корректный тип SigningKey; ECDSA требует совпадение кривой; VerificationKey должен соответствовать типу публичного ключа алгоритма |
| Валидность TTL | AccessTokenTTL и RefreshTokenTTL должны быть положительными |
| Порядок TTL | AccessTokenTTL должен быть меньше RefreshTokenTTL |
| ClockSkew | ClockSkew не должен быть отрицательным |
| Алгоритм подписи | Должен быть одним из 12 встроенных алгоритмов |
| Чёрный список | При использовании встроенного хранилища MaxSize и CleanupInterval должны быть положительными |
BlacklistConfig
go
type BlacklistConfig struct {
CleanupInterval time.Duration
MaxSize int
EnableAutoCleanup bool
Store BlacklistStore
}Конфигурация чёрного списка.
structПоля
| Поле | Тип | По умолчанию | Описание |
|---|---|---|---|
CleanupInterval | time.Duration | 5m | Интервал очистки просроченных записей (только для встроенного хранилища) |
MaxSize | int | 100000 | Максимальное количество записей в памяти (только для встроенного хранилища) |
EnableAutoCleanup | bool | true | Автоматическая очистка просроченных записей (только для встроенного хранилища) |
Store | BlacklistStore | — | Пользовательский бэкенд хранилища (при установке остальные поля игнорируются) |