一,引言

  上一篇文章我们在 .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. Flink源码学习笔记(2) 基于Yarn的自动伸缩容实现

    1.背景介绍 随着实时计算技术在之家内部的逐步推广,Flink 任务数及计算量都在持续增长,集群规模的也在逐步增大,本着降本提效的理念,我们研发了 Flink 任务伸缩容功能: 提供自动伸缩容功能,可 ...

  2. ApacheCN 数据科学译文集 2020.8

    协议:CC BY-NC-SA 4.0 不要担心自己的形象,只关心如何实现目标.--<原则>,生活原则 2.3.c 在线阅读 ApacheCN 面试求职交流群 724187166 Apach ...

  3. VUE3 之 作用域插槽 - 这个系列的教程通俗易懂,适合新手

    1. 概述 破窗效应告诉我们: 当一个建筑物窗户的玻璃完好无损时,很少有人想去破坏它,当有一个人破坏了一块窗户的玻璃,其他窗户的玻璃也很快会被人破坏. 同理,一个很干净的地方,人们不好意思去丢垃圾,但 ...

  4. ABC220H - Security Camera

    考虑折半,将点按照标号是否 \(\le \frac{n}{2}\) 分成两个集合 \(S_1, S_2\). 首先原问题的形式有点奇怪,我们不妨统计没有被覆盖覆盖的边为偶数条的情况. 这样一来问题转化 ...

  5. Android状态栏微技巧,带你真正理解沉浸式模式【转】

    感谢! 本文转自大佬郭霖:http://blog.csdn.net/guolin_blog/article/details/51763825 转载请注明出处:http://blog.csdn.net/ ...

  6. Java和Js编码(encodeUrl)解码(decodeUrl)对空格的差异问题

    今天解决一个问题的时候遇到了一个编码解码问题,记录一下. 1. Js用的是encodeURIComponent()方法编码,后面的都以该编码方式处理出来的数据为准. 2. Java用的是URLDeco ...

  7. python 使用pip安装包的总结

    multiprocessing.logging模块安装 如果使用在cmd中使用 pip install multiprocessing 会报错, 将命令改为 pip3 install multipro ...

  8. Pandas之groupby分组

    释义 groupby用来分组,调用groupby 之后返回pandas.core.groupby.generic.DataFrameGroupBy,其实就是由一个个格式为(key, 分组后的dataf ...

  9. Oracle 撤回已经提交的事务

    在PL/SQL操作了一条delete语句习惯性的commit 了,因少加了where条件 导致多删了数据 1.查询视图v$sqlarea,找到操作那条SQL的时间(FIRST_LOAD_TIME) s ...

  10. 我们一起来学Shell - shell的函数

    文章目录 定义函数 执行不带参数的函数 执行带参数的函数 函数的执行总结 我们一起来学Shell - 初识shell 我们一起来学Shell - shell的变量 我们一起来学Shell - shel ...