使用 Java 和 Azure 标识进行 Azure 身份验证

本文概述了适用于 Java 的 Azure 标识库,该库跨 Azure SDK for Java 提供Microsoft Entra 令牌身份验证支持。 此库提供了一组 TokenCredential 实现,可用于构建支持 Microsoft Entra 令牌身份验证的 Azure SDK 客户端。

Azure 标识库当前支持:

请点击以下链接,详细了解每种身份验证方法的具体信息。 在本文的其余部分,我们将介绍常用的 DefaultAzureCredential 和相关主题。

添加 Maven 依赖项

若要添加 Maven 依赖项,请在项目的 pom.xml 文件中包含以下 XML。 将 {version_number} 替换为最新稳定版本的版本号,如 Azure 标识库页上所示。

<dependency>
    <groupId>com.azure</groupId>
    <artifactId>azure-identity</artifactId>
    <version>{version_number}</version>
</dependency>

关键概念

理解 Azure 标识库有两个关键概念:凭据的概念,以及该凭据的最常见实现 DefaultAzureCredential

凭据是一种类,包含或可以获取服务客户端对请求进行身份验证所需的数据。 Azure SDK 中的服务客户端在构造时接受凭据,服务客户端使用这些凭据对服务的请求进行身份验证。

Azure 标识库侧重于使用 Microsoft Entra ID 进行 OAuth 身份验证,它提供各种凭据类,可以获取 Microsoft Entra 令牌来对服务请求进行身份验证。 此库中的所有凭据类都是 azure-coreTokenCredential 抽象类的实现,你可以使用其中任何一个类来构造可使用 TokenCredential 进行身份验证的服务客户端。

DefaultAzureCredential 适用于应用程序最终在 Azure 云中运行的大多数方案。 DefaultAzureCredential 将常用于在部署时进行身份验证的凭据与用于在开发环境中进行身份验证的凭据相结合。 有关详细信息,包括使用DefaultAzureCredential的示例,请参阅身份验证 Azure 托管的 Java 应用程序的 DefaultAzureCredential 部分。

示例

使用 Azure SDK for Java 中所述,管理库略有不同。 它们的一个不同之处在于,用于使用 Azure 服务的库称为客户端库,用于管理 Azure 服务的库称为管理库。 以下部分提供了在客户端库和管理库中进行身份验证的简要概述。

对 Azure 客户端库进行身份验证

以下示例演示了使用 DefaultAzureCredentialazure-security-keyvault-secrets 客户端库中对 SecretClient 进行身份验证。

// Azure SDK client builders accept the credential as a parameter.
SecretClient client = new SecretClientBuilder()
  .vaultUrl("https://<your Key Vault name>.vault.azure.net")
  .credential(new DefaultAzureCredentialBuilder().build())
  .buildClient();

对 Azure 管理库进行身份验证

Azure 管理库使用与 Azure 客户端库相同的凭据 API,但还需要 Azure 订阅 ID 来管理该订阅上的 Azure 资源。

可以在 Azure 门户的“订阅”页上找到订阅 ID。 或者,使用以下 Azure CLI 命令获取订阅 ID:

az account list --output table

可以在 AZURE_SUBSCRIPTION_ID 环境变量中设置订阅 ID。 在以下示例中,AzureProfile 在创建 Manager 实例期间选取此 ID 作为默认订阅 ID:

AzureResourceManager azureResourceManager = AzureResourceManager.authenticate(
        new DefaultAzureCredentialBuilder().build(),
        new AzureProfile(AzureEnvironment.AZURE))
    .withDefaultSubscription();

本例中使用的 DefaultAzureCredential 使用 DefaultAzureCredentialAzureResourceManager 实例进行身份验证。 你也可以使用 Azure 标识库中提供的其他令牌凭据实现来代替 DefaultAzureCredential

故障排除

有关指导,请参阅排查 Azure 标识身份验证的问题

后续步骤

本文介绍了 Azure SDK for Java 中提供的 Azure 标识功能。 它将 DefaultAzureCredential 描述为在许多情况下常见且适当。 以下文章介绍了使用 Azure 标识库进行身份验证的其他方法,并提供了有关 DefaultAzureCredential 的详细信息: