通过电话提供的cookie:
await HttpContext.Authentication.SignInAsync("MyCookieMiddlewareInstance", principal);
以加密状态存储。如何获得加密密钥?
重要:我的original question关于Cookie解密的问题越来越多。感谢Ron C和他的好回答。
答案 0 :(得分:2)
获取密钥
默认情况下,.net核心框架竭尽全力保持密钥的私密性,并帮助开发人员避免处理密钥的任何需要。这很好,因为开发人员很难保证密钥安全。
也就是说,通过更改配置,您可以轻松访问密钥。
将以下代码行添加到ConfigureServices
文件的Startup.cs
方法中。如果您使用使用会话,请将其添加到AddSession
:
services.AddDataProtection().PersistKeysToFileSystem(new DirectoryInfo(keyDirPath));
并将keyDirPath
设置为您希望存储密钥的目录的操作系统绝对路径。该目录不需要已存在,因为系统将动态创建该目录。在我的例子中,我将目录设置为名为Keys的文件夹。以下是运行代码一次后目录的样子,它包含一个密钥文件:
该密钥文件的内容未加密,如下所示:
<?xml version="1.0" encoding="utf-8"?>
<key id="677f1115-644a-4b11-b045-0c3c51675ef1" version="1">
<creationDate>2017-03-17T12:21:10.8909291Z</creationDate>
<activationDate>2017-03-17T12:21:10.8419262Z</activationDate>
<expirationDate>2017-06-15T12:21:10.8419262Z</expirationDate>
<descriptor deserializerType="Microsoft.AspNetCore.DataProtection.AuthenticatedEncryption.ConfigurationModel.AuthenticatedEncryptorDescriptorDeserializer, Microsoft.AspNetCore.DataProtection, Version=1.1.1.0, Culture=neutral, PublicKeyToken=adb9793829ddae60">
<descriptor>
<encryption algorithm="AES_256_CBC" />
<validation algorithm="HMACSHA256" />
<masterKey p4:requiresEncryption="true" xmlns:p4="http://schemas.asp.net/2015/03/dataProtection">
<!-- Warning: the key below is in an unencrypted form. -->
<value>BMJ6EY5MbcR0vaXhCbHggQcVsuYc6MnMtQpQm0qL647UBVx0YDbZufqQ+2/XuahFfIY2fJ6BIlOl+LYODnLbrA==</value>
</masterKey>
</descriptor>
</descriptor>
</key>
警告:您永远不应将您的密钥置于名为keys的文件夹中完全不受保护的状态。这样做不是安全性最佳做法。但是,如果您正在尝试了解安全系统,那么这是一项有用的练习。
您可以在此处详细了解数据保护服务:https://docs.microsoft.com/en-us/aspnet/core/security/data-protection/configuration/overview