在ASP.Net Core和JAVA中,使用Azure配置密钥——Key Vault
思路浅析
在软件开发中,项目安全是重中之重,特别是在多部门或者开源项目中,如何保存我们的密钥,但又不影响本地的开发,更需要我们开发者需要考虑的问题,这里简单的列举了下平时开发中我们做的方案:
1、本地直接采用localhost的形式开发。无论是DB还是ES/Redis/MQ,或者是其他的,都一股脑用本地的参数,然后部署到K8s的时候,使用Configmap的形式挂载。也是一种方案,但是会使dev和prod之间隔离的比较厉害。
2、使用远程配置中心来统一处理本地和生产直接的数据。比如常见的就是Apollo,Azure的Key Vault技术等等。推荐的方式。
3、每次上线都手动修改。这显然是不合理的。
作为经常使用Azure的开发者,决定使用Key Vault技术尝试一波,并在ASP.NetCore和SpringBoot中,来一个Demo尝试。
PS:本文采用的都是世纪互联的azure.cn的。
前期准备账号
首先,需要注册一个Azure账号。
其次,需要注册一个应用程序,注册的时候,填写Client密码,密码要好好保存哟,以后会多次使用。
搜索app registration,注册一个账号
输入应用名称,其他的都默认即可
接下来,在Certificates & secrets中,添加Client secrets
有了应用,就可以在应用内设置密钥了。
这个时候我们已经有两个参数了,分别是ClientId和ClientSecret。
配置key vault
步骤 1 - 添加Key vault服务
继续在顶部搜索Key vault关键字
创建一个全新的key vault服务,选择自己的订阅和资源组,设置下名称
创建完成后,就可以在keyvault的overview页,看到另外两个参数了:
另外两个参数,一个是vault的uri,一个是tenantid也准备好了。
到这里四个参数都已经准备好了。
步骤 2 - 参数设置
点击settings下面的secrets选项,创建或导入配置:
在弹出的新页面中,选择Manual方式,输入name和value,配置数据库的用户名:
然后就创建完成了,可以仿照的把sqlserver的密码也配置一下
现在,万事具备,只差写代码了。
新建一个Core项目
步骤 1 - 创建一个ASP.NetCore5.0 API项目
过程很简单,就不多说了,创建好后,添加nuget包:
<PackageReference Include="Microsoft.Extensions.Configuration.AzureKeyVault" Version="3.1.21" />
<PackageReference Include="Microsoft.VisualStudio.Azure.Containers.Tools.Targets" Version="1.10.9" />
然后,将上边四个变量放到环境变量里,本地开发可以在launchSettings.json里
"IIS Express": {"commandName": "IISExpress","launchBrowser": true,"launchUrl": "swagger","environmentVariables": {"ASPNETCORE_ENVIRONMENT": "Development","AZURE_TENANT_ID": "你的tenantid","AZURE_CLIENT_ID": "你的客户端id","AZURE_CLIENT_SECRET": "你的客户端密钥","AZURE_KEY_VAULT_URI": "https://blog-core-keyvault.vault.azure.cn/"}}
步骤 2 - 配置Program,连接配置中心
在Program.cs里配置
Host.CreateDefaultBuilder(args).ConfigureAppConfiguration((hostingContext, config) =>{var env = hostingContext.HostingEnvironment;var tenantId = Environment.GetEnvironmentVariable("AZURE_TENANT_ID");var clientId = Environment.GetEnvironmentVariable("AZURE_CLIENT_ID");var clientSecret = Environment.GetEnvironmentVariable("AZURE_CLIENT_SECRET");config.AddJsonFile("appsettings.json", true).AddJsonFile($"appsettings.{env.EnvironmentName}.json", true).AddEnvironmentVariables();string vaultUri = "https://blog-core-keyvault.vault.azure.cn/";config.AddAzureKeyVault(vaultUri, clientId, clientSecret);}).ConfigureWebHostDefaults(webBuilder =>{webBuilder.UseStartup<Startup>();});
如果这个时候,启动应用没有报错的话,那恭喜你,已经连接成功了,接下来就是获取指定的参数了。
步骤 3 - 任何地方获取Key Vault的值
这里使用方法就是和普通的appsettings.json里的一模一样了,注入configuration即可:
_configuration.GetValue<string>("MSSQL-USER-PASSWORD");
好啦,在ASP.NETCore应用中,连接Azure Key Vault已经说完了,看看Java如何操作吧。
新建一个JAVA项目
步骤 1 - 创建一个Sring Boot项目
过程也是很简单,可以用Idea创建,也可以使用官方的模板来创建,就不多说了,创建好后,添加pom包:
<dependency><groupId>com.azure.spring</groupId><artifactId>azure-spring-boot-starter-keyvault-secrets</artifactId>
</dependency
然后,将上边四个变量放到配置文件里,
azure.keyvault.enabled=true
azure.keyvault.uri=https://blog-core-keyvault.vault.azure.cn/
azure.keyvault.client-id=你的应用id
azure.keyvault.client-key=你的应用密钥
azure.keyvault.tenant-id=你的tenantid
azure.keyvault.authority-host=https://login.chinacloudapi.cn
注意最后一个配置很重要,需要指定host地址,因为默认的是azure.com的,如果你是azure.com的可以不用指定。
步骤 2 - 任何地方获取Key Vault的值
这里使用方法就是和普通的yml里的一模一样了,配置变量,打上@Value注解即可:
@SpringBootApplication
public class KeyvaultApplication implements CommandLineRunner {@Value("${MSSQL-USER-NAME}")private String mySecretProperty;public static void main(String[] args) {SpringApplication.run(KeyvaultApplication.class, args);}@Overridepublic void run(String... args) {System.out.println("property your-property-name value is: " + mySecretProperty);}
}
好啦,在JAVA应用中,连接Azure Key Vault也说完了,大家可以尝试动手联系一下哟。
总结
本文以 ASP.NET Core 和 JAVA 为例讲解了如何在 Azure 中连接Key Vault配置,整体流程简单方便,文档特别清晰,再一次为微软Doc文档而欢呼。
*Source Link:
https://github.com/Azure/azure-sdk-for-java/tree/master/sdk/spring/azure-spring-boot-starter-keyvault-secrets
https://devblogs.microsoft.com/dotnet/category/net-core/?WT.mc_id=DOP-MVP-5003704
*Github:
https://github.com/anjoy8/Blog.Core/
彩蛋
牺牲了很多个周末的时光,前前后后近一年的时间,我和其他几个小伙伴(主要是另外三个小伙伴来做的),将我这两年的博客整理了一本书——《ASP.Net Core 5.0入门与实战》,元旦就可以出版啦!!!有需要的小伙伴可以到时候在各大平台搜索哟,还有一个月的倒计时。
友情提醒,大部分的内容都我这三年来写的博客相关的,也有新的内容,比如VUE3.0等等,良性购买哟。
在ASP.Net Core和JAVA中,使用Azure配置密钥——Key Vault相关推荐
- ASP.NET Core 2.2中的Endpoint路由
Endpoint路由 在ASP.NET Core 2.2中,新增了一种路由,叫做Endpoint(终结点)路由.本文将以往的路由系统称为传统路由. 本文通过源码的方式介绍传统路由和Endpoint路由 ...
- ASP.NET Core 3.0中使用动态控制器路由
原文:Dynamic controller routing in ASP.NET Core 3.0 作者:Filip W 译文:https://www.cnblogs.com/lwqlun/p/114 ...
- 在 ASP.NET Core Web API中使用 Polly 构建弹性容错的微服务
在 ASP.NET Core Web API中使用 Polly 构建弹性容错的微服务 https://procodeguide.com/programming/polly-in-aspnet-core ...
- ASP.NET Core - 在ActionFilter中使用依赖注入
上次ActionFilter引发的一个EF异常,本质上是对Core版本的ActionFilter的知识掌握不够牢固造成的,所以花了点时间仔细阅读了微软的官方文档.发现除了IActionFilter.I ...
- 将终结点图添加到你的ASP.NET Core应用程序中
在本文中,我将展示如何使用DfaGraphWriter服务在ASP.NET Core 3.0应用程序中可视化你的终结点路由.上面文章我向您演示了如何生成一个有向图(如我上篇文章[译]使用DOT语言和G ...
- 一张大图了解ASP.NET Core 3.1 中的Authentication与Authorization
下面是一张ASP.NET Core 3.1 中关于Authentication与Authorization的主流程框线图,点击这里查看全图:https://johnnyqian.net/images/ ...
- 避免在 ASP.NET Core 3.0 中为启动类注入服务
本篇是如何升级到ASP.NET Core 3.0系列文章的第二篇. Part 1 - 将.NET Standard 2.0 类库转换为.NET Core 3.0 类库 Part 2 - IHostin ...
- asp.net core 3.0 中使用 swagger
asp.net core 3.0 中使用 swagger Intro 上次更新了 asp.net core 3.0 简单的记录了一下 swagger 的使用,那个项目的 api 比较简单,都是匿名接口 ...
- ASP.NET Core 3.0中支持AI的生物识别安全
本文共两个部分,这是第一部分,其中介绍了 ASP.NET Core 3 中旨在将授权逻辑与基本的用户角色相分离的基于策略的授权模型. 此部分提供了此授权进程的基于生物识别信息(如人脸识别或语音识别)的 ...
最新文章
- load balancer 配置参考
- 西电计算机组装实验报告,西电模电实验报告(共7篇).docx
- Spring Security OAuth 个性化token
- 信息学奥赛一本通 2052:【例3.2】范围判断
- 佳恩半导体完成数千万A轮融资
- [leetcode] 5331. 跳跃游戏 V
- 基于VUE的前端框架搭建
- 吴恩达深度学习——浅层神经网络
- iOS底层探索之多线程(十)—GCD源码分析( 信号量dispatch_semaphore_t)
- web sevice 生成代理类及使用
- Springboot配置文件
- 洛马公司获得阿联酋“萨德”导弹防御系统支持合同-我爱无人机网
- oracle单表空间预估,使用ARIMA和腾讯的Metis时序数据异常检测来预测系统空间容量变化趋势...
- Oracle、聚石塔
- 方差公式初三_九年级同步数学公式:方差公式(3)
- C/C++函数注释格式
- 网络的形成-从原始部落到现代化世界
- SpringDataRedis使用
- 查看linux ko内核版本,查看linux内核版本及操作系统版本的命令
- 在同一个二维坐标系绘制出一元二次曲线, sin正弦、cos余弦曲线 (numpy,matplotlib.pyplot )