参考 :

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. [daily] fedora用过光盘做dnf repo

    有时候上不了网,或者你在一个网络下行受限的鬼地方上班.可是你需要给你的server装一个包. 这个时候,不妨用一下安装盘吧! 如下: 与redhat下用yum的时候,是一样一样的. 步骤如下: 1,插 ...

  2. C++11 使用异步编程std::async和std::future

    先说明一点:std::asyanc是std::future的高级封装, 一般我们不会直接使用std::futrue,而是使用对std::future的高级封装std::async. 下面分别说一下. ...

  3. Python3下载图片的方法

    1 第一种 from urllib import request request.urlretrieve(s, './图片1.jpg') # 第一种 # s是图片的网络地址,./图片1.jpg,是图片 ...

  4. 斑马打印机ZT410中文打印

    ^XA ^CW1, E:SIMSUN.TTF^CI28^FO50,50^A1N,50,50^FD汉字^FS^XZ ******************************************* ...

  5. 基于Enterprise Architect完成数据库建模

    基于Enterprise Architect完成数据库建模 “工欲善其事必先利其器”,Enterprise Architect是一款非常便利的设计工具,目前我也是刚刚使用没多久,进行过系统设计.UML ...

  6. sql server自定义排序

    方法一: 比如需要对SQL表中的字段NAME进行如下的排序:张三(Z)李四(L)王五(W)赵六(Z) 按照sql中的默认排序规则,根据字母顺序(a~z)排,结果为:李四  王五 赵六 张三 自定义排序 ...

  7. JUnit单元测试代码

    package com.storage.test; import org.junit.Before; import org.junit.Test; import org.springframework ...

  8. 关于绕过域名(ip)校验的一些小知识

    这篇文章最开始只是想写一个关于绕过referer的方法,写着写着发现和ssrf以及url跳转的一些手法类似,于是把这两种也加上了 对referer做校验一般是对csrf进行防范的手段之一,但是很多时候 ...

  9. JS关键字和保留字汇总(小记)

    ECMA-262 描述了一组具有特定用途的关键字.这些关键字可用于表示控制语句的开始或结束,或者用于执行特定操作等.按照规则,关键字也是语言保留的,不能用作标识符.以下就是ECMAScript的全部关 ...

  10. html5,dom操作1

    <body> <script>function hwd(){ var bb=document.getElementById('bt');// alert(bb.innerHTM ...