Skip to content

Commit 65f35e5

Browse files
committed
add-more-custom-config-vars
1 parent 14f9009 commit 65f35e5

File tree

2 files changed

+45
-14
lines changed

2 files changed

+45
-14
lines changed

config.go

Lines changed: 34 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,11 @@ type Config struct {
3131
// Implement the Logger interface (Debug, Info, Warn, Error methods) to
3232
// integrate with your application's logging system (e.g., zap, logrus).
3333
Logger Logger
34+
35+
// Validation skip configuration
36+
SkipIssuerCheck bool
37+
SkipAudienceCheck bool
38+
SkipExpiryCheck bool
3439
}
3540

3641
// Validate validates the configuration
@@ -119,11 +124,14 @@ func SetupOAuth(cfg *Config) (provider.TokenValidator, error) {
119124
func createValidator(cfg *Config, logger Logger) (provider.TokenValidator, error) {
120125
// Convert root Config to provider.Config
121126
providerCfg := &provider.Config{
122-
Provider: cfg.Provider,
123-
Issuer: cfg.Issuer,
124-
Audience: cfg.Audience,
125-
JWTSecret: cfg.JWTSecret,
126-
Logger: logger,
127+
Provider: cfg.Provider,
128+
Issuer: cfg.Issuer,
129+
Audience: cfg.Audience,
130+
JWTSecret: cfg.JWTSecret,
131+
Logger: logger,
132+
SkipIssuerCheck: cfg.SkipIssuerCheck,
133+
SkipAudienceCheck: cfg.SkipAudienceCheck,
134+
SkipExpiryCheck: cfg.SkipAudienceCheck,
127135
}
128136

129137
var validator provider.TokenValidator
@@ -223,6 +231,24 @@ func (b *ConfigBuilder) WithLogger(logger Logger) *ConfigBuilder {
223231
return b
224232
}
225233

234+
// WithSkipIssuerCheck sets issuer check toogle
235+
func (b *ConfigBuilder) WithSkipIssuerCheck(skipIssuerCheck bool) *ConfigBuilder {
236+
b.config.SkipIssuerCheck = skipIssuerCheck
237+
return b
238+
}
239+
240+
// WithSkipAudienceCheck sets audience check toggle
241+
func (b *ConfigBuilder) WithSkipAudienceCheck(skipAudienceCheck bool) *ConfigBuilder {
242+
b.config.SkipAudienceCheck = skipAudienceCheck
243+
return b
244+
}
245+
246+
// WithSkipAudienceCheck sets expiry check toggle
247+
func (b *ConfigBuilder) WithSkipExpiryCheck(skipExpiryCheck bool) *ConfigBuilder {
248+
b.config.SkipExpiryCheck = skipExpiryCheck
249+
return b
250+
}
251+
226252
// WithServerURL sets the full server URL directly
227253
func (b *ConfigBuilder) WithServerURL(url string) *ConfigBuilder {
228254
b.config.ServerURL = url
@@ -289,6 +315,9 @@ func FromEnv() (*Config, error) {
289315
WithAudience(getEnv("OIDC_AUDIENCE", "")).
290316
WithClientID(getEnv("OIDC_CLIENT_ID", "")).
291317
WithClientSecret(getEnv("OIDC_CLIENT_SECRET", "")).
318+
WithSkipAudienceCheck(getEnv("OIDC_SKIP_AUDIENCE_CHECK", "") != "").
319+
WithSkipIssuerCheck(getEnv("OIDC_SKIP_ISSUER_CHECK", "") != "").
320+
WithSkipExpiryCheck(getEnv("OIDC_SKIP_EXPIRY_CHECK", "") != "").
292321
WithServerURL(serverURL).
293322
WithJWTSecret([]byte(jwtSecret)).
294323
Build()

provider/provider.go

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -30,11 +30,14 @@ type Logger interface {
3030

3131
// Config holds OAuth configuration (subset needed by provider)
3232
type Config struct {
33-
Provider string
34-
Issuer string
35-
Audience string
36-
JWTSecret []byte
37-
Logger Logger
33+
Provider string
34+
Issuer string
35+
Audience string
36+
JWTSecret []byte
37+
Logger Logger
38+
SkipIssuerCheck bool
39+
SkipAudienceCheck bool
40+
SkipExpiryCheck bool
3841
}
3942

4043
// TokenValidator interface for OAuth token validation
@@ -90,7 +93,6 @@ func (v *HMACValidator) ValidateToken(ctx context.Context, tokenString string) (
9093
}
9194
return []byte(v.secret), nil
9295
})
93-
9496
if err != nil {
9597
return nil, fmt.Errorf("failed to parse and validate token: %w", err)
9698
}
@@ -204,9 +206,9 @@ func (v *OIDCValidator) Initialize(cfg *Config) error {
204206
verifier := provider.Verifier(&oidc.Config{
205207
ClientID: cfg.Audience, // Note: go-oidc uses ClientID field for audience validation - see https://github.com/coreos/go-oidc/blob/v3/oidc/verify.go#L85
206208
SupportedSigningAlgs: []string{oidc.RS256, oidc.ES256},
207-
SkipClientIDCheck: false, // Always validate if ClientID is provided
208-
SkipExpiryCheck: false, // Verify expiration
209-
SkipIssuerCheck: false, // Verify issuer
209+
SkipClientIDCheck: cfg.SkipAudienceCheck,
210+
SkipExpiryCheck: cfg.SkipExpiryCheck,
211+
SkipIssuerCheck: cfg.SkipIssuerCheck,
210212
})
211213

212214
v.logger.Info("OAuth: OIDC validator initialized with audience validation: %s", cfg.Audience)

0 commit comments

Comments
 (0)