Asp.net core 学习笔记 Secret 和 Data Protect Azure key-vault & Storage Account 第 2 篇
更新 30-04-2023
最新版本请看这 2 篇
ASP.NET Core – User Secret & Azure Key Vault
之前有写过 2 篇关于 key-vault 和 data protect 的, 但是最近发现之前的 dll 已经废弃了, 而且 Azure 有一点点更新了. 所以这些写多一篇
https://www.cnblogs.com/keatkeat/p/9313468.html (Azure key-vault 第一篇)
https://www.cnblogs.com/keatkeat/p/9316389.html (Data protect 第一篇)
参考:
https://docs.microsoft.com/en-us/aspnet/core/security/app-secrets?view=aspnetcore-5.0&tabs=windows
https://docs.microsoft.com/en-us/aspnet/core/security/key-vault-configuration?view=aspnetcore-5.0
https://docs.microsoft.com/en-us/azure/key-vault/secrets/quick-create-cli
https://docs.microsoft.com/en-us/azure/active-directory/managed-identities-azure-resources/overview
https://docs.microsoft.com/en-us/aspnet/core/security/data-protection/configuration/overview?view=aspnetcore-5.0
https://docs.microsoft.com/en-us/azure/active-directory/managed-identities-azure-resources/tutorial-windows-vm-access-nonaad
https://docs.microsoft.com/en-us/azure/key-vault/general/tutorial-net-virtual-machine#:~:text=Azure%20Key%20Vault%20helps%20you,%2C%20services%2C%20and%20IT%20resources.&text=Create%20an%20Azure%20virtual%20machine,permissions%20to%20the%20VM%20identity.
先讲个 overview
key vault 一样是去 azure 做就可以了, 只是现在比较流行用 azure cli 来做, 比较方便啦.
从前 website 要访问 key vault 需要弄一个 app id 和 app secret
现在改成 2 种方式,
第一 AD Directory Id + AD Application Id + AD Cert Thumbprint 才可以访问 AD 就是 Azure Active Directory
cert 需要自己做, 然后 upload 到 AD 去. 然后 web server 也要 install. 由于 IIS 要访问 cert store 会遇到许多 permission 的限制, 所以如果你的网站是 host 在 azure 的话就选方案 2 吧.
第二 就简单多了, 不需要任何 APP, 但是需要 host in Azure. VM or App service 都可以.
data protect 方面几乎没有什么改动, 一样做 storage account, 一样做 key 在 key-vault.
唯一的区别是获取 key-vault 的 key 的时候也是用到了上面的第一或二方式.
好现在 step by step 讲
https://docs.microsoft.com/en-us/azure/key-vault/secrets/quick-create-cli
install > login
az group create --name "klc-resource-group" --location "SoutheastAsia"
az keyvault create --name "klc-test-key-vault" --resource-group "klc-resource-group" --location "Southeast Asia"
az keyvault secret set --vault-name "klc-test-key-vault" --name "Password" --value "123456"
这样就把 secret 做好了
然后方案 1 的话就是要去弄 AD Application 等了
https://docs.microsoft.com/en-us/aspnet/core/security/key-vault-configuration?view=aspnetcore-5.0#use-application-id-and-x509-certificate-for-non-azure-hosted-apps
follow 这个 step

cert 的做法可以参考我这篇
https://www.cnblogs.com/keatkeat/p/13412953.html
https://www.cnblogs.com/keatkeat/p/9326389.html
然后去 azure search Azure Active Directory > App registration > create app > 进入 app > Certificates & secrets > upload cert
然后把资料写入 appsetting https://github.com/dotnet/AspNetCore.Docs/blob/master/aspnetcore/security/key-vault-configuration/samples/3.x/SampleApp/appsettings.json
其余的 code 就招 sample 做就可以了.
有了 app 就去 key-vault 里面 > Access policies > Add Access Policy > Configure from template (optional) 选 key, secret, cert > Select principal 选刚才做好的 app 就可以了.
ok 这个是第一种方案.
第二种就更简单了.
去 vm > Identity > System assigned enable 打勾 > 去 key-vault > Access policies >
Azure Virtual Machines for deplyment 打勾, 然后 Add Access Policy > Configure from template (optional) 选 key, secret, cert > Select principal 选刚才的 vm 就可以了
Permission key 里面 Unwrap Key 和 Wrap Key 都要勾, 做 data protect 的时候会用到.
接下来讲一下 storage account
和之前是一样的, 只是我自己的改成了不需要 app id
services.AddDataProtection()
.SetApplicationName(configuration["DataProtection:ApplicationName"])
.PersistKeysToAzureBlobStorage(new Uri(configuration["DataProtection:CloudStorageUrl"]))
//.PersistKeysToFileSystem(new System.IO.DirectoryInfo($@"{hostingEnvironment.ContentRootPath}\DataProtectXml")) // for 第一次 generate 然后 upload to Azure Blob
.ProtectKeysWithAzureKeyVault(
new Uri(configuration["DataProtection:CloudKeyUrl"]),
new DefaultAzureCredential()
);
for 第一次比较麻烦, 因为它需要你先做一个 xml 在 azure blob 才可以. 官网是有给出方案的. 但是需要比较多的权限, 不仅仅是 sas, 而是需要 storage account 的 connect string.

具体做法就是把 sas 换成 connection string, container name, blob name
blob name 就是 file name 比如 data-protection-key.xml 这样.
有一点要注意的是, 它只会帮你做 blob, 而不是 container. 所以 container 得要先做好哦.
Asp.net core 学习笔记 Secret 和 Data Protect Azure key-vault & Storage Account 第 2 篇的更多相关文章
- Asp.Net Core学习笔记:入门篇
Asp.Net Core 学习 基于.Net Core 2.2版本的学习笔记. 常识 像Django那样自动检查代码更新,自动重载服务器(太方便了) dotnet watch run 托管设置 设置项 ...
- ASP.NET Core 学习笔记 第四篇 ASP.NET Core 中的配置
前言 说道配置文件,基本大多数软件为了扩展性.灵活性都会涉及到配置文件,比如之前常见的app.config和web.config.然后再说.NET Core,很多都发生了变化.总体的来说技术在进步,新 ...
- Asp.net core 学习笔记 ( Data protection )
参考 : http://www.cnblogs.com/xishuai/p/aspnet-5-identity-part-one.html http://cnblogs.com/xishuai/p/a ...
- Asp.net Core学习笔记
之前记在github上的,现在搬运过来 变化还是很大的,感觉和Nodejs有点类似,比如中间件的使用 ,努力学习ing... 优点 不依赖IIS 开源和跨平台 中间件支持 性能优化 无所不在的依赖注入 ...
- ASP.NET Core 学习笔记 第一篇 ASP.NET Core初探
前言 因为工作原因博客断断续续更新,其实在很早以前就有想法做一套关于ASP.NET CORE整体学习度路线,整体来说国内的环境的.NET生态环境还是相对比较严峻的,但是干一行爱一行,还是希望更多人加入 ...
- Asp.net core 学习笔记 ( identity server 4 JWT Part )
更新 : id4 使用这个 DbContext 哦 dotnet ef migrations add identity-server-init --context PersistedGrantDbCo ...
- Asp.net core 学习笔记 ( Azure key-vault )
参考 : https://docs.microsoft.com/en-us/aspnet/core/security/key-vault-configuration?view=aspnetcore-2 ...
- Asp.net core 学习笔记 QR code and Barcode
QR code 和 Barcode 经常会使用到. Java 阵营有著名的 zxing https://github.com/zxing/zxing .Net 有对接它的 port https://g ...
- ASP.NET Core 学习笔记 第三篇 依赖注入框架的使用
前言 首先感谢小可爱门的支持,写了这个系列的第二篇后,得到了好多人的鼓励,也更加坚定我把这个系列写完的决心,也能更好的督促自己的学习,分享自己的学习成果.还记得上篇文章中最后提及到,假如服务越来越多怎 ...
- ASP.NET Core 学习笔记 第五篇 ASP.NET Core 中的选项
前言 还记得上一篇文章中所说的配置吗?本篇文章算是上一篇的延续吧.在 .NET Core 中读取配置文件大多数会为配置选项绑定一个POCO(Plain Old CLR Object)对象,并通过依赖注 ...
随机推荐
- Javascript克隆数据
JS 复制数据 1 浅复制 具体方法 // 数组 Array.prototype.slice // 普通对象 Object.assign 思考 2 深复制 1) function deepClone( ...
- CSP2023
坐标HA 背景 NOIP都打完了,CSP-S都没写游记,所以来补一篇(逃-- 正文 Day 7*-1 考前一周停课集训,被whk老师怒斥不务正业,悲QWQ. Day 0 周五得到年级第一zyx的鼓励, ...
- Day 1 - 二分
整数二分 我们可以做到每次排除一半的答案,时间复杂度 \(O(\log n)\). long long l = L, r = R; while(l <= r) { long long mid = ...
- Linux安装 JDK (CentOS 7)
Linux安装 JDK 一.Linux安装软件的方式 第一种:二进制发布包安装: 软件已经针对具体平台编译打包发布,只要解压,修改配置即可 第二种: rpm安装 : 软件已经按照redhat的包管理规 ...
- SQL Server 新增函数大全(各版本)
SQL Server 2017 CONCAT_WS ( separator, argument1, argument2 [, argumentN]... ) --采用可变数量的字符串自变量,并将它们串 ...
- 单细胞测序最好的教程(十四)测序原始数据公开至NCBI数据库
作者按 国内对于单细胞测序相关的中文教程确实不够全面,当然NCBI官网给的上传教程也比较详细了,所以变成了会者不难.本教程你现在可能用不上,但是你如果做单细胞测序,那么未来你一定会用上,建议收藏. 在 ...
- PHP进阶
只是简要说明起原理和用法,具体可以百度 abstract 抽象类 抽象类是指在 class 前加了 abstract 关键字且存在抽象方法,不带{},如public function test() i ...
- 七天.NET 8操作SQLite入门到实战 - (3)第七天Blazor学生管理页面编写和接口对接
前言 本章节的主要内容是完善Blazor学生管理页面的编写和接口对接. 七天.NET 8 操作 SQLite 入门到实战详细教程 第一天 SQLite 简介 第二天 在 Windows 上配置 SQL ...
- WorPress基础之谷歌GSC与GA统计代码安装
本篇文章讲介绍什么是GSC和GA以及如何安装. 什么是GSC GSC,全称为Google Search Console,由谷歌官方提供的网站管理工具,可帮助监控和维护网站在Google 搜索结果中的展 ...
- vue 路由缓存 keep-alive include和exclude无效
<keep-alive :include="keepAliveData"> <router-view v-if="isShowRouter" ...