• Azure KeyVault(四)另类在 .NET Core 上操作 Secrets 的类库方法Azure.Security.KeyVault.Secrets


    一,引言

      上一篇文章我们在 .Net Core Web 项目中添加了 “Microsoft.Azure.KeyVault” 的 Nuget 包操作 Azure KeyVault 的 Secrets 数据。微软已经将 “Microsoft.Azure.KeyVault” Nuget 遗弃了,推荐大家使用 “Azure.Security.KeyVault.Secrets”。

      1)Azure Key Vault 机密客户端库允许我们安全地存储和控制对令牌、密码、API 密钥和其他机密的访问。该库提供创建、检索、更新、删除、清除、备份、恢复和列出机密及其版本的操作。

      2)SecretClient 在 SDK 中提供同步和异步操作,允许根据应用程序的用例选择客户端。初始化 SecretClient 后,就可以与 Azure Key Vault 中的机密进行交互。

    基于以上两点,今天继续分享 Azure Key Vault 的相关知识,使用新的 "Azure.Security.KeyVault.Secrets" 操作 Azure Key Vault 的 Secrets。

    -------------------- 我是分割线 --------------------

    1,Azure Kay Vault(一).NET Core Console App 获取密钥保管库中的机密信息

    2,Azure Key Vault(二)- 入门简介

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

    4,Azure KeyVault(四)另类在 .NET Core 上操作 Secrets 的 类库方法-----Azure.Security.KeyVault.Secrets

    二,正文

    1,添加 “Azure.Security.KeyVault.Secrets” 的 Nuget 程序包

    使用程序包管理控制台进行安装

    Install-Package Azure.Security.KeyVault.Secrets -Version 4.2.0
    

    2,创建 ISecretsService 接口和 SecretsService 实现类,以及控制器方法

    ISecretsService.cs

    public interface ISecretsService
        {
            Task<string> GetSecretsAsync(string key);
    
            Task<string> SetSecretAsync(string key,string value);
    
            Task<string> DeleteSecretAsync(string key);
        }

    SecrectsService.cs

        public class SecretsService : ISecretsService
        {
            private readonly SecretClient _secretClient;
    
            public SecretsService(SecretClient secretClient)
            {
                this._secretClient = secretClient;
            }
    
            public async Task<string> GetSecretsAsync(string key)
            {
                var secret= await _secretClient.GetSecretAsync(key);
                return secret.Value.Value;
            }
    
            public async Task<string> SetSecretAsync(string key, string value)
            {
                var setSecret= await _secretClient.SetSecretAsync(key, value);
                return setSecret.Value.Value;
            }
    
    
            public async Task<string> DeleteSecretAsync(string key)
            {
                var operation= await _secretClient.StartDeleteSecretAsync(key);
                var deleteSecret= await operation.WaitForCompletionAsync();
                await _secretClient.PurgeDeletedSecretAsync(operation.Value.Name);
    
                return deleteSecret.Value.Value;
            }
        }

    HomeController.cs

    public class HomeController : Controller
        {
            private readonly ILogger<HomeController> _logger;
    
            private readonly IKeyVaultService _keyVaultService;
    
            private readonly ISecretsService _secretsService;
    
            public HomeController(ILogger<HomeController> logger,
                IKeyVaultService keyVaultService,
                ISecretsService secretsService)
            {
                _logger = logger;
                _keyVaultService = keyVaultService;
                _secretsService = secretsService;
            }
    
            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();
            }
    
    
            public async Task<IActionResult> Secrets()
            {
                var list = new List<KeyValueViewModel>();
                list.Add(new KeyValueViewModel() { Key = "cnbate-name", Value = await _secretsService.GetSecretsAsync("cnbate-name") });
                list.Add(new KeyValueViewModel() { Key = "cnbate-num", Value = await _secretsService.GetSecretsAsync("cnbate-num") });
                list.Add(new KeyValueViewModel() { Key = "cnbate-time", Value = await _secretsService.GetSecretsAsync("cnbate-time") });
    
                return View(list);
            }
    
            [ResponseCache(Duration = 0, Location = ResponseCacheLocation.None, NoStore = true)]
            public IActionResult Error()
            {
                return View(new ErrorViewModel { RequestId = Activity.Current?.Id ?? HttpContext.TraceIdentifier });
            }
        }

    3,添加对 SecretsService 和 SecretClient 的注入

    services.AddSingleton(new Appsettings(Env.ContentRootPath));
    services.AddSingleton(x => new SecretClient(vaultUri: new Uri(Appsettings.app("AzureKeyVault", "Endpoint")), credential: new DefaultAzureCredential()));
    services.AddScoped<ISecretsService, SecretsService>();

    4,测试使用新的获取 Secrets 的 Nuget 包中的方法是否能正常操作 Azure KeyVault 的 Secrets 数据

    F5 运行项目,获取保存的所有的 Secrets 数据

    Bingo !!!! 成功。添加,删除 Secrets 的操作,我就不再演示了,大家可以自行下载代码进行操作。

    三,结尾

    本文所分享的内容也存在着很多我自己的一些理解,有理解不到位的,还希望多多包涵,并且指出不足之处。

    参考资料:关于 Azure Key Vault

    github:https://github.com/yunqian44/Azure.KeyVault

    作者:Allen 

    版权:转载请在文章明显位置注明作者及出处。如发现错误,欢迎批评指正。

  • 相关阅读:
    【HTTP】长连接和短连接
    HTTP/1.1 持久连接 persistent connection
    浅谈Websocket、Ajax轮询和长轮询(long polling)
    web通信之跨文档通信 postMessage
    HTML5 postMessage 和 localStorage 实现窗口间通信
    CORS 和 JSONP
    【转】js中几种实用的跨域方法原理详解
    [跨域]前端解决跨域问题
    RFC1867 HTTP file upload
    Multipart/form-data POST文件上传
  • 原文地址:https://www.cnblogs.com/AllenMaster/p/15980042.html
Copyright © 2020-2023  润新知