首页 > 解决方案 > 如何使用 Azure Java SDK 从 Java 后端连接到 Azure Key Vault?

问题描述

遵循此文档:

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

我得到错误:

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

请注意,这是使用政府云。

Java 应用程序是否必须托管在与 azure key vault 相同的云服务器上?因为这对我来说真的没有意义。

标签: javaazureazure-keyvaultazure-java-sdk

解决方案


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

例如。我用sdkAzure 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();

更多详情请参考文章


推荐阅读