博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Asp.net core 学习笔记 ( Data protection )
阅读量:6358 次
发布时间:2019-06-23

本文共 2825 字,大约阅读时间需要 9 分钟。

参考 : 

http://www.cnblogs.com/xishuai/p/aspnet-5-identity-part-one.html

http://cnblogs.com/xishuai/p/aspnet-5-or-core1--identity-part-two.html

https://cnblogs.com/savorboard/p/dotnetcore-data-protection.html

http://cnblogs.com/savorboard/p/dotnet-core-data-protection.html

https://cnblogs.com/savorboard/p/dotnetcore-data-protected-farm.html

https://docs.microsoft.com/en-us/aspnet/core/security/data-protection/implementation/key-storage-providers?view=aspnetcore-2.1

https://docs.microsoft.com/en-us/aspnet/core/security/data-protection/?view=aspnetcore-2.1

 

Data protection 主要用于 asp.net core 加密, 解密, 哈希.

先说说哈希, 通常用于做用户密码散列 (会有随机盐), 都封装好了,很方便. 

加密,解密主要是用于对称加密. 比如用户登入后的 cookies 等.

加密,解密会依赖 key, 在 .net 4.x 我们使用 web.config machine key 来做. 

做法简单,如果多架机器,只要 machine key 一样那么大家都能通用加密解密. 

asp.net core 把 machine key 拿掉了. 

现在比较麻烦. data protection 会生产一个 key...xml 的文档 

里面会有动态制作的 machine key, 还会有 expiry date ( 默认 90天 ).

当要加密信息时, data protection.protect('message'); 它会用最新的 machine key. 

所以我们最后会有好多的 machine key, 当解密的时候, 它会尝试用所有的 machine key 去解密, 如果解密成功, 还可以顺便用新的 machine key 加密哦. 

此外, machine key 还可以被加密. 比如使用 windows.DPAPI 或则 azure key-vault 的 key.

这样 key..xml 里就看不出 machine key 了. 

那要怎样实现多 machine 呢 ? copy paste key..xml 去每架机器吗 ?

当然不要, 最好是使用一个 share folder, 每架机器都可以访问的到, 例如放在云里面 Azure blob storage.

配置 : 

services.AddDataProtection()    .SetApplicationName("test-data-protection") // 因为是多架机器,所以必须表明 App name 不然就识别不出来了丫    .PersistKeysToFileSystem(new System.IO.DirectoryInfo("C:\\data-protections-keys\\test-data-protection")) //放入共享文件夹     .ProtectKeysWithDpapi(protectToLocalMachine: true); // 加密 machine key (protectToLocalMachine 是说所有 window user 都可以执行, 不加的话只有 owner 可以执行)

用 Azure 

services.AddDataProtection()    .SetApplicationName("test-data-protection") // 因为是多架机器,所以必须表明 App name 不然就识别不出来了丫    .PersistKeysToAzureBlobStorage(new Uri("https://blobaccount.blob.core.windows.net/blobcontainer/blobfolder/key.xml?SAStoken")) // 在 azure portal blob->container->folder->file generate SAS token/url, copy 过来就可以了    .ProtectKeysWithAzureKeyVault("https://key-vault-name.vault.azure.net/keys/test-data-protection/dwdsawdsfasf", "clientId", "client secret"); // 做一个 key-vault 的key -> allow permission wrap key 等等, 做一个 App -> allow 使用 key-vault

如果使用文件夹, 每一次 key expiry 后会创建一个新的 key..xml 文件, 如果使用 Azure, 它会在原本的 key..xml 里继续添加新的 key 而不是创建一个新的文件. 

特别说多一下 Azure 

首先是需要一个 key, 上一篇的 Azure key-vault,  做一个 appclient appsecret 然后 create key set permission (access policy 添加 application 进来, 还有 set allow warkey 等等)  最后有了 url + clientid + client secret 就行了, 

然后还需要一个 storage 放 xml, 开一个 blob 然后去弄 SAS token 就可以了. 也是记得 set permission read write edit, for 第一次的 xml 用 local 的方法 generate sql 先, 然后 upload to blob 在换去 store to azure 就可以了.

sas

注意这个签名的 key 哦

在 access key 里面可以换掉它的, refresh 之后, 依赖它的 sas 就不可以用了哦。小心哦.

 

转载于:https://www.cnblogs.com/keatkeat/p/9316389.html

你可能感兴趣的文章
swagger系列一:laravel中部署swagger ui
查看>>
javascript系列之this总结
查看>>
[翻译]react-vis:一个数据可视化库
查看>>
前端每周清单第 48 期:Slack Webpack 构建优化,CSS 命名规范与用户追踪,Vue.js 单元测试...
查看>>
HTML5和CSS3系列(三):变化元素、新增标签、多媒体、新增表单、全局属性
查看>>
Angular练习之animations动画三
查看>>
简单而完整地体验一遍sentry的sourcemap服务
查看>>
扒取网页的mp3资源
查看>>
Git分支管理
查看>>
生孩子的问题
查看>>
一个链接能打开win10设置界面
查看>>
SpringCloud(第 019 篇)Zuul 网关微服务的一些属性应用测试
查看>>
ES6之Object.assign()详解
查看>>
谈一谈移动端1px的问题
查看>>
Redis开机启动配置
查看>>
restTemplate访问https
查看>>
How to migrate svn to gitlab with full history logs
查看>>
在 Chrome 中 JavaScript 数组到底占用了多少内存?
查看>>
GraphQL 进阶: 使用RabbitMQ作为PubSub后端实现GraphQL订阅
查看>>
python协程3:用仿真实验学习协程
查看>>