in pkg/auth/auth.go [37:107]
func GetServicePrincipalToken(config *config.AzureConfig, aadEndpoint, resource string, proxyMode bool) (adal.OAuthTokenProvider, error) {
oauthConfig, err := adal.NewOAuthConfig(aadEndpoint, config.TenantID)
if err != nil {
return nil, fmt.Errorf("failed to create OAuth config, error: %v", err)
}
if config.UseManagedIdentityExtension {
mlog.Info("using managed identity extension to retrieve access token")
msiEndpoint, err := adal.GetMSIVMEndpoint()
if err != nil {
return nil, fmt.Errorf("failed to get managed service identity endpoint, error: %v", err)
}
// using user-assigned managed identity to access keyvault
if len(config.UserAssignedIdentityID) > 0 {
mlog.Info("using User-assigned managed identity to retrieve access token", "clientID", redactClientCredentials(config.UserAssignedIdentityID))
return adal.NewServicePrincipalTokenFromMSIWithUserAssignedID(msiEndpoint,
resource,
config.UserAssignedIdentityID)
}
mlog.Info("using system-assigned managed identity to retrieve access token")
// using system-assigned managed identity to access keyvault
return adal.NewServicePrincipalTokenFromMSI(
msiEndpoint,
resource)
}
if len(config.ClientSecret) > 0 && len(config.ClientID) > 0 {
mlog.Info("azure: using client_id+client_secret to retrieve access token",
"clientID", redactClientCredentials(config.ClientID), "clientSecret", redactClientCredentials(config.ClientSecret))
spt, err := adal.NewServicePrincipalToken(
*oauthConfig,
config.ClientID,
config.ClientSecret,
resource)
if err != nil {
return nil, err
}
if proxyMode {
return addTargetTypeHeader(spt), nil
}
return spt, nil
}
if len(config.AADClientCertPath) > 0 && len(config.AADClientCertPassword) > 0 {
mlog.Info("using jwt client_assertion (client_cert+client_private_key) to retrieve access token")
certData, err := os.ReadFile(config.AADClientCertPath)
if err != nil {
return nil, fmt.Errorf("failed to read client certificate from file %s, error: %v", config.AADClientCertPath, err)
}
certificate, privateKey, err := decodePkcs12(certData, config.AADClientCertPassword)
if err != nil {
return nil, fmt.Errorf("failed to decode the client certificate, error: %v", err)
}
spt, err := adal.NewServicePrincipalTokenFromCertificate(
*oauthConfig,
config.ClientID,
certificate,
privateKey,
resource)
if err != nil {
return nil, err
}
if proxyMode {
return addTargetTypeHeader(spt), nil
}
return spt, nil
}
return nil, fmt.Errorf("no credentials provided for accessing keyvault")
}