在ASP.Net Core和JAVA中,使用Azure配置密钥——Key Vault

2023-11-05 20:38

本文主要是介绍在ASP.Net Core和JAVA中,使用Azure配置密钥——Key Vault,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

                 思路浅析               

c680872f79fc00d6809b311825ff77a5.png

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

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的。

   前期准备账号   

d46ee6a68c4ae9bbe589f1feb7a4e205.png

首先,需要注册一个Azure账号。

其次,需要注册一个应用程序,注册的时候,填写Client密码,密码要好好保存哟,以后会多次使用。

搜索app registration,注册一个账号

6c99e5e4baaa731e233d79b09bc81a0e.png

输入应用名称,其他的都默认即可

99cbd4ef4dccf7e25a8d5fb81d87a542.png

接下来,在Certificates & secrets中,添加Client secrets

3db63a40dbedd991b187d87e0546a09c.png

有了应用,就可以在应用内设置密钥了。

这个时候我们已经有两个参数了,分别是ClientId和ClientSecret。

   配置key vault   

4745ce5934a6d9b8463aab552d0f5ba8.png

步骤 1 - 添加Key vault服务

继续在顶部搜索Key vault关键字

9c9c4452a4023c6ff698d55427ef6ff3.png

创建一个全新的key vault服务,选择自己的订阅和资源组,设置下名称

00a792ced25bc598290754af6b6fcd03.png

创建完成后,就可以在keyvault的overview页,看到另外两个参数了:

7f75ba8c6445d41f699ba1d51db9b924.png

另外两个参数,一个是vault的uri,一个是tenantid也准备好了。

到这里四个参数都已经准备好了。

步骤 2 - 参数设置

点击settings下面的secrets选项,创建或导入配置:

6981a7c3b57d6e2e56c5f785fe7f649f.png

在弹出的新页面中,选择Manual方式,输入name和value,配置数据库的用户名:

3e663fe347c6bc6b8fcd22bda16c1918.png

然后就创建完成了,可以仿照的把sqlserver的密码也配置一下

d7184b296319c47cbd61d1d4e6a0ddaf.png

现在,万事具备,只差写代码了。

   新建一个Core项目   

aef42fd171bbbe8a2db94794000d71da.png

步骤 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项目   

844aacde196c9bcb096a3b949b4d2dfe.png

步骤 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也说完了,大家可以尝试动手联系一下哟。

      总结      

fb477bfa2bce376fed4059428ef69407.png

本文以 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等等,良性购买哟。

2da1ce0a8e569cbf58ff48f93d0983e1.png

这篇关于在ASP.Net Core和JAVA中,使用Azure配置密钥——Key Vault的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/352348

相关文章

Java通过驱动包(jar包)连接MySQL数据库的步骤总结及验证方式

《Java通过驱动包(jar包)连接MySQL数据库的步骤总结及验证方式》本文详细介绍如何使用Java通过JDBC连接MySQL数据库,包括下载驱动、配置Eclipse环境、检测数据库连接等关键步骤,... 目录一、下载驱动包二、放jar包三、检测数据库连接JavaJava 如何使用 JDBC 连接 mys

SpringBoot线程池配置使用示例详解

《SpringBoot线程池配置使用示例详解》SpringBoot集成@Async注解,支持线程池参数配置(核心数、队列容量、拒绝策略等)及生命周期管理,结合监控与任务装饰器,提升异步处理效率与系统... 目录一、核心特性二、添加依赖三、参数详解四、配置线程池五、应用实践代码说明拒绝策略(Rejected

C++ Log4cpp跨平台日志库的使用小结

《C++Log4cpp跨平台日志库的使用小结》Log4cpp是c++类库,本文详细介绍了C++日志库log4cpp的使用方法,及设置日志输出格式和优先级,具有一定的参考价值,感兴趣的可以了解一下... 目录一、介绍1. log4cpp的日志方式2.设置日志输出的格式3. 设置日志的输出优先级二、Window

Ubuntu如何分配​​未使用的空间

《Ubuntu如何分配​​未使用的空间》Ubuntu磁盘空间不足,实际未分配空间8.2G因LVM卷组名称格式差异(双破折号误写)导致无法扩展,确认正确卷组名后,使用lvextend和resize2fs... 目录1:原因2:操作3:报错5:解决问题:确认卷组名称​6:再次操作7:验证扩展是否成功8:问题已解

Qt使用QSqlDatabase连接MySQL实现增删改查功能

《Qt使用QSqlDatabase连接MySQL实现增删改查功能》这篇文章主要为大家详细介绍了Qt如何使用QSqlDatabase连接MySQL实现增删改查功能,文中的示例代码讲解详细,感兴趣的小伙伴... 目录一、创建数据表二、连接mysql数据库三、封装成一个完整的轻量级 ORM 风格类3.1 表结构

一文详解SpringBoot中控制器的动态注册与卸载

《一文详解SpringBoot中控制器的动态注册与卸载》在项目开发中,通过动态注册和卸载控制器功能,可以根据业务场景和项目需要实现功能的动态增加、删除,提高系统的灵活性和可扩展性,下面我们就来看看Sp... 目录项目结构1. 创建 Spring Boot 启动类2. 创建一个测试控制器3. 创建动态控制器注

使用Docker构建Python Flask程序的详细教程

《使用Docker构建PythonFlask程序的详细教程》在当今的软件开发领域,容器化技术正变得越来越流行,而Docker无疑是其中的佼佼者,本文我们就来聊聊如何使用Docker构建一个简单的Py... 目录引言一、准备工作二、创建 Flask 应用程序三、创建 dockerfile四、构建 Docker

Python使用vllm处理多模态数据的预处理技巧

《Python使用vllm处理多模态数据的预处理技巧》本文深入探讨了在Python环境下使用vLLM处理多模态数据的预处理技巧,我们将从基础概念出发,详细讲解文本、图像、音频等多模态数据的预处理方法,... 目录1. 背景介绍1.1 目的和范围1.2 预期读者1.3 文档结构概述1.4 术语表1.4.1 核

Java操作Word文档的全面指南

《Java操作Word文档的全面指南》在Java开发中,操作Word文档是常见的业务需求,广泛应用于合同生成、报表输出、通知发布、法律文书生成、病历模板填写等场景,本文将全面介绍Java操作Word文... 目录简介段落页头与页脚页码表格图片批注文本框目录图表简介Word编程最重要的类是org.apach

Python使用pip工具实现包自动更新的多种方法

《Python使用pip工具实现包自动更新的多种方法》本文深入探讨了使用Python的pip工具实现包自动更新的各种方法和技术,我们将从基础概念开始,逐步介绍手动更新方法、自动化脚本编写、结合CI/C... 目录1. 背景介绍1.1 目的和范围1.2 预期读者1.3 文档结构概述1.4 术语表1.4.1 核