思路浅析

在软件开发中,项目安全是重中之重,特别是在多部门或者开源项目中,如何保存我们的密钥,但又不影响本地的开发,更需要我们开发者需要考虑的问题,这里简单的列举了下平时开发中我们做的方案:

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相关推荐

  1. ASP.NET Core 2.2中的Endpoint路由

    Endpoint路由 在ASP.NET Core 2.2中,新增了一种路由,叫做Endpoint(终结点)路由.本文将以往的路由系统称为传统路由. 本文通过源码的方式介绍传统路由和Endpoint路由 ...

  2. ASP.NET Core 3.0中使用动态控制器路由

    原文:Dynamic controller routing in ASP.NET Core 3.0 作者:Filip W 译文:https://www.cnblogs.com/lwqlun/p/114 ...

  3. 在 ASP.NET Core Web API中使用 Polly 构建弹性容错的微服务

    在 ASP.NET Core Web API中使用 Polly 构建弹性容错的微服务 https://procodeguide.com/programming/polly-in-aspnet-core ...

  4. ASP.NET Core - 在ActionFilter中使用依赖注入

    上次ActionFilter引发的一个EF异常,本质上是对Core版本的ActionFilter的知识掌握不够牢固造成的,所以花了点时间仔细阅读了微软的官方文档.发现除了IActionFilter.I ...

  5. 将终结点图添加到你的ASP.NET Core应用程序中

    在本文中,我将展示如何使用DfaGraphWriter服务在ASP.NET Core 3.0应用程序中可视化你的终结点路由.上面文章我向您演示了如何生成一个有向图(如我上篇文章[译]使用DOT语言和G ...

  6. 一张大图了解ASP.NET Core 3.1 中的Authentication与Authorization

    下面是一张ASP.NET Core 3.1 中关于Authentication与Authorization的主流程框线图,点击这里查看全图:https://johnnyqian.net/images/ ...

  7. 避免在 ASP.NET Core 3.0 中为启动类注入服务

    本篇是如何升级到ASP.NET Core 3.0系列文章的第二篇. Part 1 - 将.NET Standard 2.0 类库转换为.NET Core 3.0 类库 Part 2 - IHostin ...

  8. asp.net core 3.0 中使用 swagger

    asp.net core 3.0 中使用 swagger Intro 上次更新了 asp.net core 3.0 简单的记录了一下 swagger 的使用,那个项目的 api 比较简单,都是匿名接口 ...

  9. ASP.NET Core 3.0中支持AI的生物识别安全

    本文共两个部分,这是第一部分,其中介绍了 ASP.NET Core 3 中旨在将授权逻辑与基本的用户角色相分离的基于策略的授权模型. 此部分提供了此授权进程的基于生物识别信息(如人脸识别或语音识别)的 ...

最新文章

  1. load balancer 配置参考
  2. 西电计算机组装实验报告,西电模电实验报告(共7篇).docx
  3. Spring Security OAuth 个性化token
  4. 信息学奥赛一本通 2052:【例3.2】范围判断
  5. 佳恩半导体完成数千万A轮融资
  6. [leetcode] 5331. 跳跃游戏 V
  7. 基于VUE的前端框架搭建
  8. 吴恩达深度学习——浅层神经网络
  9. iOS底层探索之多线程(十)—GCD源码分析( 信号量dispatch_semaphore_t)
  10. web sevice 生成代理类及使用
  11. Springboot配置文件
  12. 洛马公司获得阿联酋“萨德”导弹防御系统支持合同-我爱无人机网
  13. oracle单表空间预估,使用ARIMA和腾讯的Metis时序数据异常检测来预测系统空间容量变化趋势...
  14. Oracle、聚石塔
  15. 方差公式初三_九年级同步数学公式:方差公式(3)
  16. C/C++函数注释格式
  17. 网络的形成-从原始部落到现代化世界
  18. SpringDataRedis使用
  19. 查看linux ko内核版本,查看linux内核版本及操作系统版本的命令
  20. 在同一个二维坐标系绘制出一元二次曲线, sin正弦、cos余弦曲线 (numpy,matplotlib.pyplot )

热门文章

  1. 【转】OpenGL超级宝典笔记——纹理映射Mipmap
  2. 编程之美3——N!末尾有多少个0
  3. ubuntu 下安装五笔输入法
  4. “人肉”背后隐藏的网络风险
  5. 双击打开Inventor文件
  6. Jquey将序列化对象在前台显示地几种方式
  7. Eclipse 导出
  8. 字符串表达式求值 C#实现
  9. idea中自动deployment的步骤
  10. floyd判环算法(龟兔赛跑算法)