fix(oidc): don't strip issuer trailing slash (Authentik discovery match)
All checks were successful
build-and-push / build (push) Successful in 9m0s
All checks were successful
build-and-push / build (push) Successful in 9m0s
go-oidc requires the issuer passed to NewProvider to exactly match the issuer in the discovery document. Authentik returns ".../application/o/<slug>/" with a trailing slash; we were stripping it, causing "issuer did not match". Pass the issuer verbatim and fall back to the alternate slash form. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -64,7 +64,23 @@ func (p *OIDCProvider) Configure(ctx context.Context, cfg config.OIDCConfig, red
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
provider, err := oidc.NewProvider(ctx, strings.TrimRight(cfg.Issuer, "/"))
|
// go-oidc strictly checks that the issuer we pass matches the issuer field
|
||||||
|
// in the discovery document. Providers differ on the trailing slash
|
||||||
|
// (Authentik returns ".../application/o/<slug>/" WITH a slash), so try the
|
||||||
|
// value verbatim first and then the alternate slash form.
|
||||||
|
issuer := strings.TrimSpace(cfg.Issuer)
|
||||||
|
provider, err := oidc.NewProvider(ctx, issuer)
|
||||||
|
if err != nil {
|
||||||
|
var alt string
|
||||||
|
if strings.HasSuffix(issuer, "/") {
|
||||||
|
alt = strings.TrimRight(issuer, "/")
|
||||||
|
} else {
|
||||||
|
alt = issuer + "/"
|
||||||
|
}
|
||||||
|
if provider2, err2 := oidc.NewProvider(ctx, alt); err2 == nil {
|
||||||
|
provider, err = provider2, nil
|
||||||
|
}
|
||||||
|
}
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user