参考 :

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. IBM Installation Manager 工具概述(转)

    IBM Installation Manager 工具概述 IBM Installation Manager 是一款可运行在多种平台(如 IBM i. z/OS. Windows. Linux.Uni ...

  2. POJ 3984 - 迷宫问题 - [BFS水题]

    题目链接:http://poj.org/problem?id=3984 Description 定义一个二维数组: int maze[5][5] = { 0, 1, 0, 0, 0, 0, 1, 0, ...

  3. 第二周作业-web后台应用开发与xml

    web后台: 网站前台和网站后台通常是相对于动态网站而言,即网站建设是基于数据库开发 的网站.基于带数据库开发的网站,一般分网站前台和网站后台.网站前台是面向网站访问用户的,通俗的说也就是给访问网站的 ...

  4. 在Mac上 python中使用tesseract OCR (Pytesser) 识别图片中的文字

    仓库地址:https://github.com/RobinDavid/Pytesser brew install tesseract sudo pip install opencv-python 安装 ...

  5. angular--解决angular图片加载失败问题

    基于angular4写的一个指令,在ionic3.x项目在用.因为加载图片超时等原因导致图片显示不出来,需要替换成默认或者指定图片 1.err-src.ts import { Directive,In ...

  6. slf4j日志使用

    scala中 trait LogSupport { protected val log = LoggerFactory.getLogger(this.getClass) } 需要要到的类 extend ...

  7. linux环境如何配置repo

    (1)下载repo mkdir ~/bin       curl https://mirrors.tuna.tsinghua.edu.cn/git/git-repo > ~/bin/repo  ...

  8. 使用COE脚本绑定SQL Profile

    日常运维中,经常会遇到需要绑定好的执行计划的场景. 简单来说,就是将一个sql_id绑定好的plan_hash_value.如果没有使用到绑定变量,还需要把force_match设置为true. 用到 ...

  9. Asianux 7.3安装Oracle 11.2.0.4单实例体验

    环境:Asianux 7.3 需求:安装Oracle 11.2.0.4 单实例 背景:系统使用默认的最小安装部署,Oracle安装额外需要的包统一使用yum安装. 查看当前系统相关信息: [root@ ...

  10. Vue+element 实现文件导出xlsx格式

    傻瓜教程:   第一步:安装两个依赖包 npm install --save xlsx file-saver 第二步:建立一个Vue文件,导入以下代码即可 <template> <d ...