SuperAPI AI 工具集

azure-identity-java

安全与审计

查看项目

更新于 10-16 11:48

技能介绍

用途

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)。
  • 服务主体认证(密钥或证书)。

限制

具体收费、价格、平台限制、完整环境变量列表及使用限制等资料暂未提供。