The Azure Identity library provides Microsoft Entra ID token authentication support across the Azure SDK with a comprehensive set of TokenCredential implementations.
—
ManagedIdentityCredential authenticates using Azure Managed Identity, providing a secure way for Azure-hosted applications to authenticate without storing credentials. It supports both system-assigned and user-assigned managed identities.
import com.azure.identity.ManagedIdentityCredential;
import com.azure.identity.ManagedIdentityCredentialBuilder;
// Use system-assigned managed identity (default)
TokenCredential credential = new ManagedIdentityCredentialBuilder().build();
// Use with Azure SDK client
KeyVaultSecret secret = new SecretClientBuilder()
.vaultUrl("https://myvault.vault.azure.net/")
.credential(credential)
.buildClient()
.getSecret("my-secret");// Authenticate with user-assigned managed identity using client ID
TokenCredential credential = new ManagedIdentityCredentialBuilder()
.clientId("user-assigned-client-id")
.build();
// Alternative: use resource ID
TokenCredential credentialByResourceId = new ManagedIdentityCredentialBuilder()
.resourceId("/subscriptions/{subscription}/resourceGroups/{rg}/providers/Microsoft.ManagedIdentity/userAssignedIdentities/{name}")
.build();ManagedIdentityCredential works in the following Azure environments:
// Configure with various options
TokenCredential credential = new ManagedIdentityCredentialBuilder()
.clientId("user-assigned-client-id") // For user-assigned identity
.maxRetry(3) // Maximum retry attempts
.retryTimeout(Duration.ofSeconds(30)) // Retry timeout
.httpClient(httpClient) // Custom HTTP client
.build();try {
TokenCredential credential = new ManagedIdentityCredentialBuilder().build();
// Synchronous token acquisition
AccessToken token = credential.getTokenSync(
new TokenRequestContext().addScopes("https://vault.azure.net/.default")
);
System.out.println("Token expires at: " + token.getExpiresAt());
} catch (CredentialUnavailableException e) {
System.err.println("Managed Identity not available: " + e.getMessage());
// This typically means the code is not running in an Azure environment
// that supports Managed Identity
} catch (ClientAuthenticationException e) {
System.err.println("Authentication failed: " + e.getMessage());
}import reactor.core.publisher.Mono;
TokenCredential credential = new ManagedIdentityCredentialBuilder().build();
// Asynchronous token acquisition
Mono<AccessToken> tokenMono = credential.getToken(
new TokenRequestContext().addScopes("https://management.azure.com/.default")
);
tokenMono.subscribe(
token -> System.out.println("Got token: " + token.getToken().substring(0, 10) + "..."),
error -> System.err.println("Failed to get token: " + error.getMessage())
);ManagedIdentityCredential automatically detects the Azure environment and uses the appropriate endpoint:
ManagedIdentityCredential credential = new ManagedIdentityCredentialBuilder()
.clientId("user-assigned-client-id")
.build();
// Get the configured client ID
String clientId = credential.getClientId();
System.out.println("Using client ID: " + clientId);class ManagedIdentityCredential implements TokenCredential {
// Token acquisition
Mono<AccessToken> getToken(TokenRequestContext request);
AccessToken getTokenSync(TokenRequestContext request);
// Get the client ID of the managed identity
String getClientId();
}
class ManagedIdentityCredentialBuilder extends CredentialBuilderBase<ManagedIdentityCredentialBuilder> {
// Identity configuration
ManagedIdentityCredentialBuilder clientId(String clientId);
ManagedIdentityCredentialBuilder resourceId(String resourceId);
// Build method
ManagedIdentityCredential build();
}Common issues and solutions:
Install with Tessl CLI
npx tessl i tessl/maven-com-azure--azure-identitydocs