GitHub Copilot ChatGPT Claude Codex CLI Cursor opencode Skill Text

azure-identity-java

Azure Identity library for Java authentication with Azure services. Use when implementing DefaultAzureCredential, managed identity, service principal, or any Azure authentication pattern in Java applications.

Ciza · 0 points · 21 views 0 listing impressions 0 install-command copies
Virus-scanned Reviewed automatically before listing.

Full trust report

Download microsoft-skills-.github_plugins_azure-sdk-java_skills_azure-identity-java-e58528d.zip · 5 KB
Part of microsoft/skills — 195 skills

Install

skills CLI npx skills add https://github.com/microsoft/skills/tree/main/.github/plugins/azure-sdk-java/skills/azure-identity-java
Claude Code claude plugin marketplace add https://llmmart.ai/marketplace.json && claude plugin install microsoft-skills@llmmart
Git git clone https://github.com/microsoft/skills.git

The skills CLI installs just this skill, for any of its supported agents. Claude Code installs the whole microsoft/skills collection as a plugin from our marketplace. Git is the plain clone.

Skill manifest

Azure Identity library for Java

Authentication library for Azure SDK clients using Microsoft Entra ID.

Installation

<dependency>
    <groupId>com.azure</groupId>
    <artifactId>azure-identity</artifactId>
    <version>1.15.0</version>
</dependency>

Key Concepts

Credential Use Case
DefaultAzureCredential Recommended - Works in dev and production
ManagedIdentityCredential Azure-hosted apps (App Service, Functions, VMs)
EnvironmentCredential CI/CD pipelines with env vars
ClientSecretCredential Service principals with secret
ClientCertificateCredential Service principals with certificate
AzureCliCredential Local dev using az login
InteractiveBrowserCredential Interactive login flow
DeviceCodeCredential Headless device authentication

DefaultAzureCredential (Recommended)

The DefaultAzureCredential tries multiple authentication methods in order. See DefaultAzureCredential overview for the current credential chain order and defaults.

import com.azure.identity.DefaultAzureCredential;
import com.azure.identity.DefaultAzureCredentialBuilder;

// Simple usage
DefaultAzureCredential credential = new DefaultAzureCredentialBuilder().build();

// Use with any Azure client
BlobServiceClient blobClient = new BlobServiceClientBuilder()
    .endpoint("https://<storage-account>.blob.core.windows.net")
    .credential(credential)
    .buildClient();

KeyClient keyClient = new KeyClientBuilder()
    .vaultUrl("https://<vault-name>.vault.azure.net")
    .credential(credential)
    .buildClient();

Configure DefaultAzureCredential

DefaultAzureCredential credential = new DefaultAzureCredentialBuilder()
    .managedIdentityClientId("<user-assigned-identity-client-id>")  // For user-assigned MI
    .tenantId("<tenant-id>")                                        // Limit to specific tenant
    .excludeEnvironmentCredential()                                 // Skip env vars
    .excludeAzureCliCredential()                                    // Skip Azure CLI
    .build();

Managed Identity

For Azure-hosted applications (App Service, Functions, AKS, VMs).

import com.azure.identity.ManagedIdentityCredential;
import com.azure.identity.ManagedIdentityCredentialBuilder;

// System-assigned managed identity
ManagedIdentityCredential credential = new ManagedIdentityCredentialBuilder()
    .build();

// User-assigned managed identity (by client ID)
ManagedIdentityCredential credential = new ManagedIdentityCredentialBuilder()
    .clientId("<user-assigned-client-id>")
    .build();

// User-assigned managed identity (by resource ID)
ManagedIdentityCredential credential = new ManagedIdentityCredentialBuilder()
    .resourceId("/subscriptions/<sub>/resourceGroups/<rg>/providers/Microsoft.ManagedIdentity/userAssignedIdentities/<name>")
    .build();

Service Principal with Secret

import com.azure.identity.ClientSecretCredential;
import com.azure.identity.ClientSecretCredentialBuilder;

ClientSecretCredential credential = new ClientSecretCredentialBuilder()
    .tenantId("<tenant-id>")
    .clientId("<client-id>")
    .clientSecret("<client-secret>")
    .build();

Service Principal with Certificate

import com.azure.identity.ClientCertificateCredential;
import com.azure.identity.ClientCertificateCredentialBuilder;

// From PEM file
ClientCertificateCredential credential = new ClientCertificateCredentialBuilder()
    .tenantId("<tenant-id>")
    .clientId("<client-id>")
    .pemCertificate("<path-to-cert.pem>")
    .build();

// From PFX file with password
ClientCertificateCredential credential = new ClientCertificateCredentialBuilder()
    .tenantId("<tenant-id>")
    .clientId("<client-id>")
    .pfxCertificate("<path-to-cert.pfx>", "<pfx-password>")
    .build();

// Send certificate chain for SNI
ClientCertificateCredential credential = new ClientCertificateCredentialBuilder()
    .tenantId("<tenant-id>")
    .clientId("<client-id>")
    .pemCertificate("<path-to-cert.pem>")
    .sendCertificateChain(true)
    .build();

Environment Credential

Reads credentials from environment variables.

import com.azure.identity.EnvironmentCredential;
import com.azure.identity.EnvironmentCredentialBuilder;

EnvironmentCredential credential = new EnvironmentCredentialBuilder().build();

Required Environment Variables

For service principal with secret:

AZURE_TENANT_ID=<tenant-id>
AZURE_CLIENT_ID=<client-id>
AZURE_CLIENT_SECRET=<client-secret>

For service principal with certificate:

AZURE_TENANT_ID=<tenant-id>
AZURE_CLIENT_ID=<client-id>
AZURE_CLIENT_CERTIFICATE_PATH=/path/to/cert.pem
AZURE_CLIENT_CERTIFICATE_PASSWORD=<optional-password>

Azure CLI Credential

For local development using az login.

import com.azure.identity.AzureCliCredential;
import com.azure.identity.AzureCliCredentialBuilder;

AzureCliCredential credential = new AzureCliCredentialBuilder()
    .tenantId("<tenant-id>")  // Optional: specific tenant
    .build();

Interactive Browser

For desktop applications requiring user login.

import com.azure.identity.InteractiveBrowserCredential;
import com.azure.identity.InteractiveBrowserCredentialBuilder;

InteractiveBrowserCredential credential = new InteractiveBrowserCredentialBuilder()
    .clientId("<client-id>")
    .redirectUrl("http://localhost:8080")  // Must match app registration
    .build();

Device Code

For headless devices (IoT, CLI tools).

import com.azure.identity.DeviceCodeCredential;
import com.azure.identity.DeviceCodeCredentialBuilder;

DeviceCodeCredential credential = new DeviceCodeCredentialBuilder()
    .clientId("<client-id>")
    .challengeConsumer(challenge -> {
        // Display to user
        System.out.println(challenge.getMessage());
    })
    .build();

Chained Credential

Create custom authentication chains.

import com.azure.identity.ChainedTokenCredential;
import com.azure.identity.ChainedTokenCredentialBuilder;

ChainedTokenCredential credential = new ChainedTokenCredentialBuilder()
    .addFirst(new ManagedIdentityCredentialBuilder().build())
    .addLast(new AzureCliCredentialBuilder().build())
    .build();

Workload Identity (AKS)

For Azure Kubernetes Service with workload identity.

import com.azure.identity.WorkloadIdentityCredential;
import com.azure.identity.WorkloadIdentityCredentialBuilder;

// Reads from AZURE_TENANT_ID, AZURE_CLIENT_ID, AZURE_FEDERATED_TOKEN_FILE
WorkloadIdentityCredential credential = new WorkloadIdentityCredentialBuilder().build();

// Or explicit configuration
WorkloadIdentityCredential credential = new WorkloadIdentityCredentialBuilder()
    .tenantId("<tenant-id>")
    .clientId("<client-id>")
    .tokenFilePath("/var/run/secrets/azure/tokens/azure-identity-token")
    .build();

Token Caching

Enable persistent token caching for better performance.

// Enable token caching (in-memory by default)
DefaultAzureCredential credential = new DefaultAzureCredentialBuilder()
    .enableAccountIdentifierLogging()
    .build();

// With shared token cache (for multi-credential scenarios)
SharedTokenCacheCredential credential = new SharedTokenCacheCredentialBuilder()
    .clientId("<client-id>")
    .build();

Sovereign Clouds

import com.azure.identity.AzureAuthorityHosts;

// Azure Government
DefaultAzureCredential govCredential = new DefaultAzureCredentialBuilder()
    .authorityHost(AzureAuthorityHosts.AZURE_GOVERNMENT)
    .build();

// Azure China
DefaultAzureCredential chinaCredential = new DefaultAzureCredentialBuilder()
    .authorityHost(AzureAuthorityHosts.AZURE_CHINA)
    .build();

Error Handling

import com.azure.identity.CredentialUnavailableException;
import com.azure.core.exception.ClientAuthenticationException;

try {
    DefaultAzureCredential credential = new DefaultAzureCredentialBuilder().build();
    AccessToken token = credential.getToken(new TokenRequestContext()
        .addScopes("https://management.azure.com/.default"));
} catch (CredentialUnavailableException e) {
    // No credential could authenticate
    System.out.println("Authentication failed: " + e.getMessage());
} catch (ClientAuthenticationException e) {
    // Authentication error (wrong credentials, expired, etc.)
    System.out.println("Auth error: " + e.getMessage());
}

Logging

Enable authentication logging for debugging.

// Via environment variable
// AZURE_LOG_LEVEL=verbose

// Or programmatically
DefaultAzureCredential credential = new DefaultAzureCredentialBuilder()
    .enableAccountIdentifierLogging()  // Log account info
    .build();

Environment Variables

# DefaultAzureCredential configuration
AZURE_TENANT_ID=<tenant-id>
AZURE_CLIENT_ID=<client-id>
AZURE_CLIENT_SECRET=<client-secret>

# Managed Identity
AZURE_CLIENT_ID=<user-assigned-mi-client-id>

# Workload Identity (AKS)
AZURE_FEDERATED_TOKEN_FILE=/var/run/secrets/azure/tokens/azure-identity-token

# Logging
AZURE_LOG_LEVEL=verbose

# Authority host
AZURE_AUTHORITY_HOST=https://login.microsoftonline.com/

Best Practices

  1. Use DefaultAzureCredential - Works seamlessly from dev to production
  2. Managed Identity in Production - No secrets to manage, automatic rotation
  3. Azure CLI for Local Dev - Run az login before running your app
  4. Least Privilege - Grant only required permissions to service principals
  5. Token Caching - Enabled by default, reduces auth round-trips
  6. Environment Variables - Use for CI/CD, not hardcoded secrets

Credential Selection Matrix

Environment Recommended Credential
Local Development DefaultAzureCredential (uses Azure CLI)
Azure App Service DefaultAzureCredential (uses Managed Identity)
Azure Functions DefaultAzureCredential (uses Managed Identity)
Azure Kubernetes Service WorkloadIdentityCredential
Azure VMs DefaultAzureCredential (uses Managed Identity)
CI/CD Pipeline EnvironmentCredential
Desktop App InteractiveBrowserCredential
CLI Tool DeviceCodeCredential

Trigger Phrases

  • "Azure authentication Java", "DefaultAzureCredential Java"
  • "managed identity Java", "service principal Java"
  • "Azure login Java", "Azure credentials Java"
  • "AZURE_CLIENT_ID", "AZURE_TENANT_ID"
Files (skills)
  • references
    • examples.md 14.1 KB
      # Azure Identity library for Java - Examples
      
      Comprehensive code examples for the Azure Identity library for Java.
      
      ## Table of Contents
      
      - [Maven Dependency](#maven-dependency)
      - [DefaultAzureCredential](#defaultazurecredential)
      - [ChainedTokenCredential](#chainedtokencredential)
      - [ClientSecretCredential](#clientsecretcredential)
      - [ClientCertificateCredential](#clientcertificatecredential)
      - [ManagedIdentityCredential](#managedidentitycredential)
      - [EnvironmentCredential](#environmentcredential)
      - [InteractiveBrowserCredential](#interactivebrowsercredential)
      - [DeviceCodeCredential](#devicecodecredential)
      - [AzureCliCredential](#azureclicredential)
      - [Using Credentials with Azure SDK Clients](#using-credentials-with-azure-sdk-clients)
      
      ## Maven Dependency
      
      ```xml
      <!-- Using Azure SDK BOM (recommended) -->
      <dependencyManagement>
          <dependencies>
              <dependency>
                  <groupId>com.azure</groupId>
                  <artifactId>azure-sdk-bom</artifactId>
                  <version>1.2.29</version>
                  <type>pom</type>
                  <scope>import</scope>
              </dependency>
          </dependencies>
      </dependencyManagement>
      
      <dependencies>
          <dependency>
              <groupId>com.azure</groupId>
              <artifactId>azure-identity</artifactId>
          </dependency>
      </dependencies>
      
      <!-- Or direct dependency -->
      <dependency>
          <groupId>com.azure</groupId>
          <artifactId>azure-identity</artifactId>
          <version>1.18.2</version>
      </dependency>
      ```
      
      ## DefaultAzureCredential
      
      The recommended credential for most scenarios. Tries multiple authentication methods in order.
      
      ### Basic Usage
      
      ```java
      import com.azure.identity.DefaultAzureCredential;
      import com.azure.identity.DefaultAzureCredentialBuilder;
      import com.azure.security.keyvault.secrets.SecretClient;
      import com.azure.security.keyvault.secrets.SecretClientBuilder;
      
      // Basic usage
      DefaultAzureCredential credential = new DefaultAzureCredentialBuilder().build();
      
      // Use with Azure SDK clients
      SecretClient client = new SecretClientBuilder()
          .vaultUrl("https://{YOUR_VAULT_NAME}.vault.azure.net")
          .credential(credential)
          .buildClient();
      ```
      
      ### With User-Assigned Managed Identity
      
      ```java
      DefaultAzureCredential credential = new DefaultAzureCredentialBuilder()
          .managedIdentityClientId("<MANAGED_IDENTITY_CLIENT_ID>")
          .build();
      
      SecretClient client = new SecretClientBuilder()
          .vaultUrl("https://{YOUR_VAULT_NAME}.vault.azure.net")
          .credential(credential)
          .buildClient();
      ```
      
      ### Authentication Order
      
      See [DefaultAzureCredential overview](https://aka.ms/azsdk/java/identity/credential-chains#defaultazurecredential-overview) for the current credential chain order and defaults.
      
      ## ChainedTokenCredential
      
      Create a custom chain of credentials to try in sequence.
      
      ### Managed Identity with Interactive Browser Fallback
      
      ```java
      import com.azure.identity.ChainedTokenCredential;
      import com.azure.identity.ChainedTokenCredentialBuilder;
      import com.azure.identity.ManagedIdentityCredential;
      import com.azure.identity.ManagedIdentityCredentialBuilder;
      import com.azure.identity.InteractiveBrowserCredential;
      import com.azure.identity.InteractiveBrowserCredentialBuilder;
      
      ManagedIdentityCredential managedIdentityCredential = new ManagedIdentityCredentialBuilder().build();
      InteractiveBrowserCredential interactiveBrowserCredential = new InteractiveBrowserCredentialBuilder()
          .clientId(clientId)
          .redirectUrl("https://localhost:8765")
          .build();
      
      ChainedTokenCredential credential = new ChainedTokenCredentialBuilder()
          .addLast(managedIdentityCredential)
          .addLast(interactiveBrowserCredential)
          .build();
      ```
      
      ### Azure CLI with IntelliJ for Development
      
      ```java
      import com.azure.identity.AzureCliCredential;
      import com.azure.identity.AzureCliCredentialBuilder;
      import com.azure.identity.IntelliJCredential;
      import com.azure.identity.IntelliJCredentialBuilder;
      
      AzureCliCredential cliCredential = new AzureCliCredentialBuilder().build();
      IntelliJCredential ijCredential = new IntelliJCredentialBuilder().build();
      
      ChainedTokenCredential credential = new ChainedTokenCredentialBuilder()
          .addLast(cliCredential)
          .addLast(ijCredential)
          .build();
      ```
      
      ## ClientSecretCredential
      
      Authenticate a service principal using a client secret.
      
      ### Basic Usage
      
      ```java
      import com.azure.identity.ClientSecretCredential;
      import com.azure.identity.ClientSecretCredentialBuilder;
      
      String tenantId = System.getenv("AZURE_TENANT_ID");
      String clientId = System.getenv("AZURE_CLIENT_ID");
      String clientSecret = System.getenv("AZURE_CLIENT_SECRET");
      
      ClientSecretCredential credential = new ClientSecretCredentialBuilder()
          .tenantId(tenantId)
          .clientId(clientId)
          .clientSecret(clientSecret)
          .build();
      
      SecretClient client = new SecretClientBuilder()
          .vaultUrl("https://{YOUR_VAULT_NAME}.vault.azure.net")
          .credential(credential)
          .buildClient();
      ```
      
      ### With Proxy Configuration
      
      ```java
      import com.azure.core.http.ProxyOptions;
      import com.azure.core.http.ProxyOptions.Type;
      import java.net.InetSocketAddress;
      
      ClientSecretCredential credential = new ClientSecretCredentialBuilder()
          .tenantId(tenantId)
          .clientId(clientId)
          .clientSecret(clientSecret)
          .proxyOptions(new ProxyOptions(Type.HTTP, new InetSocketAddress("10.21.32.43", 5465)))
          .build();
      ```
      
      ## ClientCertificateCredential
      
      Authenticate a service principal using a certificate.
      
      ### Using PEM Certificate File
      
      ```java
      import com.azure.identity.ClientCertificateCredential;
      import com.azure.identity.ClientCertificateCredentialBuilder;
      
      ClientCertificateCredential credential = new ClientCertificateCredentialBuilder()
          .tenantId(tenantId)
          .clientId(clientId)
          .pemCertificate("<PATH-TO-PEM-CERTIFICATE>")
          .build();
      
      SecretClient client = new SecretClientBuilder()
          .vaultUrl("https://{YOUR_VAULT_NAME}.vault.azure.net")
          .credential(credential)
          .buildClient();
      ```
      
      ### Using PFX Certificate with Password
      
      ```java
      ClientCertificateCredential credential = new ClientCertificateCredentialBuilder()
          .tenantId(tenantId)
          .clientId(clientId)
          .pfxCertificate("<PATH-TO-PFX-CERTIFICATE>", "P@s$w0rd")
          .build();
      ```
      
      ### Using Certificate from InputStream
      
      ```java
      import java.io.ByteArrayInputStream;
      import java.nio.file.Files;
      import java.nio.file.Paths;
      
      byte[] certificateBytes = Files.readAllBytes(Paths.get("certificate.pem"));
      ByteArrayInputStream certificateStream = new ByteArrayInputStream(certificateBytes);
      
      ClientCertificateCredential credential = new ClientCertificateCredentialBuilder()
          .tenantId(tenantId)
          .clientId(clientId)
          .pemCertificate(certificateStream)
          .build();
      ```
      
      ### With Proxy Configuration
      
      ```java
      ClientCertificateCredential credential = new ClientCertificateCredentialBuilder()
          .tenantId(tenantId)
          .clientId(clientId)
          .pfxCertificate("<PATH-TO-PFX-CERTIFICATE>", "P@s$w0rd")
          .proxyOptions(new ProxyOptions(Type.HTTP, new InetSocketAddress("10.21.32.43", 5465)))
          .build();
      ```
      
      ## ManagedIdentityCredential
      
      Authenticate using Azure managed identity (system-assigned or user-assigned).
      
      ### System-Assigned Managed Identity
      
      ```java
      import com.azure.identity.ManagedIdentityCredential;
      import com.azure.identity.ManagedIdentityCredentialBuilder;
      
      // No clientId needed for system-assigned
      ManagedIdentityCredential credential = new ManagedIdentityCredentialBuilder().build();
      
      SecretClient client = new SecretClientBuilder()
          .vaultUrl("https://{YOUR_VAULT_NAME}.vault.azure.net")
          .credential(credential)
          .buildClient();
      ```
      
      ### User-Assigned Managed Identity (by Client ID)
      
      ```java
      ManagedIdentityCredential credential = new ManagedIdentityCredentialBuilder()
          .clientId("<USER-ASSIGNED-MANAGED-IDENTITY-CLIENT-ID>")
          .build();
      
      SecretClient client = new SecretClientBuilder()
          .vaultUrl("https://{YOUR_VAULT_NAME}.vault.azure.net")
          .credential(credential)
          .buildClient();
      ```
      
      ### User-Assigned Managed Identity (by Resource ID)
      
      ```java
      ManagedIdentityCredential credential = new ManagedIdentityCredentialBuilder()
          .resourceId("/subscriptions/<subscriptionID>/resourcegroups/<resource-group>/providers/Microsoft.ManagedIdentity/userAssignedIdentities/<MI-name>")
          .build();
      ```
      
      ### User-Assigned Managed Identity (by Object ID)
      
      ```java
      ManagedIdentityCredential credential = new ManagedIdentityCredentialBuilder()
          .objectId("<USER-ASSIGNED-MANAGED-IDENTITY-OBJECT-ID>")
          .build();
      ```
      
      ## EnvironmentCredential
      
      Authenticates using environment variables. Supports service principal with secret, certificate, or username/password.
      
      ### Required Environment Variables
      
      For service principal with secret:
      
      ```bash
      AZURE_TENANT_ID=<tenant-id>
      AZURE_CLIENT_ID=<client-id>
      AZURE_CLIENT_SECRET=<client-secret>
      ```
      
      For service principal with certificate:
      
      ```bash
      AZURE_TENANT_ID=<tenant-id>
      AZURE_CLIENT_ID=<client-id>
      AZURE_CLIENT_CERTIFICATE_PATH=<path-to-certificate>
      AZURE_CLIENT_CERTIFICATE_PASSWORD=<certificate-password>  # Optional
      ```
      
      ### Usage
      
      ```java
      import com.azure.identity.EnvironmentCredential;
      import com.azure.identity.EnvironmentCredentialBuilder;
      
      EnvironmentCredential credential = new EnvironmentCredentialBuilder().build();
      
      SecretClient client = new SecretClientBuilder()
          .vaultUrl("https://{YOUR_VAULT_NAME}.vault.azure.net")
          .credential(credential)
          .buildClient();
      ```
      
      ## InteractiveBrowserCredential
      
      Authenticate interactively via browser. Suitable for development.
      
      ```java
      import com.azure.identity.InteractiveBrowserCredential;
      import com.azure.identity.InteractiveBrowserCredentialBuilder;
      
      InteractiveBrowserCredential credential = new InteractiveBrowserCredentialBuilder()
          .clientId("<client-id>")
          .redirectUrl("http://localhost:8765")
          .build();
      
      SecretClient client = new SecretClientBuilder()
          .vaultUrl("https://{YOUR_VAULT_NAME}.vault.azure.net")
          .credential(credential)
          .buildClient();
      ```
      
      ### With Tenant ID
      
      ```java
      InteractiveBrowserCredential credential = new InteractiveBrowserCredentialBuilder()
          .clientId("<client-id>")
          .tenantId("<tenant-id>")
          .redirectUrl("http://localhost:8765")
          .build();
      ```
      
      ## DeviceCodeCredential
      
      Authenticate using device code flow. User enters code at microsoft.com/devicelogin.
      
      ```java
      import com.azure.identity.DeviceCodeCredential;
      import com.azure.identity.DeviceCodeCredentialBuilder;
      
      DeviceCodeCredential credential = new DeviceCodeCredentialBuilder()
          .clientId("<client-id>")
          .challengeConsumer(challenge -> {
              // Display the device code message to the user
              System.out.println(challenge.getMessage());
          })
          .build();
      
      SecretClient client = new SecretClientBuilder()
          .vaultUrl("https://{YOUR_VAULT_NAME}.vault.azure.net")
          .credential(credential)
          .buildClient();
      ```
      
      ## AzureCliCredential
      
      Authenticate using Azure CLI. User must be logged in via `az login`.
      
      ```java
      import com.azure.identity.AzureCliCredential;
      import com.azure.identity.AzureCliCredentialBuilder;
      
      AzureCliCredential credential = new AzureCliCredentialBuilder().build();
      
      SecretClient client = new SecretClientBuilder()
          .vaultUrl("https://{YOUR_VAULT_NAME}.vault.azure.net")
          .credential(credential)
          .buildClient();
      ```
      
      ### With Specific Tenant
      
      ```java
      AzureCliCredential credential = new AzureCliCredentialBuilder()
          .tenantId("<tenant-id>")
          .build();
      ```
      
      ## Using Credentials with Azure SDK Clients
      
      ### Key Vault Secrets
      
      ```java
      import com.azure.identity.DefaultAzureCredentialBuilder;
      import com.azure.security.keyvault.secrets.SecretClient;
      import com.azure.security.keyvault.secrets.SecretClientBuilder;
      
      SecretClient client = new SecretClientBuilder()
          .vaultUrl("https://{vault-name}.vault.azure.net")
          .credential(new DefaultAzureCredentialBuilder().build())
          .buildClient();
      
      // Use the client
      String secretValue = client.getSecret("my-secret").getValue();
      ```
      
      ### Blob Storage
      
      ```java
      import com.azure.identity.DefaultAzureCredentialBuilder;
      import com.azure.storage.blob.BlobServiceClient;
      import com.azure.storage.blob.BlobServiceClientBuilder;
      
      BlobServiceClient client = new BlobServiceClientBuilder()
          .endpoint("https://{storage-account}.blob.core.windows.net")
          .credential(new DefaultAzureCredentialBuilder().build())
          .buildClient();
      ```
      
      ### Cosmos DB
      
      ```java
      import com.azure.identity.DefaultAzureCredentialBuilder;
      import com.azure.cosmos.CosmosClientBuilder;
      import com.azure.cosmos.CosmosClient;
      
      CosmosClient client = new CosmosClientBuilder()
          .endpoint("https://{cosmos-account}.documents.azure.com:443/")
          .credential(new DefaultAzureCredentialBuilder().build())
          .buildClient();
      ```
      
      ### Event Hubs
      
      ```java
      import com.azure.identity.DefaultAzureCredentialBuilder;
      import com.azure.messaging.eventhubs.EventHubClientBuilder;
      import com.azure.messaging.eventhubs.EventHubProducerClient;
      
      EventHubProducerClient producer = new EventHubClientBuilder()
          .fullyQualifiedNamespace("{namespace}.servicebus.windows.net")
          .eventHubName("{event-hub-name}")
          .credential(new DefaultAzureCredentialBuilder().build())
          .buildProducerClient();
      ```
      
      ### Service Bus
      
      ```java
      import com.azure.identity.DefaultAzureCredentialBuilder;
      import com.azure.messaging.servicebus.ServiceBusClientBuilder;
      import com.azure.messaging.servicebus.ServiceBusSenderClient;
      
      ServiceBusSenderClient sender = new ServiceBusClientBuilder()
          .fullyQualifiedNamespace("{namespace}.servicebus.windows.net")
          .credential(new DefaultAzureCredentialBuilder().build())
          .sender()
          .queueName("{queue-name}")
          .buildClient();
      ```
      
      ## Error Handling
      
      ```java
      import com.azure.core.exception.ClientAuthenticationException;
      import com.azure.identity.CredentialUnavailableException;
      
      try {
          DefaultAzureCredential credential = new DefaultAzureCredentialBuilder().build();
          // Use credential...
      } catch (CredentialUnavailableException e) {
          System.err.println("No credential available: " + e.getMessage());
      } catch (ClientAuthenticationException e) {
          System.err.println("Authentication failed: " + e.getMessage());
      }
      ```
      
      ## Logging and Debugging
      
      Enable logging to troubleshoot authentication issues:
      
      ```java
      import com.azure.core.util.logging.ClientLogger;
      
      // Set environment variable
      // AZURE_LOG_LEVEL=verbose
      
      // Or programmatically
      System.setProperty("AZURE_LOG_LEVEL", "verbose");
      ```
      
  • SKILL.md 10.7 KB
    ---
    name: azure-identity-java
    description: Azure Identity library for Java authentication with Azure services. Use when implementing DefaultAzureCredential, managed identity, service principal, or any Azure authentication pattern in Java applications.
    license: MIT
    metadata:
      author: Microsoft
      version: "1.0.0"
      package: com.azure:azure-identity
    ---
    
    # Azure Identity library for Java
    
    Authentication library for Azure SDK clients using Microsoft Entra ID.
    
    ## Installation
    
    ```xml
    <dependency>
        <groupId>com.azure</groupId>
        <artifactId>azure-identity</artifactId>
        <version>1.15.0</version>
    </dependency>
    ```
    
    ## Key Concepts
    
    | Credential | Use Case |
    |------------|----------|
    | `DefaultAzureCredential` | **Recommended** - Works in dev and production |
    | `ManagedIdentityCredential` | Azure-hosted apps (App Service, Functions, VMs) |
    | `EnvironmentCredential` | CI/CD pipelines with env vars |
    | `ClientSecretCredential` | Service principals with secret |
    | `ClientCertificateCredential` | Service principals with certificate |
    | `AzureCliCredential` | Local dev using `az login` |
    | `InteractiveBrowserCredential` | Interactive login flow |
    | `DeviceCodeCredential` | Headless device authentication |
    
    ## DefaultAzureCredential (Recommended)
    
    The `DefaultAzureCredential` tries multiple authentication methods in order. See [DefaultAzureCredential overview](https://aka.ms/azsdk/java/identity/credential-chains#defaultazurecredential-overview) for the current credential chain order and defaults.
    
    ```java
    import com.azure.identity.DefaultAzureCredential;
    import com.azure.identity.DefaultAzureCredentialBuilder;
    
    // Simple usage
    DefaultAzureCredential credential = new DefaultAzureCredentialBuilder().build();
    
    // Use with any Azure client
    BlobServiceClient blobClient = new BlobServiceClientBuilder()
        .endpoint("https://<storage-account>.blob.core.windows.net")
        .credential(credential)
        .buildClient();
    
    KeyClient keyClient = new KeyClientBuilder()
        .vaultUrl("https://<vault-name>.vault.azure.net")
        .credential(credential)
        .buildClient();
    ```
    
    ### Configure DefaultAzureCredential
    
    ```java
    DefaultAzureCredential credential = new DefaultAzureCredentialBuilder()
        .managedIdentityClientId("<user-assigned-identity-client-id>")  // For user-assigned MI
        .tenantId("<tenant-id>")                                        // Limit to specific tenant
        .excludeEnvironmentCredential()                                 // Skip env vars
        .excludeAzureCliCredential()                                    // Skip Azure CLI
        .build();
    ```
    
    ## Managed Identity
    
    For Azure-hosted applications (App Service, Functions, AKS, VMs).
    
    ```java
    import com.azure.identity.ManagedIdentityCredential;
    import com.azure.identity.ManagedIdentityCredentialBuilder;
    
    // System-assigned managed identity
    ManagedIdentityCredential credential = new ManagedIdentityCredentialBuilder()
        .build();
    
    // User-assigned managed identity (by client ID)
    ManagedIdentityCredential credential = new ManagedIdentityCredentialBuilder()
        .clientId("<user-assigned-client-id>")
        .build();
    
    // User-assigned managed identity (by resource ID)
    ManagedIdentityCredential credential = new ManagedIdentityCredentialBuilder()
        .resourceId("/subscriptions/<sub>/resourceGroups/<rg>/providers/Microsoft.ManagedIdentity/userAssignedIdentities/<name>")
        .build();
    ```
    
    ## Service Principal with Secret
    
    ```java
    import com.azure.identity.ClientSecretCredential;
    import com.azure.identity.ClientSecretCredentialBuilder;
    
    ClientSecretCredential credential = new ClientSecretCredentialBuilder()
        .tenantId("<tenant-id>")
        .clientId("<client-id>")
        .clientSecret("<client-secret>")
        .build();
    ```
    
    ## Service Principal with Certificate
    
    ```java
    import com.azure.identity.ClientCertificateCredential;
    import com.azure.identity.ClientCertificateCredentialBuilder;
    
    // From PEM file
    ClientCertificateCredential credential = new ClientCertificateCredentialBuilder()
        .tenantId("<tenant-id>")
        .clientId("<client-id>")
        .pemCertificate("<path-to-cert.pem>")
        .build();
    
    // From PFX file with password
    ClientCertificateCredential credential = new ClientCertificateCredentialBuilder()
        .tenantId("<tenant-id>")
        .clientId("<client-id>")
        .pfxCertificate("<path-to-cert.pfx>", "<pfx-password>")
        .build();
    
    // Send certificate chain for SNI
    ClientCertificateCredential credential = new ClientCertificateCredentialBuilder()
        .tenantId("<tenant-id>")
        .clientId("<client-id>")
        .pemCertificate("<path-to-cert.pem>")
        .sendCertificateChain(true)
        .build();
    ```
    
    ## Environment Credential
    
    Reads credentials from environment variables.
    
    ```java
    import com.azure.identity.EnvironmentCredential;
    import com.azure.identity.EnvironmentCredentialBuilder;
    
    EnvironmentCredential credential = new EnvironmentCredentialBuilder().build();
    ```
    
    ### Required Environment Variables
    
    **For service principal with secret:**
    
    ```bash
    AZURE_TENANT_ID=<tenant-id>
    AZURE_CLIENT_ID=<client-id>
    AZURE_CLIENT_SECRET=<client-secret>
    ```
    
    **For service principal with certificate:**
    
    ```bash
    AZURE_TENANT_ID=<tenant-id>
    AZURE_CLIENT_ID=<client-id>
    AZURE_CLIENT_CERTIFICATE_PATH=/path/to/cert.pem
    AZURE_CLIENT_CERTIFICATE_PASSWORD=<optional-password>
    ```
    
    ## Azure CLI Credential
    
    For local development using `az login`.
    
    ```java
    import com.azure.identity.AzureCliCredential;
    import com.azure.identity.AzureCliCredentialBuilder;
    
    AzureCliCredential credential = new AzureCliCredentialBuilder()
        .tenantId("<tenant-id>")  // Optional: specific tenant
        .build();
    ```
    
    ## Interactive Browser
    
    For desktop applications requiring user login.
    
    ```java
    import com.azure.identity.InteractiveBrowserCredential;
    import com.azure.identity.InteractiveBrowserCredentialBuilder;
    
    InteractiveBrowserCredential credential = new InteractiveBrowserCredentialBuilder()
        .clientId("<client-id>")
        .redirectUrl("http://localhost:8080")  // Must match app registration
        .build();
    ```
    
    ## Device Code
    
    For headless devices (IoT, CLI tools).
    
    ```java
    import com.azure.identity.DeviceCodeCredential;
    import com.azure.identity.DeviceCodeCredentialBuilder;
    
    DeviceCodeCredential credential = new DeviceCodeCredentialBuilder()
        .clientId("<client-id>")
        .challengeConsumer(challenge -> {
            // Display to user
            System.out.println(challenge.getMessage());
        })
        .build();
    ```
    
    ## Chained Credential
    
    Create custom authentication chains.
    
    ```java
    import com.azure.identity.ChainedTokenCredential;
    import com.azure.identity.ChainedTokenCredentialBuilder;
    
    ChainedTokenCredential credential = new ChainedTokenCredentialBuilder()
        .addFirst(new ManagedIdentityCredentialBuilder().build())
        .addLast(new AzureCliCredentialBuilder().build())
        .build();
    ```
    
    ## Workload Identity (AKS)
    
    For Azure Kubernetes Service with workload identity.
    
    ```java
    import com.azure.identity.WorkloadIdentityCredential;
    import com.azure.identity.WorkloadIdentityCredentialBuilder;
    
    // Reads from AZURE_TENANT_ID, AZURE_CLIENT_ID, AZURE_FEDERATED_TOKEN_FILE
    WorkloadIdentityCredential credential = new WorkloadIdentityCredentialBuilder().build();
    
    // Or explicit configuration
    WorkloadIdentityCredential credential = new WorkloadIdentityCredentialBuilder()
        .tenantId("<tenant-id>")
        .clientId("<client-id>")
        .tokenFilePath("/var/run/secrets/azure/tokens/azure-identity-token")
        .build();
    ```
    
    ## Token Caching
    
    Enable persistent token caching for better performance.
    
    ```java
    // Enable token caching (in-memory by default)
    DefaultAzureCredential credential = new DefaultAzureCredentialBuilder()
        .enableAccountIdentifierLogging()
        .build();
    
    // With shared token cache (for multi-credential scenarios)
    SharedTokenCacheCredential credential = new SharedTokenCacheCredentialBuilder()
        .clientId("<client-id>")
        .build();
    ```
    
    ## Sovereign Clouds
    
    ```java
    import com.azure.identity.AzureAuthorityHosts;
    
    // Azure Government
    DefaultAzureCredential govCredential = new DefaultAzureCredentialBuilder()
        .authorityHost(AzureAuthorityHosts.AZURE_GOVERNMENT)
        .build();
    
    // Azure China
    DefaultAzureCredential chinaCredential = new DefaultAzureCredentialBuilder()
        .authorityHost(AzureAuthorityHosts.AZURE_CHINA)
        .build();
    ```
    
    ## Error Handling
    
    ```java
    import com.azure.identity.CredentialUnavailableException;
    import com.azure.core.exception.ClientAuthenticationException;
    
    try {
        DefaultAzureCredential credential = new DefaultAzureCredentialBuilder().build();
        AccessToken token = credential.getToken(new TokenRequestContext()
            .addScopes("https://management.azure.com/.default"));
    } catch (CredentialUnavailableException e) {
        // No credential could authenticate
        System.out.println("Authentication failed: " + e.getMessage());
    } catch (ClientAuthenticationException e) {
        // Authentication error (wrong credentials, expired, etc.)
        System.out.println("Auth error: " + e.getMessage());
    }
    ```
    
    ## Logging
    
    Enable authentication logging for debugging.
    
    ```java
    // Via environment variable
    // AZURE_LOG_LEVEL=verbose
    
    // Or programmatically
    DefaultAzureCredential credential = new DefaultAzureCredentialBuilder()
        .enableAccountIdentifierLogging()  // Log account info
        .build();
    ```
    
    ## Environment Variables
    
    ```bash
    # DefaultAzureCredential configuration
    AZURE_TENANT_ID=<tenant-id>
    AZURE_CLIENT_ID=<client-id>
    AZURE_CLIENT_SECRET=<client-secret>
    
    # Managed Identity
    AZURE_CLIENT_ID=<user-assigned-mi-client-id>
    
    # Workload Identity (AKS)
    AZURE_FEDERATED_TOKEN_FILE=/var/run/secrets/azure/tokens/azure-identity-token
    
    # Logging
    AZURE_LOG_LEVEL=verbose
    
    # Authority host
    AZURE_AUTHORITY_HOST=https://login.microsoftonline.com/
    ```
    
    ## Best Practices
    
    1. **Use DefaultAzureCredential** - Works seamlessly from dev to production
    2. **Managed Identity in Production** - No secrets to manage, automatic rotation
    3. **Azure CLI for Local Dev** - Run `az login` before running your app
    4. **Least Privilege** - Grant only required permissions to service principals
    5. **Token Caching** - Enabled by default, reduces auth round-trips
    6. **Environment Variables** - Use for CI/CD, not hardcoded secrets
    
    ## Credential Selection Matrix
    
    | Environment | Recommended Credential |
    |-------------|----------------------|
    | Local Development | `DefaultAzureCredential` (uses Azure CLI) |
    | Azure App Service | `DefaultAzureCredential` (uses Managed Identity) |
    | Azure Functions | `DefaultAzureCredential` (uses Managed Identity) |
    | Azure Kubernetes Service | `WorkloadIdentityCredential` |
    | Azure VMs | `DefaultAzureCredential` (uses Managed Identity) |
    | CI/CD Pipeline | `EnvironmentCredential` |
    | Desktop App | `InteractiveBrowserCredential` |
    | CLI Tool | `DeviceCodeCredential` |
    
    ## Trigger Phrases
    
    - "Azure authentication Java", "DefaultAzureCredential Java"
    - "managed identity Java", "service principal Java"
    - "Azure login Java", "Azure credentials Java"
    - "AZURE_CLIENT_ID", "AZURE_TENANT_ID"
    

Comments (0)

Sign in to join the conversation.

No comments yet.

Reviews (0)

No reviews yet.

Related