mirror of
https://github.com/ceph/ceph-csi.git
synced 2025-06-13 10:33:35 +00:00
rebase: bump the github-dependencies group with 2 updates
Bumps the github-dependencies group with 2 updates: [github.com/aws/aws-sdk-go-v2/service/sts](https://github.com/aws/aws-sdk-go-v2) and [github.com/Azure/azure-sdk-for-go/sdk/security/keyvault/azsecrets](https://github.com/Azure/azure-sdk-for-go). Updates `github.com/aws/aws-sdk-go-v2/service/sts` from 1.32.3 to 1.32.4 - [Release notes](https://github.com/aws/aws-sdk-go-v2/releases) - [Commits](https://github.com/aws/aws-sdk-go-v2/compare/v1.32.3...v1.32.4) Updates `github.com/Azure/azure-sdk-for-go/sdk/security/keyvault/azsecrets` from 1.2.0 to 1.3.0 - [Release notes](https://github.com/Azure/azure-sdk-for-go/releases) - [Changelog](https://github.com/Azure/azure-sdk-for-go/blob/main/documentation/release.md) - [Commits](https://github.com/Azure/azure-sdk-for-go/compare/v1.2...sdk/azcore/v1.3.0) --- updated-dependencies: - dependency-name: github.com/aws/aws-sdk-go-v2/service/sts dependency-type: direct:production update-type: version-update:semver-patch dependency-group: github-dependencies - dependency-name: github.com/Azure/azure-sdk-for-go/sdk/security/keyvault/azsecrets dependency-type: direct:production update-type: version-update:semver-minor dependency-group: github-dependencies ... Signed-off-by: dependabot[bot] <support@github.com>
This commit is contained in:
committed by
mergify[bot]
parent
89ab2e78e8
commit
710e7d273c
@ -18,6 +18,8 @@ import (
|
||||
"encoding/pem"
|
||||
"errors"
|
||||
"fmt"
|
||||
"os"
|
||||
"strings"
|
||||
|
||||
"github.com/AzureAD/microsoft-authentication-library-for-go/apps/cache"
|
||||
"github.com/AzureAD/microsoft-authentication-library-for-go/apps/internal/base"
|
||||
@ -315,16 +317,21 @@ func New(authority, clientID string, cred Credential, options ...Option) (Client
|
||||
if err != nil {
|
||||
return Client{}, err
|
||||
}
|
||||
|
||||
autoEnabledRegion := os.Getenv("MSAL_FORCE_REGION")
|
||||
opts := clientOptions{
|
||||
authority: authority,
|
||||
// if the caller specified a token provider, it will handle all details of authentication, using Client only as a token cache
|
||||
disableInstanceDiscovery: cred.tokenProvider != nil,
|
||||
httpClient: shared.DefaultClient,
|
||||
azureRegion: autoEnabledRegion,
|
||||
}
|
||||
for _, o := range options {
|
||||
o(&opts)
|
||||
}
|
||||
if strings.EqualFold(opts.azureRegion, "DisableMsalForceRegion") {
|
||||
opts.azureRegion = ""
|
||||
}
|
||||
|
||||
baseOpts := []base.Option{
|
||||
base.WithCacheAccessor(opts.accessor),
|
||||
base.WithClientCapabilities(opts.capabilities),
|
||||
|
@ -89,8 +89,23 @@ type AuthResult struct {
|
||||
ExpiresOn time.Time
|
||||
GrantedScopes []string
|
||||
DeclinedScopes []string
|
||||
Metadata AuthResultMetadata
|
||||
}
|
||||
|
||||
// AuthResultMetadata which contains meta data for the AuthResult
|
||||
type AuthResultMetadata struct {
|
||||
TokenSource TokenSource
|
||||
}
|
||||
|
||||
type TokenSource int
|
||||
|
||||
// These are all the types of token flows.
|
||||
const (
|
||||
SourceUnknown TokenSource = 0
|
||||
IdentityProvider TokenSource = 1
|
||||
Cache TokenSource = 2
|
||||
)
|
||||
|
||||
// AuthResultFromStorage creates an AuthResult from a storage token response (which is generated from the cache).
|
||||
func AuthResultFromStorage(storageTokenResponse storage.TokenResponse) (AuthResult, error) {
|
||||
if err := storageTokenResponse.AccessToken.Validate(); err != nil {
|
||||
@ -109,7 +124,17 @@ func AuthResultFromStorage(storageTokenResponse storage.TokenResponse) (AuthResu
|
||||
return AuthResult{}, fmt.Errorf("problem decoding JWT token: %w", err)
|
||||
}
|
||||
}
|
||||
return AuthResult{account, idToken, accessToken, storageTokenResponse.AccessToken.ExpiresOn.T, grantedScopes, nil}, nil
|
||||
return AuthResult{
|
||||
Account: account,
|
||||
IDToken: idToken,
|
||||
AccessToken: accessToken,
|
||||
ExpiresOn: storageTokenResponse.AccessToken.ExpiresOn.T,
|
||||
GrantedScopes: grantedScopes,
|
||||
DeclinedScopes: nil,
|
||||
Metadata: AuthResultMetadata{
|
||||
TokenSource: Cache,
|
||||
},
|
||||
}, nil
|
||||
}
|
||||
|
||||
// NewAuthResult creates an AuthResult.
|
||||
@ -123,6 +148,9 @@ func NewAuthResult(tokenResponse accesstokens.TokenResponse, account shared.Acco
|
||||
AccessToken: tokenResponse.AccessToken,
|
||||
ExpiresOn: tokenResponse.ExpiresOn.T,
|
||||
GrantedScopes: tokenResponse.GrantedScopes.Slice,
|
||||
Metadata: AuthResultMetadata{
|
||||
TokenSource: IdentityProvider,
|
||||
},
|
||||
}, nil
|
||||
}
|
||||
|
||||
|
@ -18,10 +18,6 @@ import (
|
||||
)
|
||||
|
||||
const addField = "AdditionalFields"
|
||||
const (
|
||||
marshalJSON = "MarshalJSON"
|
||||
unmarshalJSON = "UnmarshalJSON"
|
||||
)
|
||||
|
||||
var (
|
||||
leftBrace = []byte("{")[0]
|
||||
@ -106,48 +102,38 @@ func delimIs(got json.Token, want rune) bool {
|
||||
// hasMarshalJSON will determine if the value or a pointer to this value has
|
||||
// the MarshalJSON method.
|
||||
func hasMarshalJSON(v reflect.Value) bool {
|
||||
if method := v.MethodByName(marshalJSON); method.Kind() != reflect.Invalid {
|
||||
_, ok := v.Interface().(json.Marshaler)
|
||||
return ok
|
||||
}
|
||||
|
||||
if v.Kind() == reflect.Ptr {
|
||||
v = v.Elem()
|
||||
} else {
|
||||
if !v.CanAddr() {
|
||||
return false
|
||||
ok := false
|
||||
if _, ok = v.Interface().(json.Marshaler); !ok {
|
||||
var i any
|
||||
if v.Kind() == reflect.Ptr {
|
||||
i = v.Elem().Interface()
|
||||
} else if v.CanAddr() {
|
||||
i = v.Addr().Interface()
|
||||
}
|
||||
v = v.Addr()
|
||||
_, ok = i.(json.Marshaler)
|
||||
}
|
||||
|
||||
if method := v.MethodByName(marshalJSON); method.Kind() != reflect.Invalid {
|
||||
_, ok := v.Interface().(json.Marshaler)
|
||||
return ok
|
||||
}
|
||||
return false
|
||||
return ok
|
||||
}
|
||||
|
||||
// callMarshalJSON will call MarshalJSON() method on the value or a pointer to this value.
|
||||
// This will panic if the method is not defined.
|
||||
func callMarshalJSON(v reflect.Value) ([]byte, error) {
|
||||
if method := v.MethodByName(marshalJSON); method.Kind() != reflect.Invalid {
|
||||
marsh := v.Interface().(json.Marshaler)
|
||||
if marsh, ok := v.Interface().(json.Marshaler); ok {
|
||||
return marsh.MarshalJSON()
|
||||
}
|
||||
|
||||
if v.Kind() == reflect.Ptr {
|
||||
v = v.Elem()
|
||||
if marsh, ok := v.Elem().Interface().(json.Marshaler); ok {
|
||||
return marsh.MarshalJSON()
|
||||
}
|
||||
} else {
|
||||
if v.CanAddr() {
|
||||
v = v.Addr()
|
||||
if marsh, ok := v.Addr().Interface().(json.Marshaler); ok {
|
||||
return marsh.MarshalJSON()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if method := v.MethodByName(unmarshalJSON); method.Kind() != reflect.Invalid {
|
||||
marsh := v.Interface().(json.Marshaler)
|
||||
return marsh.MarshalJSON()
|
||||
}
|
||||
|
||||
panic(fmt.Sprintf("callMarshalJSON called on type %T that does not have MarshalJSON defined", v.Interface()))
|
||||
}
|
||||
|
||||
@ -162,12 +148,8 @@ func hasUnmarshalJSON(v reflect.Value) bool {
|
||||
v = v.Addr()
|
||||
}
|
||||
|
||||
if method := v.MethodByName(unmarshalJSON); method.Kind() != reflect.Invalid {
|
||||
_, ok := v.Interface().(json.Unmarshaler)
|
||||
return ok
|
||||
}
|
||||
|
||||
return false
|
||||
_, ok := v.Interface().(json.Unmarshaler)
|
||||
return ok
|
||||
}
|
||||
|
||||
// hasOmitEmpty indicates if the field has instructed us to not output
|
||||
|
@ -7,6 +7,7 @@ package local
|
||||
import (
|
||||
"context"
|
||||
"fmt"
|
||||
"html"
|
||||
"net"
|
||||
"net/http"
|
||||
"strconv"
|
||||
@ -141,7 +142,7 @@ func (s *Server) handler(w http.ResponseWriter, r *http.Request) {
|
||||
|
||||
headerErr := q.Get("error")
|
||||
if headerErr != "" {
|
||||
desc := q.Get("error_description")
|
||||
desc := html.EscapeString(q.Get("error_description"))
|
||||
// Note: It is a little weird we handle some errors by not going to the failPage. If they all should,
|
||||
// change this to s.error() and make s.error() write the failPage instead of an error code.
|
||||
_, _ = w.Write([]byte(fmt.Sprintf(failPage, headerErr, desc)))
|
||||
|
@ -10,6 +10,8 @@ import (
|
||||
"io"
|
||||
"time"
|
||||
|
||||
"github.com/google/uuid"
|
||||
|
||||
"github.com/AzureAD/microsoft-authentication-library-for-go/apps/errors"
|
||||
"github.com/AzureAD/microsoft-authentication-library-for-go/apps/internal/exported"
|
||||
internalTime "github.com/AzureAD/microsoft-authentication-library-for-go/apps/internal/json/types/time"
|
||||
@ -18,7 +20,6 @@ import (
|
||||
"github.com/AzureAD/microsoft-authentication-library-for-go/apps/internal/oauth/ops/authority"
|
||||
"github.com/AzureAD/microsoft-authentication-library-for-go/apps/internal/oauth/ops/wstrust"
|
||||
"github.com/AzureAD/microsoft-authentication-library-for-go/apps/internal/oauth/ops/wstrust/defs"
|
||||
"github.com/google/uuid"
|
||||
)
|
||||
|
||||
// ResolveEndpointer contains the methods for resolving authority endpoints.
|
||||
@ -331,7 +332,7 @@ func (t *Client) DeviceCode(ctx context.Context, authParams authority.AuthParams
|
||||
func (t *Client) resolveEndpoint(ctx context.Context, authParams *authority.AuthParams, userPrincipalName string) error {
|
||||
endpoints, err := t.Resolver.ResolveEndpoints(ctx, authParams.AuthorityInfo, userPrincipalName)
|
||||
if err != nil {
|
||||
return fmt.Errorf("unable to resolve an endpoint: %s", err)
|
||||
return fmt.Errorf("unable to resolve an endpoint: %w", err)
|
||||
}
|
||||
authParams.Endpoints = endpoints
|
||||
return nil
|
||||
|
@ -23,7 +23,7 @@ import (
|
||||
|
||||
const (
|
||||
authorizationEndpoint = "https://%v/%v/oauth2/v2.0/authorize"
|
||||
instanceDiscoveryEndpoint = "https://%v/common/discovery/instance"
|
||||
aadInstanceDiscoveryEndpoint = "https://%v/common/discovery/instance"
|
||||
tenantDiscoveryEndpointWithRegion = "https://%s.%s/%s/v2.0/.well-known/openid-configuration"
|
||||
regionName = "REGION_NAME"
|
||||
defaultAPIVersion = "2021-10-01"
|
||||
@ -47,13 +47,12 @@ type jsonCaller interface {
|
||||
}
|
||||
|
||||
var aadTrustedHostList = map[string]bool{
|
||||
"login.windows.net": true, // Microsoft Azure Worldwide - Used in validation scenarios where host is not this list
|
||||
"login.chinacloudapi.cn": true, // Microsoft Azure China
|
||||
"login.microsoftonline.de": true, // Microsoft Azure Blackforest
|
||||
"login-us.microsoftonline.com": true, // Microsoft Azure US Government - Legacy
|
||||
"login.microsoftonline.us": true, // Microsoft Azure US Government
|
||||
"login.microsoftonline.com": true, // Microsoft Azure Worldwide
|
||||
"login.cloudgovapi.us": true, // Microsoft Azure US Government
|
||||
"login.windows.net": true, // Microsoft Azure Worldwide - Used in validation scenarios where host is not this list
|
||||
"login.partner.microsoftonline.cn": true, // Microsoft Azure China
|
||||
"login.microsoftonline.de": true, // Microsoft Azure Blackforest
|
||||
"login-us.microsoftonline.com": true, // Microsoft Azure US Government - Legacy
|
||||
"login.microsoftonline.us": true, // Microsoft Azure US Government
|
||||
"login.microsoftonline.com": true, // Microsoft Azure Worldwide
|
||||
}
|
||||
|
||||
// TrustedHost checks if an AAD host is trusted/valid.
|
||||
@ -137,8 +136,12 @@ const (
|
||||
const (
|
||||
AAD = "MSSTS"
|
||||
ADFS = "ADFS"
|
||||
DSTS = "DSTS"
|
||||
)
|
||||
|
||||
// DSTSTenant is referenced throughout multiple files, let us use a const in case we ever need to change it.
|
||||
const DSTSTenant = "7a433bfc-2514-4697-b467-e0933190487f"
|
||||
|
||||
// AuthenticationScheme is an extensibility mechanism designed to be used only by Azure Arc for proof of possession access tokens.
|
||||
type AuthenticationScheme interface {
|
||||
// Extra parameters that are added to the request to the /token endpoint.
|
||||
@ -236,23 +239,26 @@ func NewAuthParams(clientID string, authorityInfo Info) AuthParams {
|
||||
// - the client is configured to authenticate only Microsoft accounts via the "consumers" endpoint
|
||||
// - the resulting authority URL is invalid
|
||||
func (p AuthParams) WithTenant(ID string) (AuthParams, error) {
|
||||
switch ID {
|
||||
case "", p.AuthorityInfo.Tenant:
|
||||
// keep the default tenant because the caller didn't override it
|
||||
if ID == "" || ID == p.AuthorityInfo.Tenant {
|
||||
return p, nil
|
||||
case "common", "consumers", "organizations":
|
||||
if p.AuthorityInfo.AuthorityType == AAD {
|
||||
}
|
||||
|
||||
var authority string
|
||||
switch p.AuthorityInfo.AuthorityType {
|
||||
case AAD:
|
||||
if ID == "common" || ID == "consumers" || ID == "organizations" {
|
||||
return p, fmt.Errorf(`tenant ID must be a specific tenant, not "%s"`, ID)
|
||||
}
|
||||
// else we'll return a better error below
|
||||
if p.AuthorityInfo.Tenant == "consumers" {
|
||||
return p, errors.New(`client is configured to authenticate only personal Microsoft accounts, via the "consumers" endpoint`)
|
||||
}
|
||||
authority = "https://" + path.Join(p.AuthorityInfo.Host, ID)
|
||||
case ADFS:
|
||||
return p, errors.New("ADFS authority doesn't support tenants")
|
||||
case DSTS:
|
||||
return p, errors.New("dSTS authority doesn't support tenants")
|
||||
}
|
||||
if p.AuthorityInfo.AuthorityType != AAD {
|
||||
return p, errors.New("the authority doesn't support tenants")
|
||||
}
|
||||
if p.AuthorityInfo.Tenant == "consumers" {
|
||||
return p, errors.New(`client is configured to authenticate only personal Microsoft accounts, via the "consumers" endpoint`)
|
||||
}
|
||||
authority := "https://" + path.Join(p.AuthorityInfo.Host, ID)
|
||||
|
||||
info, err := NewInfoFromAuthorityURI(authority, p.AuthorityInfo.ValidateAuthority, p.AuthorityInfo.InstanceDiscoveryDisabled)
|
||||
if err == nil {
|
||||
info.Region = p.AuthorityInfo.Region
|
||||
@ -344,44 +350,59 @@ type Info struct {
|
||||
Host string
|
||||
CanonicalAuthorityURI string
|
||||
AuthorityType string
|
||||
UserRealmURIPrefix string
|
||||
ValidateAuthority bool
|
||||
Tenant string
|
||||
Region string
|
||||
InstanceDiscoveryDisabled bool
|
||||
}
|
||||
|
||||
func firstPathSegment(u *url.URL) (string, error) {
|
||||
pathParts := strings.Split(u.EscapedPath(), "/")
|
||||
if len(pathParts) >= 2 {
|
||||
return pathParts[1], nil
|
||||
}
|
||||
|
||||
return "", errors.New(`authority must be an https URL such as "https://login.microsoftonline.com/<your tenant>"`)
|
||||
}
|
||||
|
||||
// NewInfoFromAuthorityURI creates an AuthorityInfo instance from the authority URL provided.
|
||||
func NewInfoFromAuthorityURI(authority string, validateAuthority bool, instanceDiscoveryDisabled bool) (Info, error) {
|
||||
u, err := url.Parse(strings.ToLower(authority))
|
||||
if err != nil || u.Scheme != "https" {
|
||||
return Info{}, errors.New(`authority must be an https URL such as "https://login.microsoftonline.com/<your tenant>"`)
|
||||
|
||||
cannonicalAuthority := authority
|
||||
|
||||
// suffix authority with / if it doesn't have one
|
||||
if !strings.HasSuffix(cannonicalAuthority, "/") {
|
||||
cannonicalAuthority += "/"
|
||||
}
|
||||
|
||||
tenant, err := firstPathSegment(u)
|
||||
u, err := url.Parse(strings.ToLower(cannonicalAuthority))
|
||||
|
||||
if err != nil {
|
||||
return Info{}, err
|
||||
return Info{}, fmt.Errorf("couldn't parse authority url: %w", err)
|
||||
}
|
||||
authorityType := AAD
|
||||
if tenant == "adfs" {
|
||||
if u.Scheme != "https" {
|
||||
return Info{}, errors.New("authority url scheme must be https")
|
||||
}
|
||||
|
||||
pathParts := strings.Split(u.EscapedPath(), "/")
|
||||
if len(pathParts) < 3 {
|
||||
return Info{}, errors.New(`authority must be an URL such as "https://login.microsoftonline.com/<your tenant>"`)
|
||||
}
|
||||
|
||||
var authorityType, tenant string
|
||||
switch pathParts[1] {
|
||||
case "adfs":
|
||||
authorityType = ADFS
|
||||
case "dstsv2":
|
||||
if len(pathParts) != 4 {
|
||||
return Info{}, fmt.Errorf("dSTS authority must be an https URL such as https://<authority>/dstsv2/%s", DSTSTenant)
|
||||
}
|
||||
if pathParts[2] != DSTSTenant {
|
||||
return Info{}, fmt.Errorf("dSTS authority only accepts a single tenant %q", DSTSTenant)
|
||||
}
|
||||
authorityType = DSTS
|
||||
tenant = DSTSTenant
|
||||
default:
|
||||
authorityType = AAD
|
||||
tenant = pathParts[1]
|
||||
}
|
||||
|
||||
// u.Host includes the port, if any, which is required for private cloud deployments
|
||||
return Info{
|
||||
Host: u.Host,
|
||||
CanonicalAuthorityURI: fmt.Sprintf("https://%v/%v/", u.Host, tenant),
|
||||
CanonicalAuthorityURI: cannonicalAuthority,
|
||||
AuthorityType: authorityType,
|
||||
UserRealmURIPrefix: fmt.Sprintf("https://%v/common/userrealm/", u.Hostname()),
|
||||
ValidateAuthority: validateAuthority,
|
||||
Tenant: tenant,
|
||||
InstanceDiscoveryDisabled: instanceDiscoveryDisabled,
|
||||
@ -525,7 +546,7 @@ func (c Client) AADInstanceDiscovery(ctx context.Context, authorityInfo Info) (I
|
||||
discoveryHost = authorityInfo.Host
|
||||
}
|
||||
|
||||
endpoint := fmt.Sprintf(instanceDiscoveryEndpoint, discoveryHost)
|
||||
endpoint := fmt.Sprintf(aadInstanceDiscoveryEndpoint, discoveryHost)
|
||||
err = c.Comm.JSONCall(ctx, endpoint, http.Header{}, qv, nil, &resp)
|
||||
}
|
||||
return resp, err
|
||||
@ -543,17 +564,19 @@ func detectRegion(ctx context.Context) string {
|
||||
client := http.Client{
|
||||
Timeout: time.Duration(2 * time.Second),
|
||||
}
|
||||
req, _ := http.NewRequest("GET", imdsEndpoint, nil)
|
||||
req, _ := http.NewRequestWithContext(ctx, http.MethodGet, imdsEndpoint, nil)
|
||||
req.Header.Set("Metadata", "true")
|
||||
resp, err := client.Do(req)
|
||||
if err == nil {
|
||||
defer resp.Body.Close()
|
||||
}
|
||||
// If the request times out or there is an error, it is retried once
|
||||
if err != nil || resp.StatusCode != 200 {
|
||||
if err != nil || resp.StatusCode != http.StatusOK {
|
||||
resp, err = client.Do(req)
|
||||
if err != nil || resp.StatusCode != 200 {
|
||||
if err != nil || resp.StatusCode != http.StatusOK {
|
||||
return ""
|
||||
}
|
||||
}
|
||||
defer resp.Body.Close()
|
||||
response, err := io.ReadAll(resp.Body)
|
||||
if err != nil {
|
||||
return ""
|
||||
|
@ -18,10 +18,11 @@ import (
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
"github.com/google/uuid"
|
||||
|
||||
"github.com/AzureAD/microsoft-authentication-library-for-go/apps/errors"
|
||||
customJSON "github.com/AzureAD/microsoft-authentication-library-for-go/apps/internal/json"
|
||||
"github.com/AzureAD/microsoft-authentication-library-for-go/apps/internal/version"
|
||||
"github.com/google/uuid"
|
||||
)
|
||||
|
||||
// HTTPClient represents an HTTP client.
|
||||
@ -70,15 +71,13 @@ func (c *Client) JSONCall(ctx context.Context, endpoint string, headers http.Hea
|
||||
unmarshal = customJSON.Unmarshal
|
||||
}
|
||||
|
||||
u, err := url.Parse(endpoint)
|
||||
req, err := http.NewRequestWithContext(ctx, http.MethodGet, fmt.Sprintf("%s?%s", endpoint, qv.Encode()), nil)
|
||||
if err != nil {
|
||||
return fmt.Errorf("could not parse path URL(%s): %w", endpoint, err)
|
||||
return fmt.Errorf("could not create request: %w", err)
|
||||
}
|
||||
u.RawQuery = qv.Encode()
|
||||
|
||||
addStdHeaders(headers)
|
||||
|
||||
req := &http.Request{Method: http.MethodGet, URL: u, Header: headers}
|
||||
req.Header = headers
|
||||
|
||||
if body != nil {
|
||||
// Note: In case your wondering why we are not gzip encoding....
|
||||
|
@ -18,9 +18,6 @@ import (
|
||||
"github.com/AzureAD/microsoft-authentication-library-for-go/apps/internal/oauth/ops/authority"
|
||||
)
|
||||
|
||||
// ADFS is an active directory federation service authority type.
|
||||
const ADFS = "ADFS"
|
||||
|
||||
type cacheEntry struct {
|
||||
Endpoints authority.Endpoints
|
||||
ValidForDomainsInList map[string]bool
|
||||
@ -51,7 +48,7 @@ func (m *authorityEndpoint) ResolveEndpoints(ctx context.Context, authorityInfo
|
||||
return endpoints, nil
|
||||
}
|
||||
|
||||
endpoint, err := m.openIDConfigurationEndpoint(ctx, authorityInfo, userPrincipalName)
|
||||
endpoint, err := m.openIDConfigurationEndpoint(ctx, authorityInfo)
|
||||
if err != nil {
|
||||
return authority.Endpoints{}, err
|
||||
}
|
||||
@ -83,7 +80,7 @@ func (m *authorityEndpoint) cachedEndpoints(authorityInfo authority.Info, userPr
|
||||
defer m.mu.Unlock()
|
||||
|
||||
if cacheEntry, ok := m.cache[authorityInfo.CanonicalAuthorityURI]; ok {
|
||||
if authorityInfo.AuthorityType == ADFS {
|
||||
if authorityInfo.AuthorityType == authority.ADFS {
|
||||
domain, err := adfsDomainFromUpn(userPrincipalName)
|
||||
if err == nil {
|
||||
if _, ok := cacheEntry.ValidForDomainsInList[domain]; ok {
|
||||
@ -102,7 +99,7 @@ func (m *authorityEndpoint) addCachedEndpoints(authorityInfo authority.Info, use
|
||||
|
||||
updatedCacheEntry := createcacheEntry(endpoints)
|
||||
|
||||
if authorityInfo.AuthorityType == ADFS {
|
||||
if authorityInfo.AuthorityType == authority.ADFS {
|
||||
// Since we're here, we've made a call to the backend. We want to ensure we're caching
|
||||
// the latest values from the server.
|
||||
if cacheEntry, ok := m.cache[authorityInfo.CanonicalAuthorityURI]; ok {
|
||||
@ -119,9 +116,12 @@ func (m *authorityEndpoint) addCachedEndpoints(authorityInfo authority.Info, use
|
||||
m.cache[authorityInfo.CanonicalAuthorityURI] = updatedCacheEntry
|
||||
}
|
||||
|
||||
func (m *authorityEndpoint) openIDConfigurationEndpoint(ctx context.Context, authorityInfo authority.Info, userPrincipalName string) (string, error) {
|
||||
if authorityInfo.Tenant == "adfs" {
|
||||
func (m *authorityEndpoint) openIDConfigurationEndpoint(ctx context.Context, authorityInfo authority.Info) (string, error) {
|
||||
if authorityInfo.AuthorityType == authority.ADFS {
|
||||
return fmt.Sprintf("https://%s/adfs/.well-known/openid-configuration", authorityInfo.Host), nil
|
||||
} else if authorityInfo.AuthorityType == authority.DSTS {
|
||||
return fmt.Sprintf("https://%s/dstsv2/%s/v2.0/.well-known/openid-configuration", authorityInfo.Host, authority.DSTSTenant), nil
|
||||
|
||||
} else if authorityInfo.ValidateAuthority && !authority.TrustedHost(authorityInfo.Host) {
|
||||
resp, err := m.rest.Authority().AADInstanceDiscovery(ctx, authorityInfo)
|
||||
if err != nil {
|
||||
@ -134,7 +134,6 @@ func (m *authorityEndpoint) openIDConfigurationEndpoint(ctx context.Context, aut
|
||||
return "", err
|
||||
}
|
||||
return resp.TenantDiscoveryEndpoint, nil
|
||||
|
||||
}
|
||||
|
||||
return authorityInfo.CanonicalAuthorityURI + "v2.0/.well-known/openid-configuration", nil
|
||||
|
Reference in New Issue
Block a user