Files
core/http/jwt/jwks/config.go
Jan Stabenow 9c0b535199 Add v16.7.2
2022-05-13 19:26:45 +02:00

64 lines
2.1 KiB
Go

package jwks
import (
"net/http"
"time"
)
// Options represents the configuration options for a JWKs.
type Config struct {
// Client is the HTTP client used to get the JWKs via HTTP.
Client *http.Client
// RefreshErrorHandler is a function that consumes errors that happen during a JWKs refresh. This is only effectual
// if RefreshInterval is not nil.
RefreshErrorHandler ErrorHandler
// RefreshInterval is the duration to refresh the JWKs in the background via a new HTTP request. If this is not nil,
// then a background refresh will be requested in a separate goroutine at this interval until the JWKs method
// EndBackground is called.
RefreshInterval time.Duration
// RefreshRateLimit limits the rate at which refresh requests are granted. Only one refresh request can be queued
// at a time any refresh requests received while there is already a queue are ignored. It does not make sense to
// have RefreshInterval's value shorter than this.
RefreshRateLimit time.Duration
// RefreshTimeout is the duration for the context used to create the HTTP request for a refresh of the JWKs. This
// defaults to one minute. This is only effectual if RefreshInterval is not nil.
RefreshTimeout time.Duration
// RefreshUnknownKID indicates that the JWKs refresh request will occur every time a kid that isn't cached is seen.
// Without specifying a RefreshInterval a malicious client could self-sign X JWTs, send them to this service,
// then cause potentially high network usage proportional to X.
RefreshUnknownKID bool
}
var defaultConfig = Config{
Client: http.DefaultClient,
RefreshTimeout: time.Minute,
}
func applyConfigDefaults(config *Config) {
if config.Client == nil {
config.Client = defaultConfig.Client
}
if config.RefreshErrorHandler == nil {
config.RefreshErrorHandler = defaultConfig.RefreshErrorHandler
}
if config.RefreshInterval < 0 {
config.RefreshInterval = defaultConfig.RefreshInterval
}
if config.RefreshRateLimit < 0 {
config.RefreshRateLimit = defaultConfig.RefreshRateLimit
}
if config.RefreshTimeout <= 0 {
config.RefreshTimeout = defaultConfig.RefreshTimeout
}
}