ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Azure KeyVault(三)通过 Microsoft.Azure.KeyVault 类库在 .NET Core 上获取 Secrets

2022-02-22 22:00:31  阅读:256  来源: 互联网

标签:类库 KeyVault public Key Azure Vault Microsoft


一,引言

  上一篇文章,我们介绍了 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 Task<string> GetSecretByKeyAsync(string keyName)
        {
            return Task.FromResult(_configuration[keyName]);
        }
    }

IKeyVaultService.cs

public interface IKeyVaultService
    {
        Task<string> GetSecretByKeyAsync(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<Startup>();
                });

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<IKeyVaultService, KeyVaultService>();
            services.AddControllersWithViews();
        }

4,.NET Core 控制器和视图获取&展示机密信息

HomeController.cs

public class HomeController : Controller
    {
        private readonly ILogger<HomeController> _logger;

        private readonly IKeyVaultService _keyVaultService;

        public HomeController(ILogger<HomeController> logger,
            IKeyVaultService keyVaultService)
        {
            _logger = logger;
            _keyVaultService = keyVaultService;
        }

        public async Task<IActionResult> Index()
        {
            var list = new List<KeyValueViewModel>();
            list.Add(new KeyValueViewModel() { Key ="cnbate-name", Value = await _keyVaultService.GetSecretByKeyAsync("cnbate-name") });
            list.Add(new KeyValueViewModel() { Key = "cnbate-num", Value = await _keyVaultService.GetSecretByKeyAsync("cnbate-num") });
            list.Add(new KeyValueViewModel() { Key = "cnbate-time", Value = 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<KeyValueViewModel>;

<div class="text-center">
    <h1 class="display-4">Welcome</h1>
    <p>Learn about <a href="https://docs.microsoft.com/aspnet/core">building Web apps with ASP.NET Core</a>.</p>
    <h1>--------------------- This is line-------------------------</h1>
    <h2>
        This is a Azure KeyVault Secret value is:
    </h2>
    @foreach(var item in Model)
    {
        <p>Key:@item.Key;Value:@item.Value</p>

    }
</div>

运行项目,查看 Azure Key Vault 的 Secrets

OK!! 成功。

标签:类库,KeyVault,public,Key,Azure,Vault,Microsoft
来源: https://www.cnblogs.com/AllenMaster/p/15922491.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有