是应用程序尝试检测其操作环境和处理自己的密钥配置。
如果应用托管在Azure 应用,密钥保存到 %HOME%\ASP.NET\DataProtection-Keys文件夹。 此文件夹由网络存储提供支持,并跨托管应用的所有计算机同步。
如果用户配置文件不可用,将密钥保存到 %LOCALAPPDATA%\ASP.NET\DataProtection-Keys文件夹。 如果操作系统是 Windows,静态使用 DPAPI 加密密钥。
同时还必须启用应用池的 setProfileEnvironment attribute。 setProfileEnvironment
的默认值为 true
。 在某些情况下(例如,Windows 操作系统),将 setProfileEnvironment
设置为 false
。 如果密钥未按预期存储在用户配置文件目录中,请执行以下操作:
<system.applicationHost><applicationPools><applicationPoolDefaults><processModel>
元素。setProfileEnvironment
属性不存在,这会将值默认设置为 true
,或者将属性的值显式设置为 true
。如果应用托管在 IIS 中,密钥保留到 HKLM 注册表中特殊的注册表项的列仅对工作进程帐户。 使用 DPAPI 对密钥静态加密。
如果没有这些条件匹配,不保留当前进程之外的密钥。 进程关闭时,生成所有密钥都都将丢失。
开发人员始终完全控制,并且可重写方式和存储密钥的位置。 上面的前三个选项应提供合理的默认值对于大多数应用程序类似于如何在 ASP.NET <machineKey > 过去的工作自动生成例程。 最终的回退选项是要求开发人员指定的唯一情形配置前期如果他们想要密钥持久性,但在极少数情况下才会出现以上后备机制。
在托管在 Docker 容器中,应是 (共享的卷或仍然存在超出容器的生存期的主机装入的卷) 的 Docker 卷的文件夹中保存密钥或在外部提供程序,如Azure 密钥保管库或Redis。 如果应用无法访问共享的网络卷,外部提供程序也是可在 web 场方案中 (请参阅PersistKeysToFileSystem有关详细信息)。
警告
如果开发人员重写上面所述的规则和点处为特定的密钥存储库的数据保护系统,则禁用自动加密静态密钥。 静态保护,可以通过重新启用配置。
默认情况下,密钥的 90 天生存期。 密钥过期后,应用将自动生成新的密钥,并将新的密钥设置为活动密钥。 只要已停用的密钥保留在系统中,您的应用程序可以解密保护与他们的任何数据。 请参阅密钥管理有关详细信息。
使用的默认负载保护算法是 AES-256-CBC 保密性和 HMACSHA256 的真实性。 512 位主密钥,每隔 90 天更改一次用于派生两个用于在每个有效负载的基础上这些算法的子键。 请参阅子项派生有关详细信息。