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)对象,并通过依赖注 ...
随机推荐
- API网关实践-网易云轻舟微服务
微服务最佳实践中,我们需要通过统一的 API 网关进行服务能力的共享,API 网关为用户提供发布.管理.保护和监控 API的能力,帮助用户在自己的多个系统之间,或者内部系统与合作伙伴以及第三方的系统之 ...
- PN转Modbus RTU模块连接ACS4QQ变频器通信
一台完整的机器在出厂前由许多部件组成.但是,由于各种原因,这些组件来自不同的制造商,导致设备之间的通信协议存在差异.Modbus和Profinet代表两种不同的通信协议,Profinet通常用于较新的 ...
- 题解:P10417 [蓝桥杯 2023 国 A] 第 K 小的和
分析 这道题不是板子么. 先对序列排序,然后二分答案,设当前答案为 \(x\),枚举 \(a\) 中的数,然后二分查找 \(b\) 中不大于 \(x-a\) 的元素个数,累加判断是否不大于 \(k\) ...
- 使用 useLazyFetch 进行异步数据获取
title: 使用 useLazyFetch 进行异步数据获取 date: 2024/7/20 updated: 2024/7/20 author: cmdragon excerpt: 摘要:&quo ...
- 学习笔记--Java构造方法
Java构造方法 关于构造方法 构造方法又被称作:构造函数/构造器/Constructor 语法结构: [修饰符列表] 构造方法名(形式参数列表){ 构造方法体; } 对比普通方法语法结构 [修饰符列 ...
- 记一次在openEuler系统下离线编译升级到openssh9.8p1
缘起 由于某个项目上甲方对服务器进行漏洞扫描,系统为:openEuler 22.03 (LTS-SP4).提示现有OpenSSH版本存在漏洞,需要升级到openssh-9.8p1的版本(目前最新),遂 ...
- vue 拖拉改变盒子高度(mousedown、mousemove、mouseup)流畅不卡顿
需求:上下两个盒子之间添加可拖拽按钮,实现高度变化 html: <textarea :id="'mycode'+(index*1+1)" :ref="'mycode ...
- python实例化对象过程
python实例化对象过程 Python中存在着一种静态的__new__()方法,通常在定义类时不会重写__new__()方法,于是Python在调用类时会自动寻找该类的继承对象(本例中为Object ...
- 树莓派3b+ 安装windows10 arm版本的方法及使用体验
首先,我再网上找到了一个很详细的为树莓派3b安装windows10 arm的教程,实际操作下来发现并不可行. 最后找到了可行的教程: 第3章 将Windows10镜像写入TF卡:https://zhu ...
- CPU端多进程/多线程调用CUDA是否可以加速???
相关: NVIDIA显卡cuda的多进程服务--MPS(Multi-Process Service) tensorflow1.x--如何在C++多线程中调用同一个session会话 tensorflo ...