• Asp.net core 学习笔记 ( Data protection )


    参考 : 

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

  • 相关阅读:
    Ubuntu中安装gdal python版本
    python中在计算机视觉中的库及基础用法
    Google earth爬取卫星影像数据并进行标注路网的方法
    事务
    文件的下载,随机验证码(无验证)登录注册
    类的加载器和反射
    等待唤醒机制,UDP通信和TCP通信
    线程池,多线程,线程异步,同步和死锁,Lock接口
    多线程, Thread类,Runnable接口
    转换流,缓冲流
  • 原文地址:https://www.cnblogs.com/keatkeat/p/9316389.html
Copyright © 2020-2023  润新知