ASP.NET Core 中的密钥不可变性和密钥设置

将对象持久保存到后备存储中后,它的表示形式永远不变。 可以将新数据添加到后备存储中,但永远不能更改现有数据。 此行为的主要目的是防止数据损坏。

此行为产生的一个结果是,将密钥写入后备存储后,它将是不可变的。 密钥的创建、激活和到期日期永远无法更改,但可使用 IKeyManager 撤销它。 此外,其基础算法信息、主密钥材料和静态加密属性也是不可变的。

如果开发人员更改了任何影响密钥持久性的设置,这些更改直到下次生成密钥时才能生效,无论是通过显式调用 IKeyManager.CreateNewKey 还是通过数据保护系统自己的自动密钥生成行为。 影响密钥持久性的设置如下所示:

如果需要在下一次自动轮换密钥时间之前启动这些设置,请考虑显式调用 IKeyManager.CreateNewKey 以强制创建新的密钥。 请记住,在调用中提供显式的激活日期({当前日期 + 2 天} 是一个很好的经验规则,可以让更改有时间传播)和到期日期。

提示

所有接触存储库的应用程序都应使用 IDataProtectionBuilder 扩展方法指定相同的设置。 否则,持久保存的密钥属性将取决于调用密钥生成例程的特定应用程序。