对于 IIS 托管的 ASP.NET MVC 4 网站,我想在运行时在代码中动态调整机器密钥。
机器密钥、加密和验证密钥以及要使用的算法都存储在数据库中。我不想从文件中读取值web.config
,而是想在应用程序启动期间注入这些值并让系统使用这些值。
有什么方法可以实现这一点而无需进行任何更改web.config
(仅更改内存配置)?
我已经尝试访问配置部分,但它被标记为只读并且也是密封的,所以我无法覆盖IsReadOnly()
. 但是,setter
对我来说,有一个指标表明可能有一种方法可以删除只读标志。
var configSection = (MachineKeySection)ConfigurationManager.GetSection("system.web/machineKey");
if (!configSection.IsReadOnly())
{
configSection.ValidationKey = _platformInfo.MachineKey.ValidationKey;
configSection.DecryptionKey = _platformInfo.MachineKey.EncryptionKey;
...
}
有没有办法做到这一点?我能看到的唯一选择是使用像 AppHarbor 这样的自定义方法,但是如果可能的话,我宁愿坚持使用内置方法。
如果有人问我为什么要这样做,原因是,这是针对在 webfarm 中运行的大量相同网站。因此,必须拥有非自动生成的密钥(必须在每台服务器上相同)。此外,每个网站都应该被隔离,并且不应该共享相同的密钥。由于所有网站在物理表示上都是相同的,因此它们共享相同的物理位置。这就是 web.config 文件不能包含应用程序特定设置的原因。
编辑:如果根本不可能,至少确认一下会很有帮助。如前所述,可以使用自定义身份验证和加密方法,这将完全避免使用机器密钥设置。谢谢。