pkg/internal/token/msicredential.go (44 lines of code) (raw):
package token
import (
"context"
"fmt"
"github.com/Azure/azure-sdk-for-go/sdk/azcore"
"github.com/Azure/azure-sdk-for-go/sdk/azcore/policy"
"github.com/Azure/azure-sdk-for-go/sdk/azidentity"
)
type ManagedIdentityCredential struct {
cred *azidentity.ManagedIdentityCredential
}
var _ CredentialProvider = (*ManagedIdentityCredential)(nil)
func newManagedIdentityCredential(opts *Options) (CredentialProvider, error) {
var id azidentity.ManagedIDKind
if opts.ClientID != "" {
id = azidentity.ClientID(opts.ClientID)
} else if opts.IdentityResourceID != "" {
id = azidentity.ResourceID(opts.IdentityResourceID)
}
azOpts := &azidentity.ManagedIdentityCredentialOptions{
ClientOptions: azcore.ClientOptions{Cloud: opts.GetCloudConfiguration()},
ID: id,
}
if opts.httpClient != nil {
azOpts.ClientOptions.Transport = opts.httpClient
}
cred, err := azidentity.NewManagedIdentityCredential(azOpts)
if err != nil {
return nil, fmt.Errorf("failed to create managed identity credential: %w", err)
}
return &ManagedIdentityCredential{cred: cred}, nil
}
func (c *ManagedIdentityCredential) Name() string {
return "ManagedIdentityCredential"
}
func (c *ManagedIdentityCredential) Authenticate(ctx context.Context, opts *policy.TokenRequestOptions) (azidentity.AuthenticationRecord, error) {
return azidentity.AuthenticationRecord{}, errAuthenticateNotSupported
}
func (c *ManagedIdentityCredential) GetToken(ctx context.Context, opts policy.TokenRequestOptions) (azcore.AccessToken, error) {
return c.cred.GetToken(ctx, opts)
}
func (c *ManagedIdentityCredential) NeedAuthenticate() bool {
return false
}