|
|
|
|
@ -9,7 +9,6 @@ import (
|
|
|
|
|
"net/http" |
|
|
|
|
"net/url" |
|
|
|
|
"strings" |
|
|
|
|
"sync" |
|
|
|
|
"time" |
|
|
|
|
|
|
|
|
|
"github.com/coreos/go-oidc" |
|
|
|
|
@ -85,18 +84,6 @@ func knownBrokenAuthHeaderProvider(issuerURL string) bool {
|
|
|
|
|
return false |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// golang.org/x/oauth2 doesn't do internal locking. Need to do it in this
|
|
|
|
|
// package ourselves and hope that other packages aren't calling it at the
|
|
|
|
|
// same time.
|
|
|
|
|
var registerMu = new(sync.Mutex) |
|
|
|
|
|
|
|
|
|
func registerBrokenAuthHeaderProvider(url string) { |
|
|
|
|
registerMu.Lock() |
|
|
|
|
defer registerMu.Unlock() |
|
|
|
|
|
|
|
|
|
oauth2.RegisterBrokenAuthHeaderProvider(url) |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// Open returns a connector which can be used to login users through an upstream
|
|
|
|
|
// OpenID Connect provider.
|
|
|
|
|
func (c *Config) Open(id string, logger log.Logger) (conn connector.Connector, err error) { |
|
|
|
|
@ -108,13 +95,15 @@ func (c *Config) Open(id string, logger log.Logger) (conn connector.Connector, e
|
|
|
|
|
return nil, fmt.Errorf("failed to get provider: %v", err) |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
endpoint := provider.Endpoint() |
|
|
|
|
|
|
|
|
|
if c.BasicAuthUnsupported != nil { |
|
|
|
|
// Setting "basicAuthUnsupported" always overrides our detection.
|
|
|
|
|
if *c.BasicAuthUnsupported { |
|
|
|
|
registerBrokenAuthHeaderProvider(provider.Endpoint().TokenURL) |
|
|
|
|
endpoint.AuthStyle = oauth2.AuthStyleInParams |
|
|
|
|
} |
|
|
|
|
} else if knownBrokenAuthHeaderProvider(c.Issuer) { |
|
|
|
|
registerBrokenAuthHeaderProvider(provider.Endpoint().TokenURL) |
|
|
|
|
endpoint.AuthStyle = oauth2.AuthStyleInParams |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
scopes := []string{oidc.ScopeOpenID} |
|
|
|
|
@ -131,7 +120,7 @@ func (c *Config) Open(id string, logger log.Logger) (conn connector.Connector, e
|
|
|
|
|
oauth2Config: &oauth2.Config{ |
|
|
|
|
ClientID: clientID, |
|
|
|
|
ClientSecret: c.ClientSecret, |
|
|
|
|
Endpoint: provider.Endpoint(), |
|
|
|
|
Endpoint: endpoint, |
|
|
|
|
Scopes: scopes, |
|
|
|
|
RedirectURL: c.RedirectURI, |
|
|
|
|
}, |
|
|
|
|
|