对 Azure 托管的 Java 应用程序进行身份验证
本文介绍 Azure 标识库如何支持 Azure 上托管的应用程序的 Microsoft Entra 令牌身份验证。 这种支持是通过本文中讨论的一组 TokenCredential
实现来实现的。
本文介绍以下主题:
若要排查与 Azure 托管的应用程序相关的身份验证问题,请参阅排查 Azure 托管的应用程序身份验证问题。
DefaultAzureCredential
DefaultAzureCredential
将常用于在部署时进行身份验证的凭据与用于在开发环境中进行身份验证的凭据相结合。 有关详细信息,请参阅 DefaultAzureCredential 概述。
配置 DefaultAzureCredential
DefaultAzureCredential
通过 DefaultAzureCredentialBuilder
或环境变量上的资源库支持一组配置。
- 按照环境变量中的定义设置环境变量
AZURE_CLIENT_ID
、AZURE_CLIENT_SECRET
和AZURE_TENANT_ID
,配置DefaultAzureCredential
作为值指定的服务主体进行身份验证。 - 在生成器或环境变量
AZURE_CLIENT_ID
上设置.managedIdentityClientId(String)
配置为DefaultAzureCredential
以用户分配的托管标识进行身份验证,同时将其留空,将其配置为作为系统分配的托管标识进行身份验证。 - 在生成器或环境变量
AZURE_TENANT_ID
上设置.tenantId(String)
配置为DefaultAzureCredential
对共享令牌缓存或 IntelliJ IDEA 的特定租户进行身份验证。 - 设置环境变量
AZURE_USERNAME
会配置DefaultAzureCredential
从共享令牌缓存中选取相应的缓存令牌。
使用 DefaultAzureCredential 进行身份验证
以下示例演示如何使用DefaultAzureCredential
以下命令对 SecretClient
azure-security-keyvault-secrets 客户端库进行身份验证:
// Azure SDK client builders accept the credential as a parameter.
SecretClient client = new SecretClientBuilder()
.vaultUrl("https://<KEY_VAULT_NAME>.vault.azure.net")
.credential(new DefaultAzureCredentialBuilder().build())
.buildClient();
使用 DefaultAzureCredential 对用户分配的托管标识进行身份验证
以下示例演示了如何使用部署到 Azure 资源的 DefaultAzureCredential
对 azure-security-keyvault-secrets 客户端库中的 SecretClient
进行身份验证,并配置了用户分配的托管标识。
/**
* DefaultAzureCredential uses the user-assigned managed identity with the specified client ID.
*/
DefaultAzureCredential credential = new DefaultAzureCredentialBuilder()
.managedIdentityClientId("<CLIENT_ID>")
.build();
// Azure SDK client builders accept the credential as a parameter.
SecretClient client = new SecretClientBuilder()
.vaultUrl("https://<KEY_VAULT_NAME>.vault.azure.net")
.credential(credential)
.buildClient();
ManagedIdentityCredential
ManagedIdentityCredential 对 Azure 资源的托管标识(系统分配或用户分配)进行身份验证。 因此,如果应用程序在支持通过 IDENTITY/MSI
、 IMDS
终结点或两者进行托管标识的 Azure 资源中运行,则此凭据会获得应用程序身份验证,并提供无机密身份验证体验。
有关详细信息,请参阅什么是 Azure 资源的托管标识?
在 Azure 中通过托管标识进行身份验证
以下示例演示如何在 ManagedIdentityCredential
Azure 上使用虚拟机、App 服务、Functions 应用、Cloud Shell、Service Fabric、Arc 或 AKS 环境(启用了系统分配或用户分配的托管标识)从 azure-security-keyvault-secrets 客户端库进行身份验证SecretClient
。
/**
* Authenticate with a user-assigned managed identity.
*/
ManagedIdentityCredential credential = new ManagedIdentityCredentialBuilder()
.clientId("<CLIENT_ID>") // required only for user-assigned
.build();
// Azure SDK client builders accept the credential as a parameter.
SecretClient client = new SecretClientBuilder()
.vaultUrl("https://<KEY_VAULT_NAME>.vault.azure.net")
.credential(credential)
.buildClient();
环境变量
可以使用环境变量配置 DefaultAzureCredential
和 EnvironmentCredential
。 每种类型的身份验证都需要特定变量的值:
具有机密的服务主体
变量名称 | 值 |
---|---|
AZURE_CLIENT_ID |
Microsoft Entra 应用程序的 ID。 |
AZURE_TENANT_ID |
应用程序的 Microsoft Entra 租户的 ID。 |
AZURE_CLIENT_SECRET |
应用程序的客户端机密之一。 |
具有证书的服务主体
变量名称 | 值 |
---|---|
AZURE_CLIENT_ID |
Microsoft Entra 应用程序的 ID。 |
AZURE_TENANT_ID |
应用程序的 Microsoft Entra 租户的 ID。 |
AZURE_CLIENT_CERTIFICATE_PATH |
包括私钥的 PEM 编码的证书文件的路径(无密码保护)。 |
AZURE_CLIENT_CERTIFICATE_PASSWORD |
(可选)证书文件的密码(如果有)。 |
AZURE_CLIENT_SEND_CERTIFICATE_CHAIN |
(可选)在 x5c 标头中发送证书链以支持基于使用者名称/基于颁发者的身份验证。 |
用户名和密码
变量名称 | 值 |
---|---|
AZURE_CLIENT_ID |
Microsoft Entra 应用程序的 ID。 |
AZURE_TENANT_ID |
应用程序的 Microsoft Entra 租户的 ID。 |
AZURE_USERNAME |
用户名(通常为电子邮件地址)。 |
AZURE_PASSWORD |
给定用户名的关联密码。 |
按此顺序尝试配置。 例如,如果客户端机密和证书的值都存在,则使用客户端机密。
后续步骤
本文介绍了 Azure 中托管的应用程序的身份验证。 这种身份验证形式是你可以在 Azure SDK for Java 中进行身份验证的多种方法之一。 下列文章介绍了其他方式:
如果遇到与 Azure 托管的应用程序身份验证相关的问题,请参阅排查 Azure 托管的应用程序身份验证问题。
掌握身份验证之后,请参阅在 Azure SDK for Java 中配置日志记录,以获取有关 SDK 提供的日志记录功能的信息。