如何在 Spring Boot 中将 Azure Key Vault 与属性源集成?

问题描述 投票:0回答:1

我是 Azure 中的新用户。我创建了一个小应用程序,在 application.properties 文件中提到了一个秘密

JWT-SET-URI
。这个秘密,是我在
azure key vaults
中创造的。

Spring启动版本:3.1.5

Azure 帐户:免费个人帐户(12 个月)

应用程序属性

spring.security.oauth2.resourceserver.jwt.jwk-set-uri=${JWT-SET-URI}
spring.cloud.azure.keyvault.secret.property-sources[0].enabled=true
spring.cloud.azure.keyvault.secret.property-sources[0].endpoint=https://demo-vault.vault.azure.net/

我也安装了

Azure CLI
。一旦我运行命令
az login
,如果我启动应用程序,它就可以正常工作。但是当
Azure CLI
不存在或运行
az logout
命令时。应用程序未启动。

我的问题是,有什么方法可以在没有

Azure CLI
的情况下运行应用程序?

作为参考,我遵循了此文档:https://learn.microsoft.com/en-us/azure/developer/java/spring-framework/configure-spring-boot-starter-java-app-with-azure -密钥库

spring-boot azure azure-keyvault
1个回答
0
投票

我在没有 Azure CLI 登录方法的情况下尝试了以下代码,并使用服务主体、客户端凭据方法从密钥保管库检索了密钥。

代码:

SecretController.java:

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("/api")
public class SecretController {
    @Autowired
    private KeyVaultService keyVaultService;

    @GetMapping("/secret")
    public String getSecret() {
        return keyVaultService.getSecretValue();
    }
}

KeyVaultService.java:

import com.azure.identity.ClientSecretCredential;
import com.azure.identity.ClientSecretCredentialBuilder;
import com.azure.security.keyvault.secrets.SecretClient;
import com.azure.security.keyvault.secrets.SecretClientBuilder;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;

@Service
public class KeyVaultService {
    @Value("${azure.keyvault.vault-url}")
    private String vaultUrl;

    @Value("${azure.keyvault.client-id}")
    private String clientId;

    @Value("${azure.keyvault.client-secret}")
    private String clientSecret;

    @Value("${azure.keyvault.tenant-id}")
    private String tenantId;

    @Value("${azure.keyvault.secret-name}")
    private String secretName;

    public String getSecretValue() {
        ClientSecretCredential clientSecretCredential = new ClientSecretCredentialBuilder()
                .clientId(clientId)
                .clientSecret(clientSecret)
                .tenantId(tenantId)
                .build();

        SecretClient secretClient = new SecretClientBuilder()
                .vaultUrl(vaultUrl)
                .credential(clientSecretCredential)
                .buildClient();

        return secretClient.getSecret(secretName).getValue();
    }
}

application.properties:

azure.keyvault.vault-url=https://<keyvault_name>.vault.azure.net
azure.keyvault.client-id=<app_client_id>
azure.keyvault.client-secret=<app_client-secret>
azure.keyvault.tenant-id=<tenant-id>
azure.keyvault.secret-name=kamsecret

以下是我的密钥库中的秘密值。

enter image description here

我授予应用程序访问权限以从密钥库中检索机密,如下所示:

enter image description here

代码运行成功如下:

enter image description here

我从浏览器中的密钥保管库检索了密钥,如下所示。

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.