This commit is contained in:
Andrew Barnes 2026-08-07 00:31:22 +00:00 committed by GitHub
commit 03578e5c25
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 33 additions and 7 deletions

View File

@ -8,6 +8,8 @@
## Changes since v7.15.3 ## Changes since v7.15.3
- [#3472](https://github.com/oauth2-proxy/oauth2-proxy/pull/3472) fix: apply configured signing algorithms to extra JWT issuers (#3471) (@Bortlesboat)
# V7.15.3 # V7.15.3
## Release Highlights ## Release Highlights

View File

@ -61,6 +61,7 @@ func Validate(o *options.Options) error {
verifier, err := newVerifierFromJwtIssuer( verifier, err := newVerifierFromJwtIssuer(
o.Providers[0].OIDCConfig.AudienceClaims, o.Providers[0].OIDCConfig.AudienceClaims,
o.Providers[0].OIDCConfig.ExtraAudiences, o.Providers[0].OIDCConfig.ExtraAudiences,
o.Providers[0].OIDCConfig.EnabledSigningAlgs,
jwtIssuer, jwtIssuer,
) )
if err != nil { if err != nil {
@ -143,13 +144,8 @@ func parseJwtIssuers(issuers []string, msgs []string) ([]jwtIssuer, []string) {
// newVerifierFromJwtIssuer takes in issuer information in jwtIssuer info and returns // newVerifierFromJwtIssuer takes in issuer information in jwtIssuer info and returns
// a verifier for that issuer. // a verifier for that issuer.
func newVerifierFromJwtIssuer(audienceClaims []string, extraAudiences []string, jwtIssuer jwtIssuer) (internaloidc.IDTokenVerifier, error) { func newVerifierFromJwtIssuer(audienceClaims []string, extraAudiences []string, supportedSigningAlgs []string, jwtIssuer jwtIssuer) (internaloidc.IDTokenVerifier, error) {
pvOpts := internaloidc.ProviderVerifierOptions{ pvOpts := providerVerifierOptionsFromJwtIssuer(audienceClaims, extraAudiences, supportedSigningAlgs, jwtIssuer)
AudienceClaims: audienceClaims,
ClientID: jwtIssuer.audience,
ExtraAudiences: extraAudiences,
IssuerURL: jwtIssuer.issuerURI,
}
pv, err := internaloidc.NewProviderVerifier(context.TODO(), pvOpts) pv, err := internaloidc.NewProviderVerifier(context.TODO(), pvOpts)
if err != nil { if err != nil {
@ -166,6 +162,16 @@ func newVerifierFromJwtIssuer(audienceClaims []string, extraAudiences []string,
return pv.Verifier(), nil return pv.Verifier(), nil
} }
func providerVerifierOptionsFromJwtIssuer(audienceClaims []string, extraAudiences []string, supportedSigningAlgs []string, jwtIssuer jwtIssuer) internaloidc.ProviderVerifierOptions {
return internaloidc.ProviderVerifierOptions{
AudienceClaims: audienceClaims,
ClientID: jwtIssuer.audience,
ExtraAudiences: extraAudiences,
IssuerURL: jwtIssuer.issuerURI,
SupportedSigningAlgs: supportedSigningAlgs,
}
}
// jwtIssuer hold parsed JWT issuer info that's used to construct a verifier. // jwtIssuer hold parsed JWT issuer info that's used to construct a verifier.
type jwtIssuer struct { type jwtIssuer struct {
issuerURI string issuerURI string

View File

@ -107,6 +107,24 @@ func TestInitializedOptions(t *testing.T) {
assert.Equal(t, nil, Validate(o)) assert.Equal(t, nil, Validate(o))
} }
func TestProviderVerifierOptionsFromJwtIssuer(t *testing.T) {
audienceClaims := []string{"aud", "client_id"}
extraAudiences := []string{"extra-audience"}
supportedSigningAlgs := []string{"RS256", "ES256"}
issuer := jwtIssuer{
issuerURI: "https://issuer.example.com",
audience: "client-id",
}
got := providerVerifierOptionsFromJwtIssuer(audienceClaims, extraAudiences, supportedSigningAlgs, issuer)
assert.Equal(t, audienceClaims, got.AudienceClaims)
assert.Equal(t, issuer.audience, got.ClientID)
assert.Equal(t, extraAudiences, got.ExtraAudiences)
assert.Equal(t, issuer.issuerURI, got.IssuerURL)
assert.Equal(t, supportedSigningAlgs, got.SupportedSigningAlgs)
}
// Note that it's not worth testing nonparseable URLs, since url.Parse() // Note that it's not worth testing nonparseable URLs, since url.Parse()
// seems to parse damn near anything. // seems to parse damn near anything.
func TestRedirectURL(t *testing.T) { func TestRedirectURL(t *testing.T) {