如何使用 Azure Java SDK 从 java 后端连接到 Azure Key Vault?

How connect to Azure Key Vault from java backend using Azure Java SDK?

已遵循此文档:

https://github.com/Azure/azure-sdk-for-java/blob/master/sdk/keyvault/azure-security-keyvault-secrets/README.md

我收到错误:

AADSTS900382:跨云请求不支持机密客户端

请注意,这是政府云。

难道 Java 应用程序必须与 Azure Key Vault 托管在云中的同一台服务器上吗?因为这对我来说真的没有意义。

关于这个问题,那是因为所有 SDK 默认使用 https://login.microsoftonline.com 作为 Azure Active Directory 授权主机。每个其他云都有不同的权限主机端点。所以我们需要在创建DefaultAzureCredential.

时更改权限主机

例如。我使用 SDK Azure Identity Version 1.1.0-beta.4

  1. 安装SDK
<dependencies>
  <dependency>
    <groupId>com.azure</groupId>
    <artifactId>azure-identity</artifactId>
    <version>1.1.0-beta.4</version>
  </dependency>
</dependencies>
  1. 代码
/** 
 * the class `KnownAuthorityHosts` has the all cloud Azure Active Directory authority enpoint :
 * https://docs.microsoft.com/en-us/java/api/com.azure.identity.knownauthorityhosts?view=azure-java-preview
*/
DefaultAzureCredential cred = new DefaultAzureCredentialBuilder().
                 authorityHost(KnownAuthorityHosts.AZURE_US_GOVERNMENT)
                 .build();
SecretClient client = new SecretClientBuilder()
        .vaultUrl(<your-vault-url>)
        .credential(cred )
        .buildClient();

详情请参考article