用途
Azure Identity (Java) 用于让 Java 应用程序通过 Microsoft Entra ID(Azure AD)向 Azure 服务进行身份认证。
主要能力
该库提供多种凭据(Credential)类型,对应不同使用场景:
- DefaultAzureCredential:推荐方案,开发与生产均适用。它按顺序尝试多种认证方法:环境变量、工作负载标识(Workload Identity)、托管标识(Managed Identity)、Azure CLI、Azure PowerShell、Azure Developer CLI。
- ManagedIdentityCredential:适用于 Azure 托管应用(App Service、Functions、AKS、VM)。
- EnvironmentCredential:适用于使用环境变量的 CI/CD 流水线。
- ClientSecretCredential:使用密钥的服务主体。
- ClientCertificateCredential:使用证书的服务主体。
- AzureCliCredential:本地开发时使用 az login。
- InteractiveBrowserCredential:交互式登录流程。
- DeviceCodeCredential:无头设备认证。
使用方式
安装
<dependency>
<groupId>com.azure</groupId>
<artifactId>azure-identity</artifactId>
<version>1.15.0</version>
</dependency>
DefaultAzureCredential(推荐)
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();
配置 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
适用于 Azure 托管应用(App Service、Functions、AKS、VM)。
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();
使用密钥的服务主体
import com.azure.identity.ClientSecretCredential;
import com.azure.identity.ClientSecretCredentialBuilder;
ClientSecretCredential credential = new ClientSecretCredentialBuilder()
.tenantId("<tenant-id>")
.clientId("<client-id>")
.clientSecret("<client-secret>")
.build();
使用证书的服务主体
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();
环境凭据
从环境变量读取凭据。
import com.azure.identity.EnvironmentCredential;
import com.azure.identity.EnvironmentCredentialBuilder;
EnvironmentCredential credential = new EnvironmentCredentialBuilder().build();
必需的环境变量:
使用密钥的服务主体:
AZURE_TENANT_ID=<tenant-id>
AZURE_CLIENT_ID=<client-id>
AZURE_CLIENT_SECRET=<client-secret>
使用证书的服务主体:
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_TENANT_ID=<tenant-id>
AZURE_CLIENT_ID=<client-id>
AZURE_USERNAME=<username>
(以上环境变量列表在原始资料中未完整结束,后续内容暂未提供。)
适用场景
- Java 应用接入 Azure 服务时的统一认证。
- 本地开发(Azure CLI 登录、交互式浏览器登录、设备码登录)。
- CI/CD 流水线(环境变量凭据)。
- Azure 托管应用运行时(托管标识,如 App Service、Functions、AKS、VM)。
- 服务主体认证(密钥或证书)。
限制
具体收费、价格、平台限制、完整环境变量列表及使用限制等资料暂未提供。