在开发过程中,保护隐私密钥是一个很常见的场景,我们可以用多环境的配置文件来实现保护生产环境的密钥,也可以使用k8s或者配置中心的方式,Azure全家桶中,提供Azure Key Vault,可以方便我们快速的配置、使用和热重载对应的私密信息。
一、什么是Azure Key Vault
在之前的文章中,我们也详细说到了KeyVault的原理和开启方式,也介绍过如何将 Azure 应用程序配置服务与 Azure Key Vault 配合使用。 应用程序配置可以创建密钥来引用存储在 Key Vault 中的值,以帮助你结合使用这两个服务。 当应用程序配置创建此类密钥时,它会存储 Key Vault 值的 URI,而不是值本身。
本文主要说明了在代码中实现 Key Vault 引用。 它建立在快速入门中介绍的 Web 应用之上。 在继续操作之前,请先完成使用应用程序配置创建 ASP.NET Core 应用,相应的代码可以点击文章末尾的阅读原文。
在微软的官方教程中,也有很详细的内容和示例Demo,特别是很明显,把SpringBoot也做了讲解。看来微软在java这块还是很下功夫的。
二、在Azure中配置Key Vault
在之前的文章中也说到了,可以看看,进一步稳固下。
具体的查看之前的文章,有更详细的介绍:
《在ASP.Net Core和JAVA中,使用Azure配置密钥——Key Vault》
三、在ASP.NETCore中使用Key Vault
1、添加nuget依赖包
<PackageReference Include="Microsoft.Extensions.Configuration.AzureKeyVault" Version="3.1.21" />
<PackageReference Include="Microsoft.Extensions.Configuration.FileExtensions" Version="5.0.0" />
<PackageReference Include="Microsoft.Extensions.Configuration.Json" Version="5.0.0" />
2、配置环境变量
可以在ASP.NETCore项目的launchSettings.json中配置环境变量,也可以在本地机器上直接配置
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "np",
"AZURE_TENANT_ID": "xxx-xxx-xxx-xxx",
"AZURE_CLIENT_ID": "xx-xxxxx-xxxx-xxxx",
"AZURE_CLIENT_SECRET": "secret",
"AZURE_KEY_VAULT_URI": "https://laozhangisphi.vault.azure.cn/"
},
3、项目启动时,添加配置服务
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")
var vaultUri = Environment.GetEnvironmentVariable("AZURE_KEY_VAULT_URI");
config
.AddJsonFile("appsettings.json", true)
.AddJsonFile($"appsettings.{env.EnvironmentName}.json", true)
.AddEnvironmentVariables();
config.AddAzureKeyVault(vaultUri, clientId, clientSecret);
})
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>();
});
4、直接在代码中使用
因为已经注册到configration中了,所以使用方式和从appsettings.json中读取是一样的
//var conn = Configuration.GetValue<string>("XMatrix-AAAPlatform-MSServerConnectionString");
var mssqlUserName = Configuration.GetValue<string>("MSSQL-USERNAME");
var mssqlUserPwd = Configuration.GetValue<string>("MSSQL-PASSWORD");
var conn = Configuration.GetValue<string>("MysqlDbConnectionStrings");
conn = string.Format(conn, mssqlUserName, mssqlUserPwd);
Console.WriteLine(conn);
在接下来,就是该说下,如何在React或者Vue中,来实现对Azure的整体使用和架构搭建了,咱们下个文章继续吧。