使用 Java 和 Azure 标识进行 Azure 身份验证
本文概述了 Java Azure 标识库,该库在整个 Azure SDK for Java 中提供 Microsoft Entra 令牌身份验证支持。 此库提供了一组 TokenCredential
实现,可用于构建支持 Microsoft Entra 令牌身份验证的 Azure SDK 客户端。
Azure 标识库当前支持:
- Java 开发环境中的 Azure 身份验证,支持:
- IDEA IntelliJ 身份验证,其中包含从 Azure Toolkit for IntelliJ 检索的登录信息。
- Visual Studio Code 身份验证,登录信息保存在适用于 Visual Studio Code 的 Azure 插件中。
- Azure CLI 身份验证,登录信息保存在 Azure CLI 中
- 对 Azure 中托管的应用程序进行身份验证,支持:
- 默认 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-core 中 TokenCredential
抽象类的实现,你可以使用其中任何一个类来构造可使用 TokenCredential
进行身份验证的服务客户端。
DefaultAzureCredential
适用于应用程序最终在 Azure 云中运行的大多数方案。 DefaultAzureCredential
将常用于在部署时进行身份验证的凭据与用于在开发环境中进行身份验证的凭据相结合。 有关详细信息(包括使用 DefaultAzureCredential
的示例),请参阅对 Azure 托管的 Java 应用程序进行身份验证的默认 Azure 凭据部分。
示例
如使用 Azure SDK for Java 中所述,管理库略有不同。 它们的一个不同之处在于,用于使用 Azure 服务的库称为客户端库,用于管理 Azure 服务的库称为管理库。 以下部分提供了在客户端库和管理库中进行身份验证的简要概述。
对 Azure 客户端库进行身份验证
以下示例演示了使用 DefaultAzureCredential
从 azure-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
使用 DefaultAzureCredential
对 AzureResourceManager
实例进行身份验证。 你也可以使用 Azure 标识库中提供的其他令牌凭据实现来代替 DefaultAzureCredential
。
故障排除
有关指导,请参阅排查 Azure 标识身份验证的问题。
后续步骤
本文介绍了 Azure SDK for Java 中提供的 Azure 标识功能。 它将 DefaultAzureCredential
描述为在许多情况下常见且适当。 以下文章介绍了使用 Azure 标识库进行身份验证的其他方法,并提供了有关 DefaultAzureCredential
的详细信息: