mirror of
https://github.com/oauth2-proxy/oauth2-proxy.git
synced 2025-02-07 13:41:38 +02:00
bugfix: OIDCConfig based providers are not respecting flags and configs (#2299)
* add full support for all oidc config based providers to use and respect all configs set via OIDCConfig * add changelog entry --------- Co-authored-by: Joel Speed <Joel.speed@hotmail.co.uk>
This commit is contained in:
parent
0ddb5e7b61
commit
fc6e7fdbd1
@ -18,6 +18,7 @@
|
||||
- [#1866](https://github.com/oauth2-proxy/oauth2-proxy/pull/1866) Add support for unix socker as upstream (@babs)
|
||||
- [#1949](https://github.com/oauth2-proxy/oauth2-proxy/pull/1949) Allow cookie names with dots in redis sessions (@miguelborges99)
|
||||
- [#2297](https://github.com/oauth2-proxy/oauth2-proxy/pull/2297) Add nightly build and push (@tuunit)
|
||||
- [#2299](https://github.com/oauth2-proxy/oauth2-proxy/pull/2299) bugfix: OIDCConfig based providers are not respecting flags and configs (@tuunit)
|
||||
- [#2248](https://github.com/oauth2-proxy/oauth2-proxy/pull/2248) Added support for semicolons in query strings.
|
||||
|
||||
# V7.5.1
|
||||
|
@ -29,7 +29,7 @@ const (
|
||||
)
|
||||
|
||||
// NewADFSProvider initiates a new ADFSProvider
|
||||
func NewADFSProvider(p *ProviderData, opts options.ADFSOptions) *ADFSProvider {
|
||||
func NewADFSProvider(p *ProviderData, opts options.Provider) *ADFSProvider {
|
||||
p.setProviderDefaults(providerDefaults{
|
||||
name: adfsProviderName,
|
||||
scope: adfsDefaultScope,
|
||||
@ -46,11 +46,11 @@ func NewADFSProvider(p *ProviderData, opts options.ADFSOptions) *ADFSProvider {
|
||||
}
|
||||
}
|
||||
|
||||
oidcProvider := NewOIDCProvider(p, options.OIDCOptions{InsecureSkipNonce: false})
|
||||
oidcProvider := NewOIDCProvider(p, opts.OIDCConfig)
|
||||
|
||||
return &ADFSProvider{
|
||||
OIDCProvider: oidcProvider,
|
||||
skipScope: opts.SkipScope,
|
||||
skipScope: opts.ADFSConfig.SkipScope,
|
||||
oidcEnrichFunc: oidcProvider.EnrichSession,
|
||||
oidcRefreshFunc: oidcProvider.RefreshSession,
|
||||
}
|
||||
|
@ -63,7 +63,7 @@ func testADFSProvider(hostname string) *ADFSProvider {
|
||||
Scope: "",
|
||||
Verifier: o,
|
||||
EmailClaim: options.OIDCEmailClaim,
|
||||
}, options.ADFSOptions{})
|
||||
}, options.Provider{})
|
||||
|
||||
if hostname != "" {
|
||||
updateURL(p.Data().LoginURL, hostname)
|
||||
@ -134,12 +134,12 @@ var _ = Describe("ADFS Provider Tests", func() {
|
||||
|
||||
Context("New Provider Init", func() {
|
||||
It("uses defaults", func() {
|
||||
providerData := NewADFSProvider(&ProviderData{}, options.ADFSOptions{}).Data()
|
||||
providerData := NewADFSProvider(&ProviderData{}, options.Provider{}).Data()
|
||||
Expect(providerData.ProviderName).To(Equal("ADFS"))
|
||||
Expect(providerData.Scope).To(Equal(oidcDefaultScope))
|
||||
})
|
||||
It("uses custom scope", func() {
|
||||
providerData := NewADFSProvider(&ProviderData{Scope: "openid email"}, options.ADFSOptions{}).Data()
|
||||
providerData := NewADFSProvider(&ProviderData{Scope: "openid email"}, options.Provider{}).Data()
|
||||
Expect(providerData.ProviderName).To(Equal("ADFS"))
|
||||
Expect(providerData.Scope).To(Equal("openid email"))
|
||||
Expect(providerData.Scope).NotTo(Equal(oidcDefaultScope))
|
||||
@ -172,7 +172,9 @@ var _ = Describe("ADFS Provider Tests", func() {
|
||||
p := NewADFSProvider(&ProviderData{
|
||||
ProtectedResource: resource,
|
||||
Scope: "",
|
||||
}, options.ADFSOptions{SkipScope: true})
|
||||
}, options.Provider{
|
||||
ADFSConfig: options.ADFSOptions{SkipScope: true},
|
||||
})
|
||||
|
||||
result := p.GetLoginURL("https://example.com/adfs/oauth2/", "", "", url.Values{})
|
||||
Expect(result).NotTo(ContainSubstring("scope="))
|
||||
@ -192,7 +194,7 @@ var _ = Describe("ADFS Provider Tests", func() {
|
||||
p := NewADFSProvider(&ProviderData{
|
||||
ProtectedResource: resource,
|
||||
Scope: in.scope,
|
||||
}, options.ADFSOptions{})
|
||||
}, options.Provider{})
|
||||
|
||||
Expect(p.Data().Scope).To(Equal(in.expectedScope))
|
||||
result := p.GetLoginURL("https://example.com/adfs/oauth2/", "", "", url.Values{})
|
||||
|
@ -31,7 +31,7 @@ type GitLabProvider struct {
|
||||
var _ Provider = (*GitLabProvider)(nil)
|
||||
|
||||
// NewGitLabProvider initiates a new GitLabProvider
|
||||
func NewGitLabProvider(p *ProviderData, opts options.GitLabOptions) (*GitLabProvider, error) {
|
||||
func NewGitLabProvider(p *ProviderData, opts options.Provider) (*GitLabProvider, error) {
|
||||
p.setProviderDefaults(providerDefaults{
|
||||
name: gitlabProviderName,
|
||||
})
|
||||
@ -40,15 +40,15 @@ func NewGitLabProvider(p *ProviderData, opts options.GitLabOptions) (*GitLabProv
|
||||
p.Scope = gitlabDefaultScope
|
||||
}
|
||||
|
||||
oidcProvider := NewOIDCProvider(p, options.OIDCOptions{InsecureSkipNonce: false})
|
||||
oidcProvider := NewOIDCProvider(p, opts.OIDCConfig)
|
||||
|
||||
provider := &GitLabProvider{
|
||||
OIDCProvider: oidcProvider,
|
||||
oidcRefreshFunc: oidcProvider.RefreshSession,
|
||||
}
|
||||
provider.setAllowedGroups(opts.Group)
|
||||
provider.setAllowedGroups(opts.GitLabConfig.Group)
|
||||
|
||||
if err := provider.setAllowedProjects(opts.Projects); err != nil {
|
||||
if err := provider.setAllowedProjects(opts.GitLabConfig.Projects); err != nil {
|
||||
return nil, fmt.Errorf("could not configure allowed projects: %v", err)
|
||||
}
|
||||
|
||||
|
@ -14,7 +14,7 @@ import (
|
||||
. "github.com/onsi/gomega"
|
||||
)
|
||||
|
||||
func testGitLabProvider(hostname, scope string, opts options.GitLabOptions) (*GitLabProvider, error) {
|
||||
func testGitLabProvider(hostname, scope string, opts options.Provider) (*GitLabProvider, error) {
|
||||
p, err := NewGitLabProvider(
|
||||
&ProviderData{
|
||||
ProviderName: "",
|
||||
@ -162,7 +162,7 @@ var _ = Describe("Gitlab Provider Tests", func() {
|
||||
bURL, err := url.Parse(b.URL)
|
||||
Expect(err).To(BeNil())
|
||||
|
||||
p, err = testGitLabProvider(bURL.Host, "", options.GitLabOptions{})
|
||||
p, err = testGitLabProvider(bURL.Host, "", options.Provider{})
|
||||
Expect(err).ToNot(HaveOccurred())
|
||||
})
|
||||
|
||||
@ -237,9 +237,11 @@ var _ = Describe("Gitlab Provider Tests", func() {
|
||||
bURL, err := url.Parse(b.URL)
|
||||
Expect(err).To(BeNil())
|
||||
|
||||
p, err := testGitLabProvider(bURL.Host, in.scope, options.GitLabOptions{
|
||||
Group: in.allowedGroups,
|
||||
Projects: in.allowedProjects,
|
||||
p, err := testGitLabProvider(bURL.Host, in.scope, options.Provider{
|
||||
GitLabConfig: options.GitLabOptions{
|
||||
Group: in.allowedGroups,
|
||||
Projects: in.allowedProjects,
|
||||
},
|
||||
})
|
||||
if in.expectedError == nil {
|
||||
Expect(err).To(BeNil())
|
||||
|
@ -16,16 +16,16 @@ type KeycloakOIDCProvider struct {
|
||||
}
|
||||
|
||||
// NewKeycloakOIDCProvider makes a KeycloakOIDCProvider using the ProviderData
|
||||
func NewKeycloakOIDCProvider(p *ProviderData, opts options.KeycloakOptions) *KeycloakOIDCProvider {
|
||||
func NewKeycloakOIDCProvider(p *ProviderData, opts options.Provider) *KeycloakOIDCProvider {
|
||||
p.setProviderDefaults(providerDefaults{
|
||||
name: keycloakOIDCProviderName,
|
||||
})
|
||||
|
||||
provider := &KeycloakOIDCProvider{
|
||||
OIDCProvider: NewOIDCProvider(p, options.OIDCOptions{InsecureSkipNonce: false}),
|
||||
OIDCProvider: NewOIDCProvider(p, opts.OIDCConfig),
|
||||
}
|
||||
|
||||
provider.addAllowedRoles(opts.Roles)
|
||||
provider.addAllowedRoles(opts.KeycloakConfig.Roles)
|
||||
return provider
|
||||
}
|
||||
|
||||
|
@ -40,11 +40,11 @@ func getAccessToken() string {
|
||||
|
||||
func newTestKeycloakOIDCSetup() (*httptest.Server, *KeycloakOIDCProvider) {
|
||||
redeemURL, server := newOIDCServer([]byte(fmt.Sprintf(`{"email": "new@thing.com", "expires_in": 300, "access_token": "%v"}`, getAccessToken())))
|
||||
provider := newKeycloakOIDCProvider(redeemURL, options.KeycloakOptions{})
|
||||
provider := newKeycloakOIDCProvider(redeemURL, options.Provider{})
|
||||
return server, provider
|
||||
}
|
||||
|
||||
func newKeycloakOIDCProvider(serverURL *url.URL, opts options.KeycloakOptions) *KeycloakOIDCProvider {
|
||||
func newKeycloakOIDCProvider(serverURL *url.URL, opts options.Provider) *KeycloakOIDCProvider {
|
||||
verificationOptions := internaloidc.IDTokenVerificationOptions{
|
||||
AudienceClaims: []string{defaultAudienceClaim},
|
||||
ClientID: mockClientID,
|
||||
@ -90,7 +90,7 @@ func newKeycloakOIDCProvider(serverURL *url.URL, opts options.KeycloakOptions) *
|
||||
var _ = Describe("Keycloak OIDC Provider Tests", func() {
|
||||
Context("New Provider Init", func() {
|
||||
It("creates new keycloak oidc provider with expected defaults", func() {
|
||||
p := newKeycloakOIDCProvider(nil, options.KeycloakOptions{})
|
||||
p := newKeycloakOIDCProvider(nil, options.Provider{})
|
||||
providerData := p.Data()
|
||||
Expect(providerData.ProviderName).To(Equal(keycloakOIDCProviderName))
|
||||
Expect(providerData.LoginURL.String()).To(Equal("https://keycloak-oidc.com/oauth/auth"))
|
||||
@ -100,7 +100,7 @@ var _ = Describe("Keycloak OIDC Provider Tests", func() {
|
||||
Expect(providerData.Scope).To(Equal(oidcDefaultScope))
|
||||
})
|
||||
It("creates new keycloak oidc provider with custom scope", func() {
|
||||
p := NewKeycloakOIDCProvider(&ProviderData{Scope: "openid email"}, options.KeycloakOptions{})
|
||||
p := NewKeycloakOIDCProvider(&ProviderData{Scope: "openid email"}, options.Provider{})
|
||||
providerData := p.Data()
|
||||
|
||||
Expect(providerData.ProviderName).To(Equal(keycloakOIDCProviderName))
|
||||
@ -111,8 +111,10 @@ var _ = Describe("Keycloak OIDC Provider Tests", func() {
|
||||
|
||||
Context("Allowed Roles", func() {
|
||||
It("should prefix allowed roles and add them to groups", func() {
|
||||
p := newKeycloakOIDCProvider(nil, options.KeycloakOptions{
|
||||
Roles: []string{"admin", "editor"},
|
||||
p := newKeycloakOIDCProvider(nil, options.Provider{
|
||||
KeycloakConfig: options.KeycloakOptions{
|
||||
Roles: []string{"admin", "editor"},
|
||||
},
|
||||
})
|
||||
Expect(p.AllowedGroups).To(HaveKey("role:admin"))
|
||||
Expect(p.AllowedGroups).To(HaveKey("role:editor"))
|
||||
|
@ -38,7 +38,7 @@ func NewProvider(providerConfig options.Provider) (Provider, error) {
|
||||
}
|
||||
switch providerConfig.Type {
|
||||
case options.ADFSProvider:
|
||||
return NewADFSProvider(providerData, providerConfig.ADFSConfig), nil
|
||||
return NewADFSProvider(providerData, providerConfig), nil
|
||||
case options.AzureProvider:
|
||||
return NewAzureProvider(providerData, providerConfig.AzureConfig), nil
|
||||
case options.BitbucketProvider:
|
||||
@ -50,13 +50,13 @@ func NewProvider(providerConfig options.Provider) (Provider, error) {
|
||||
case options.GitHubProvider:
|
||||
return NewGitHubProvider(providerData, providerConfig.GitHubConfig), nil
|
||||
case options.GitLabProvider:
|
||||
return NewGitLabProvider(providerData, providerConfig.GitLabConfig)
|
||||
return NewGitLabProvider(providerData, providerConfig)
|
||||
case options.GoogleProvider:
|
||||
return NewGoogleProvider(providerData, providerConfig.GoogleConfig)
|
||||
case options.KeycloakProvider:
|
||||
return NewKeycloakProvider(providerData, providerConfig.KeycloakConfig), nil
|
||||
case options.KeycloakOIDCProvider:
|
||||
return NewKeycloakOIDCProvider(providerData, providerConfig.KeycloakConfig), nil
|
||||
return NewKeycloakOIDCProvider(providerData, providerConfig), nil
|
||||
case options.LinkedInProvider:
|
||||
return NewLinkedInProvider(providerData), nil
|
||||
case options.LoginGovProvider:
|
||||
|
Loading…
x
Reference in New Issue
Block a user