c# – ASP.NET machinekey在代码中设置密钥
对于IIS托管的ASP.NET MVC 4网站,我想在运行时期间在代码中动态调整机器密钥.
机器密钥,加密和验证密钥以及要使用的算法都存储在数据库中.我想在应用程序启动期间注入这些值,而不是从web.config文件中读取值,而是让系统使用这些值. 有没有办法实现这一点,而不必更改web.config(只更改内存配置)? 我已经尝试访问配置部分,但它被标记为只读并且也是密封的,所以我不能覆盖IsReadOnly().但是,对我来说,有一个setter是一个指示器,可能有一种方法可能会删除readonly标志. var configSection = (MachineKeySection)ConfigurationManager.GetSection("system.web/machineKey"); if (!configSection.IsReadOnly()) { configSection.ValidationKey = _platformInfo.MachineKey.ValidationKey; configSection.DecryptionKey = _platformInfo.MachineKey.EncryptionKey; ... } 有没有办法实现这个目标? 如果有人问为什么我想这样做,原因是, 编辑:至少确认是否根本不可能,这将是非常有帮助的.如上所述,可以使用自定义验证和加密方法,这些方法将完全避免使用机器密钥设置.谢谢. 解决方法
一旦Web应用程序启动,就无法以编程方式设置此项.但是,仍然可以实现您的目标.
如果每个应用程序都在其自己的应用程序池中运行,并且每个应用程序池都有自己的标识,请在applicationHost.config中查看CLRConfigFile开关.您可以使用此每个应用程序池注入新的配置级别.有关如何使用它的示例,请参见http://weblogs.asp.net/owscott/archive/2011/12/01/setting-an-aspnet-config-file-per-application-pool.aspx.您可以设置一个明确且唯一的< system.web / machineKey>每个应用程序池的自定义CLR配置文件中的元素. 这与Azure网站,GoDaddy和其他需要基于每个应用程序设置默认显式计算机密钥的主机使用的机制相同.请记住为每个将要访问它的应用程序池适当地对每个目标.config文件进行ACL. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |