一,引言

  上一篇文章我们在 .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

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

Azure KeyVault(四)另类在 .NET Core 上操作 Secrets 的类库方法-----Azure.Security.KeyVault.Secrets的更多相关文章

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

    一,引言 上一篇文章,我们介绍了 Azure Key Vault 在实际项目中的用途,Azure Key Vault 作为密钥管理的服务,我们可以很轻松的利用它创建和控制用于加密的密钥,和管理证书和机 ...

  2. 在ASP.NET Core上实施每个租户策略的数据库

    在ASP.NET Core上实施每个租户策略的数据库 不定时更新翻译系列,此系列更新毫无时间规律,文笔菜翻译菜求各位看官老爷们轻喷,如觉得我翻译有问题请挪步原博客地址 本博文翻译自: http://g ...

  3. .net Core 上传文件详解

    .net core 和.net framework上传文件有很多需要注意的地方 .net framework 上传文件用httppostedfilebase .net core 上传文件用 IForm ...

  4. .Net Core上用于代替System.Drawing的类库

    目前.Net Core上没有System.Drawing这个类库,想要在.Net Core上处理图片得另辟蹊径. 微软给出了将来取代System.Drawing的方案,偏向于使用一个单独的服务端进行各 ...

  5. 在.NET Core 上运行的 WordPress

    在.NET Core 上运行的 WordPress,无需安装PHP既可跨平台运行WordPress. 在Peachpie中实现PHP所需的功能数月后,现在终于可以运行一个真实的应用程序:WordPre ...

  6. asp.net core上使用Redis探索(2)

    在<<asp.net core上使用Redis探索(1)>>中,我介绍了一个微软官方实现Microsoft.Extensions.Caching.Redis的类库,这次,我们使 ...

  7. leaflet入门(四)API翻译(上)

    L.Map L.Marker L.Popup L.Map API各种类中的核心部分,用来在页面中创建地图并操纵地图. Constructor(构造器) 通过div元素和带有地图选项的描述的文字对象来实 ...

  8. 在家赚钱,威客网站的使用方法 CSDN项目频道、SXSOFT、任务中国、猪八戒四个网站的线上交易 三种交易模式(1)悬赏模式(2)招标模式(3)直接交易模式

    在家赚钱,威客网站的使用方法 很显然,<让猪八戒飞一会儿>作者对威客这一行业不熟悉,<让猪八戒飞一会儿>文章中错误有一些,不一一指出.我在CSDN项目频道.SXSOFT.任务中 ...

  9. asp.net core上使用Redis demo

    整体思路:(1.面向接口编程 2.Redis可视化操作IDE 3.Redis服务) [无私分享:ASP.NET CORE 项目实战(第十一章)]Asp.net Core 缓存 MemoryCache ...

随机推荐

  1. 添加项目文件时候不要把引用文件直接放到bin-debug里

    如果时anycpu没问题,但是新建其他平台时,会重新生成失败,原因时无法找到dll,现象为x64目录下的debug文件夹为空

  2. react 配置使用less后缀文件

    //安装less less less-loader npm install less less-loader --save-dev 安装完成后,在项目中的config目录下找到webpack.conf ...

  3. 10分钟了解代码命名规范(Java、Python)

    前言 关于代码命名,我相信是经常困扰很多小伙伴的一个问题,尤其是对于强迫症晚期患者.怎么说呢,每次小编在写代码之前,总会在想啊想啊,用什么命名法好呢?对于经常在C++.Java.Python等主流语言 ...

  4. maven的三种项目打包方式----jar,war,pom

    1.pom工程:**用在父级工程或聚合工程中.用来做jar包的版本控制.必须指明这个聚合工程的打包方式为pom 2.war工程:将会打包成war,发布在服务器上的工程.如网站或服务.在SpringBo ...

  5. 通过导入Jar包的方式使用JSONObject

    如果想要在Java中使用JSONObject,而且只想通过导入jar包的方式下,那么仅仅导入Json的jar包还是不够的. 不然会报:java.lang.ClassNotFoundException: ...

  6. rsync 远程同步部署——上下行同步

    rsync 远程同步部署--上下行同步 1.rsync (Remote Sync,远程同步) : 是一个开源的快速备份工具,可以在不同主机之间镜像同步整个目录树,支持增量备份,并保持链接和权限,且采用 ...

  7. 一站式超全JavaScript数组方法大全

    一站式JavaScript数组方法大全(建议收藏) 方法一览表 详细操作 本人总结了JavaScript中有关数组的几乎所有方法(包含ES6之后新增的),并逐一用代码进行演示使用,希望可以帮助大家! ...

  8. 关于Synchronized你了解多少?

    1.说一说自己对于 synchronized 关键字的了解 synchronized是解决多线程之间访问资源的同步性,synchronized关键字可以保证被他修饰的资源在任何时刻只有一个线程访问. ...

  9. centos安装MySQL问题

    使用sudo yum install mysql-server出现没有可用软件包 mysql-server. 先 执行 wget http://repo.mysql.com/mysql-communi ...

  10. Vue中组件通信的几种方法(Vue3的7种和Vue2的12种组件通信)

    Vue3组件通信方式: props $emit expose / ref $attrs v-model provide / inject Vuex 使用方法: props 用 props 传数据给子组 ...