You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SpringBoot中Azure Key Vault连接的客户端密钥加密问题

SpringBoot连接Azure Key Vault时客户端密钥的安全处理方案

方案一:加密application.properties中的客户端密钥

可以用Jasypt实现属性加密,仅对client-secret字段加密:

  1. 引入Jasypt依赖(Maven示例):
<dependency>
    <groupId>com.github.ulisesbocchio</groupId>
    <artifactId>jasypt-spring-boot-starter</artifactId>
    <version>3.0.5</version>
</dependency>
  1. 生成加密后的客户端密钥
    用Jasypt命令行工具生成加密字符串:
java -cp jasypt-1.9.3.jar org.jasypt.intf.cli.JasyptPBEStringEncryptionCLI input="你的客户端密钥" password="加密密钥" algorithm=PBEWithMD5AndDES
  1. 修改application.properties配置
    把加密后的字符串用ENC()包裹:
spring.cloud.azure.keyvault.secret.property-sources[0].credential.client-id= xxxx
spring.cloud.azure.keyvault.secret.property-sources[0].credential.client-secret=ENC(加密后的字符串)

spring.cloud.azure.keyvault.secret.property-sources[0].endpoint= abc
spring.cloud.azure.keyvault.secret.property-sources[0].profile.tenant-id=xxxx
  1. 传递加密密钥
    加密密钥绝对不能存配置文件,要通过环境变量或启动参数传递:
  • 环境变量:JASYPT_ENCRYPTOR_PASSWORD=你的加密密钥
  • 启动参数:java -jar app.jar -Djasypt.encryptor.password=你的加密密钥

方案二:完全不在配置文件中存储客户端密钥

这是更安全的方式,彻底避免密钥出现在配置文件里:

1. 环境变量传递

设置系统环境变量,SpringBoot会自动绑定配置:

# Linux/macOS
export SPRING_CLOUD_AZURE_KEYVAULT_SECRET_PROPERTY_SOURCES_0_CREDENTIAL_CLIENT_SECRET=你的客户端密钥

# Windows
set SPRING_CLOUD_AZURE_KEYVAULT_SECRET_PROPERTY_SOURCES_0_CREDENTIAL_CLIENT_SECRET=你的客户端密钥

启动应用后,Spring会自动读取该环境变量填充配置。

2. 启动参数传递

在启动应用时通过-D参数直接传递:

java -jar app.jar -Dspring.cloud.azure.keyvault.secret.property-sources[0].credential.client-secret=你的客户端密钥

3. 使用Azure托管身份(推荐)

完全抛弃客户端密钥,用Azure托管身份实现无密钥访问:

  • 在Azure中给你的应用所在的资源(虚拟机、App Service、AKS等)启用系统分配或用户分配的托管身份
  • 在Azure Key Vault的访问策略中,给该托管身份分配“密钥/机密/证书”的访问权限
  • 修改application.properties配置,去掉client-id和client-secret,添加托管身份配置:
spring.cloud.azure.keyvault.secret.property-sources[0].endpoint= abc
spring.cloud.azure.keyvault.secret.property-sources[0].profile.tenant-id=xxxx
spring.cloud.azure.keyvault.secret.property-sources[0].credential.managed-identity-enabled=true
# 如果是用户分配的托管身份,需要加上下面一行
# spring.cloud.azure.keyvault.secret.property-sources[0].credential.client-id=托管身份的Client ID

内容的提问来源于stack exchange,提问作者r_k047

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 18:01:25