Azure|Azure KeyVault(三)通过 Microsoft.Azure.KeyVault 类库在 .NET Core 上获取 Secrets
一,引言
上一篇文章,我们介绍了 Azure Key Vault 在实际项目中的用途,Azure Key Vault 作为密钥管理的服务,我们可以很轻松的利用它创建和控制用于加密的密钥,和管理证书和机密信息。而且对于我们开发者来说,我们的应用程序中完全可以摒弃配置这种密钥和机密信息,不再需要将这些机密信息作为代码的一部分了。我们只需要在应用程序中配置 Azure Key Vault URL,再为身份验证配置适当的访问权限,应用程序就可以很轻松的访问 Azure Key Vault(密钥保管库)了。
今天我们分析的内容是在 .NET Core Web 项目添加了 “Microsoft.Azure.KeyVault” 的引言,并且当前 nuget 也被替代了,但是也不影响我们正常的使用。
nuget 地址:https://www.nuget.org/packages/Microsoft.Azure.KeyVault/3.0.5
文章图片
-------------------- 我是分割线 --------------------
1,Azure Kay Vault(一).NET Core Console App 获取密钥保管库中的机密信息
2,Azure Key Vault(二)- 入门简介
3,Azure KeyVault(三)通过 Microsoft.Azure.KeyVault 类库在 .NET Core 上获取 Secrets
二,正文
1,准备 Azure Key Vault ----- Secrets
登录Azure Portal,在创建好的 Azure Key Vault 创建 Secret
cnbate-name:“Blog”
cnbate-num:"10"
cnbate-time:"2022-02-19 23:17"
文章图片
2,配置项目运行的环境变量和访问权限
接下来,需要将之前在Azure上注册的服务主体的 AZURE_CLIENT_ID(应用程序ID),AZURE_CLIENT_SECRET(客户端密码),AZURE_TENANT_ID(租户ID)配置到系统的环境变量中去,或者是VS运行环境中,大家可以自行进行选择,我这里是直接配置在系统的环境变量中。
大家可以参考: Azure Kay Vault(一).NET Core Console App 获取密钥保管库中的机密信息
文章图片
3,引入项目依赖包 ----- “Microsoft.Azure.KeyVault”
要使用 Azure Key Vault,我们就需要安装一下软件包
创建新的 .NET Core Web 项目,引入 “Microsoft.Azure.KeyVault”,以及其他三个辅助类库 “Azure.Extensions.AspNetCore.Configuration.Secrets”,"Azure.Identity",“Microsoft.Extensions.Configuration.AzureKeyVault”
文章图片
使用程序包管理器控制台进行安装
Microsoft.Azure.KeyVault
Install-Package Microsoft.Azure.KeyVault -Version 3.0.5
Microsoft.Extensions.Configuration.AzureKeyVault
Install-Package Microsoft.Extensions.Configuration.AzureKeyVault -Version 3.1.22
Azure.Extensions.AspNetCore.Configuration.Secrets
Install-Package Azure.Extensions.AspNetCore.Configuration.Secrets -Version 1.2.1
Azure.Identity
Install-Package Azure.Identity -Version 1.5.0
3,配置 .NET Core 应用程序能够访问 Azure Key Vault
应用程序配置连接到 Azure Key Vault 时,它会被添加为单独的配置源。我们可以像读取任何其他配置数据一样读取值。
KeyVaultService.cs
public class KeyVaultService: IKeyVaultService { private readonly IConfiguration _configuration; public KeyVaultService(IConfiguration configuration) { this._configuration = configuration; }public TaskGetSecretByKeyAsync(string keyName) { return Task.FromResult(_configuration[keyName]); } }
IKeyVaultService.cs
public interface IKeyVaultService { TaskGetSecretByKeyAsync(string keyName); }
修改 HostBuilder 的逻辑添加将 Azure Key Vault 代码添加到应用程序配置的 ConfigureAppConfiguration() 方法
Proram.cs 启动程序中配置扩展方法
public static IHostBuilder CreateHostBuilder(string[] args) => Host.CreateDefaultBuilder(args) .AddConfigureSetup() .ConfigureWebHostDefaults(webBuilder => { webBuilder .UseUrls("http://*:9004") .UseStartup(); });
ConfigureSetup.cs
public static IHostBuilder AddConfigureSetup(this IHostBuilder host) { if (host == null) throw new ArgumentNullException(nameof(host)); return host.ConfigureAppConfiguration((context, config) => { string Path = $"appsettings.{Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT")}.json"; //这样的话,可以直接读目录里的json文件,而不是 bin 文件夹下的,所以不用修改复制属性 var settings =config.SetBasePath(context.HostingEnvironment.ContentRootPath) .Add(new JsonConfigurationSource { Path = Path, Optional = false, ReloadOnChange = true }).Build(); /* * Method one configuration["StorageConnectionString"] * */ var credential = new DefaultAzureCredential(); config.AddAzureKeyVault(new Uri(settings["AzureKeyVault:Endpoint"]), credential); }); }
将 Azure Key Vault 的链接配置 URL 保存在appsettings.json 中
{ "Logging": { "LogLevel": { "Default": "Information", "Microsoft": "Warning", "Microsoft.Hosting.Lifetime": "Information" } }, "AzureKeyVault": { "Endpoint": "https://cnbateblogweb-kv.vault.azure.net/" } }
Startup.cs ----- 依赖注入中添加 KeyVaultService 服务
public void ConfigureServices(IServiceCollection services) {services.AddScoped(); services.AddControllersWithViews(); }
4,.NET Core 控制器和视图获取&展示机密信息
HomeController.cs
public class HomeController : Controller { private readonly ILogger _logger; private readonly IKeyVaultService _keyVaultService; public HomeController(ILogger logger, IKeyVaultService keyVaultService) { _logger = logger; _keyVaultService = keyVaultService; }public async TaskIndex() { var list = new List (); list.Add(new KeyValueViewModel() { Key ="cnbate-name", Value = https://www.it610.com/article/await _keyVaultService.GetSecretByKeyAsync("cnbate-name") }); list.Add(new KeyValueViewModel() { Key = "cnbate-num", Value = https://www.it610.com/article/await _keyVaultService.GetSecretByKeyAsync("cnbate-num") }); list.Add(new KeyValueViewModel() { Key = "cnbate-time", Value = https://www.it610.com/article/await _keyVaultService.GetSecretByKeyAsync("cnbate-time") }); return View(list); }public IActionResult Privacy() { return View(); }[ResponseCache(Duration = 0, Location = ResponseCacheLocation.None, NoStore = true)] public IActionResult Error() { return View(new ErrorViewModel { RequestId = Activity.Current?.Id ?? HttpContext.TraceIdentifier }); } }
Index.cshtml
@{ ViewData["Title"] = "Home Page"; } @model List; class="text-center"> WelcomeLearn about "https://docs.microsoft.com/aspnet/core">building Web apps with ASP.NET Core.
--------------------- This is line-------------------------This is a Azure KeyVault Secret value is:@foreach(var item in Model) {Key:@item.Key; Value:@item.Value
}
运行项目,查看 Azure Key Vault 的 Secrets
文章图片
OK!! 成功。??????
三,结尾 今天主要创建.NET Core Web 应用程序并且引用 ”Microsoft.Azure.KeyVault“,我们将使用 Azure Key Vault 集中存储和管理 .NET Core Web 应用程序的机密信息。它允许我们在多个应用程序之间共享的设置,包括在应用程序服务中使用。当您将应用程序配置为连接到 Key Vault 时,它会被添加为单独的配置源。然后,我们可以像读取任何其他配置数据一样读取 Azure Key Vault 的值。本文所分享的内容也存在着很多我自己的一些理解,有理解不到位的,还希望多多包涵,并且指出不足之处。
参考资料:关于 Azure Key Vault
github:https://github.com/yunqian44/Azure.KeyVault
【Azure|Azure KeyVault(三)通过 Microsoft.Azure.KeyVault 类库在 .NET Core 上获取 Secrets】作者:Allen
版权:转载请在文章明显位置注明作者及出处。如发现错误,欢迎批评指正。
推荐阅读
- 2022年【米哈游】 金三银四 三月内推开始啦!不加班福利好,200+个岗位任你挑选,赶快来看吧!
- Java不借助第三变量实现两数交换的示例
- linux访问权限有三种,Linux访问权限控制基本原理
- 初识Java——课堂笔记
- 工业通讯|工业通讯 | CAN基础内容详解(三)
- 春招|【Android春招每日一练】(三十二) LeetCode Hot 10题
- 春招|【Android春招每日一练】(三十四) LeetCode Hot 5题+总结(完)
- 2018.9.19学习致良知第三十六课(开阔感、崇高感、负重感)
- 上火(失眠?热伤风?无病三分虚,暑热当头这些方面要注意了!)
- 【钢笔字】初学钢笔字应注意什么