in pkg/auth/autorest_auth.go [41:78]
func NewAuthorizer(config *Config, env *azure.Environment) (autorest.Authorizer, error) {
// Azure AD Workload Identity webhook will inject the following env vars:
// AZURE_FEDERATED_TOKEN_FILE is the service account token path
// AZURE_AUTHORITY_HOST is the AAD authority hostname
tokenFilePath := os.Getenv("AZURE_FEDERATED_TOKEN_FILE")
authority := os.Getenv("AZURE_AUTHORITY_HOST")
if tokenFilePath == "" || authority == "" {
return nil, fmt.Errorf("required environment variables not set, AZURE_FEDERATED_TOKEN_FILE: %s, AZURE_AUTHORITY_HOST: %s", tokenFilePath, authority)
}
cred := confidential.NewCredFromAssertionCallback(func(context.Context, confidential.AssertionRequestOptions) (string, error) {
return readJWTFromFS(tokenFilePath)
})
// create the confidential client to request an AAD token
confidentialClientApp, err := confidential.New(
fmt.Sprintf("%s%s/oauth2/token", authority, config.TenantID),
config.UserAssignedIdentityID,
cred)
if err != nil {
return nil, fmt.Errorf("failed to create confidential client app: %w", err)
}
result, err := confidentialClientApp.AcquireTokenByCredential(context.Background(), []string{strings.TrimSuffix(env.ResourceManagerEndpoint, "/") + "/.default"})
if err != nil {
klog.ErrorS(err, "failed to acquire token")
return autorest.NewBearerAuthorizer(authResult{}), errors.Wrap(err, "failed to acquire token")
}
return autorest.NewBearerAuthorizer(authResult{
accessToken: result.AccessToken,
expiresOn: result.ExpiresOn,
grantedScopes: result.GrantedScopes,
declinedScopes: result.DeclinedScopes,
}), nil
}