参考 :

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 就不可以用了哦。小心哦.

Asp.net core 学习笔记 ( Data protection )的更多相关文章

  1. Asp.Net Core学习笔记:入门篇

    Asp.Net Core 学习 基于.Net Core 2.2版本的学习笔记. 常识 像Django那样自动检查代码更新,自动重载服务器(太方便了) dotnet watch run 托管设置 设置项 ...

  2. ASP.NET Core 数据保护(Data Protection)【上】

    前言 上一篇博客记录了如何在 Kestrel 中使用 HTTPS(SSL), 也是我们目前项目中实际使用到的. 数据安全往往是开发人员很容易忽略的一个部分,包括我自己.近两年业内也出现了很多因为安全问 ...

  3. Asp.net Core学习笔记

    之前记在github上的,现在搬运过来 变化还是很大的,感觉和Nodejs有点类似,比如中间件的使用 ,努力学习ing... 优点 不依赖IIS 开源和跨平台 中间件支持 性能优化 无所不在的依赖注入 ...

  4. ASP.NET Core 数据保护(Data Protection 集群场景)【下】

    前言 接[中篇],在有一些场景下,我们需要对 ASP.NET Core 的加密方法进行扩展,来适应我们的需求,这个时候就需要使用到了一些 Core 提供的高级的功能. 本文还列举了在集群场景下,有时候 ...

  5. ASP.NET Core 数据保护(Data Protection)【中】

    前言 上篇主要是对 ASP.NET Core 的 Data Protection 做了一个简单的介绍,本篇主要是介绍一下API及使用方法. API 接口 ASP.NET Core Data Prote ...

  6. Asp.net core 学习笔记 ( identity server 4 JWT Part )

    更新 : id4 使用这个 DbContext 哦 dotnet ef migrations add identity-server-init --context PersistedGrantDbCo ...

  7. ASP.NET Core 学习笔记 第一篇 ASP.NET Core初探

    前言 因为工作原因博客断断续续更新,其实在很早以前就有想法做一套关于ASP.NET CORE整体学习度路线,整体来说国内的环境的.NET生态环境还是相对比较严峻的,但是干一行爱一行,还是希望更多人加入 ...

  8. ASP.NET Core 学习笔记 第四篇 ASP.NET Core 中的配置

    前言 说道配置文件,基本大多数软件为了扩展性.灵活性都会涉及到配置文件,比如之前常见的app.config和web.config.然后再说.NET Core,很多都发生了变化.总体的来说技术在进步,新 ...

  9. Asp.net core 学习笔记 QR code and Barcode

    QR code 和 Barcode 经常会使用到. Java 阵营有著名的 zxing https://github.com/zxing/zxing .Net 有对接它的 port https://g ...

随机推荐

  1. java.net.UnknownHostException 异常处理

    修改hosts文件: 1.把机器名和ip写在下面 2.hosts文件生效   soure /etc/hosts

  2. 搭建Harbor企业级docker仓库

    搭建Harbor企业级docker仓库 一.Harbor简介 1.Harbor介绍 Harbor是一个用于存储和分发Docker镜像的企业级Registry服务器,通过添加一些企业必需的功能特性,例如 ...

  3. MAC OSX 开启/禁用SafeSleep功能

    如果想要禁用,我们需要在终端中输入下面的命令: 然后定位到/private/var/vm/删除已经存在的sleepimage文件 cd /private/var/vm/ 使用下面的命令删除该文件 su ...

  4. EasyUI实现分页、搜索、行按钮功能

    1.html+js代码: <html> <head> <meta name="viewport" content="width=device ...

  5. EFM32G232F64时钟树

    1.为了熟悉MCU的时钟树,先看看EFM32G232F64的CMU(ClockManagementUnit) 时钟管理单元(CMU)用于管控晶振(时钟源)和各个时钟节点.出于降低功耗和启动时间的目的, ...

  6. SqlServer 行转列,列转行 以及PIVOT函数快速实现行转列,UNPIVOT实现列转行

     一   .列转行 创建所需的数据 CREATE TABLE [StudentScores]( [UserName] NVARCHAR(20), --学生姓名 [Subject] NVARCHAR(3 ...

  7. Django进阶之中间件

    中间件简介 django 中的中间件(middleware),在django中,中间件其实就是一个类,在请求到来和结束后,django会根据自己的规则在合适的时机执行中间件中相应的方法. 在djang ...

  8. HDU 3033 分组背包(至少选一个)

    分组背包(至少选一个) 我真的搞不懂为什么,所以现在就只能当作是模板来用吧 如果有大牛看见 希望评论告诉我 &代码: #include <cstdio> #include < ...

  9. mysql 终止 存储过程

    [1]如下图所示 有时候,存储过程执行语句中有循环,且已启动.但出于某种原因,我们突然不想让其再继续执行,需要终止其线程. Good Good Study, Day Day UP. 顺序 选择 循环 ...

  10. 怎样才能提交一个让开发人员拍手叫好的bug单

    怎样才能提交一个让开发人员拍手叫好的bug单 软件测试人员写得最多的文档就是测试用例和BUG,现在测试用例和BUG都没有标准的模板,每个公司使用的缺陷管理工具都有可能不一样,如果你换了一家公司就有可能 ...