Azure Identity Examples
April 23, 2026 · View on GitHub
This page shows common azure-identity patterns for authenticating Azure SDK clients. All examples authenticate a SecretClient from azure-security-keyvault-secrets; the same pattern applies to any Azure SDK client.
Dependency:
<dependency>
<groupId>com.azure</groupId>
<artifactId>azure-identity</artifactId>
<version>1.13.0</version> <!-- {x-version-update;com.azure:azure-identity;dependency} -->
</dependency>
DefaultAzureCredential
Tries a chain of credentials automatically (environment vars → workload identity → managed identity → Azure CLI → etc.):
DefaultAzureCredential credential = new DefaultAzureCredentialBuilder().build();
SecretClient client = new SecretClientBuilder()
.vaultUrl("https://{YOUR_VAULT_NAME}.vault.azure.net")
.credential(credential)
.buildClient();
User-Assigned Managed Identity with DefaultAzureCredential
DefaultAzureCredential credential = new DefaultAzureCredentialBuilder()
.managedIdentityClientId("<MANAGED_IDENTITY_CLIENT_ID>")
.build();
IntelliJ Toolkit with DefaultAzureCredential (Windows)
DefaultAzureCredential credential = new DefaultAzureCredentialBuilder()
.intelliJKeePassDatabasePath("C:\\Users\\user\\AppData\\Roaming\\JetBrains\\IdeaIC2020.1\\c.kdbx")
.build();
Service Principal — Client Secret
ClientSecretCredential credential = new ClientSecretCredentialBuilder()
.clientId("<YOUR_CLIENT_ID>")
.clientSecret("<YOUR_CLIENT_SECRET>")
.tenantId("<YOUR_TENANT_ID>")
.build();
Service Principal — Client Certificate
ClientCertificateCredential credential = new ClientCertificateCredentialBuilder()
.clientId("<YOUR_CLIENT_ID>")
.pemCertificate("<PATH TO PEM CERTIFICATE>")
// .pfxCertificate("<PATH TO PFX CERTIFICATE>", "PFX PASSWORD")
.tenantId("<YOUR_TENANT_ID>")
.build();
Device Code Flow (IoT / headless)
DeviceCodeCredential credential = new DeviceCodeCredentialBuilder()
.challengeConsumer(challenge -> System.out.println(challenge.getMessage()))
.build();
Interactive Browser
InteractiveBrowserCredential credential = new InteractiveBrowserCredentialBuilder()
.clientId("<YOUR CLIENT ID>")
.redirectUrl("http://localhost:8765")
.build();
Authorization Code Flow (Web Apps)
AuthorizationCodeCredential credential = new AuthorizationCodeCredentialBuilder()
.clientId("<YOUR CLIENT ID>")
.authorizationCode("<AUTH CODE FROM QUERY PARAMETERS>")
.redirectUrl("<THE REDIRECT URL>")
.build();
Azure CLI Credential
AzureCliCredential credential = new AzureCliCredentialBuilder().build();
Sign in with: az login
Azure PowerShell Credential
AzurePowerShellCredential credential = new AzurePowerShellCredentialBuilder().build();
Sign in with: Connect-AzAccount
IntelliJ IDEA Credential
IntelliJCredential credential = new IntelliJCredentialBuilder()
.keePassDatabasePath("C:\\Users\\user\\AppData\\Roaming\\JetBrains\\IdeaIC2020.1\\c.kdbx")
.build();
Managed Identity (VM, App Service, AKS, Cloud Shell)
// System-assigned managed identity
ManagedIdentityCredential credential = new ManagedIdentityCredentialBuilder().build();
// User-assigned managed identity
ManagedIdentityCredential credential = new ManagedIdentityCredentialBuilder()
.clientId("<USER ASSIGNED MANAGED IDENTITY CLIENT ID>")
.build();
Chaining Credentials
Try credentials in sequence, stopping at the first success:
ManagedIdentityCredential managedIdentity = new ManagedIdentityCredentialBuilder()
.clientId("<YOUR_CLIENT_ID>")
.build();
ClientSecretCredential servicePrincipal = new ClientSecretCredentialBuilder()
.clientId("<YOUR_CLIENT_ID>")
.clientSecret("<YOUR_CLIENT_SECRET>")
.tenantId("<YOUR_TENANT_ID>")
.build();
ChainedTokenCredential credential = new ChainedTokenCredentialBuilder()
.addLast(managedIdentity)
.addLast(servicePrincipal)
.build();
Azure Stack
ClientSecretCredential credential = new ClientSecretCredentialBuilder()
.authorityHost("<Azure Stack Authority Host>") // from Get-AzEnvironment
.tenantId("<Tenant Id>") // "adfs" for ADFS identity provider
.clientSecret("<client-secret>")
.clientId("<client-id>")
.build();
Using MSAL Directly as TokenCredential
If you need to bypass azure-identity and use MSAL4J directly:
TokenCredential credential = tokenRequestContext -> Mono.defer(() -> {
String authorityUrl = AzureAuthorityHosts.AZURE_PUBLIC_CLOUD + "/" + "<YOUR-TENANT>";
PublicClientApplication app = PublicClientApplication.builder("<YOUR-CLIENT-ID>")
.authority(authorityUrl)
.build();
DeviceCodeFlowParameters params = DeviceCodeFlowParameters
.builder(Collections.singleton("<Your-Azure-Service-Scope>"),
dc -> System.out.println(dc.message()))
.build();
return Mono.fromFuture(app.acquireToken(params));
}).map(result -> new AccessToken(result.accessToken(),
OffsetDateTime.ofInstant(result.expiresOnDate().toInstant(), ZoneOffset.UTC)));