使用服务主体进行 Azure 身份验证

本文介绍 Azure 标识库如何通过服务主体支持 Microsoft Entra 令牌身份验证。 本文介绍以下主题:

有关详细信息,请参阅 Microsoft Entra ID 中的应用程序对象和服务主体对象。 若要排查服务主体身份验证问题,请参阅排查服务主体身份验证问题

使用 Azure CLI 创建服务主体

使用以下 Azure CLI 示例创建或获取客户端密钥凭据。

使用以下命令创建服务主体,并配置其对 Azure 资源的访问权限:

az ad sp create-for-rbac \
    --name <your application name> \
    --role Contributor \
    --scopes /subscriptions/mySubscriptionID

此命令会返回类似于以下输出的值:

{
"appId": "generated-app-ID",
"displayName": "dummy-app-name",
"name": "http://dummy-app-name",
"password": "random-password",
"tenant": "tenant-ID"
}

使用以下命令创建服务主体和证书。 记下此证书的路径/位置。

az ad sp create-for-rbac \
    --name <your application name> \
    --role Contributor \
    --cert <certificate name> \
    --create-cert

检查返回的凭据,并记下以下信息:

  • AZURE\_CLIENT\_ID 作为 appId。
  • AZURE\_CLIENT\_SECRET 作为密码。
  • AZURE\_TENANT\_ID 作为租户。

客户端机密凭据

此凭据通过其客户端机密(密码)对创建的服务主体进行身份验证。 该示例演示如何使用 ClientSecretCredential 对来自 azure-security-keyvault-secrets 客户端库的 SecretClient 进行身份验证。

/**
 *  Authenticate with client secret.
 */
ClientSecretCredential clientSecretCredential = new ClientSecretCredentialBuilder()
  .clientId("<your client ID>")
  .clientSecret("<your client secret>")
  .tenantId("<your tenant ID>")
  .build();

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

客户端证书凭据

此凭据通过其客户端证书对创建的服务主体进行身份验证。 该示例演示如何使用 ClientCertificateCredential 对来自 azure-security-keyvault-secrets 客户端库的 SecretClient 进行身份验证。

/**
 *  Authenticate with a client certificate.
 */
ClientCertificateCredential clientCertificateCredential = new ClientCertificateCredentialBuilder()
  .clientId("<your client ID>")
  .pemCertificate("<path to PEM certificate>")
  // Choose between either a PEM certificate or a PFX certificate.
  //.pfxCertificate("<path to PFX certificate>", "PFX CERTIFICATE PASSWORD")
  .tenantId("<your tenant ID>")
  .build();

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

后续步骤

本文介绍了如何通过服务主体进行身份验证。 这种身份验证形式是你可以在 Azure SDK for Java 中进行身份验证的多种方法之一。 下列文章介绍了其他方式:

如果遇到与服务主体身份验证相关的问题,请参阅排查服务主体身份验证问题

掌握身份验证之后,请参阅在 Azure SDK for Java 中配置日志记录,以获取有关 SDK 提供的日志记录功能的信息。