c# – 通过应用程序设置设置MachineKey
发布时间:2020-12-15 22:16:53 所属栏目:百科 来源:网络整理
导读:我们有一个 .NET 4.5.x oss application,我们正在使用git deploy部署到azure网站.我们有一个构建服务器,它将工件提交给git repo然后我们用它来进行git部署.我们在azure中使用app设置来控制一切.但是,我遇到了障碍,找到了通过应用程序设置/环境变量设置机器密
我们有一个
.NET 4.5.x oss application,我们正在使用git deploy部署到azure网站.我们有一个构建服务器,它将工件提交给git repo然后我们用它来进行git部署.我们在azure中使用app设置来控制一切.但是,我遇到了障碍,找到了通过应用程序设置/环境变量设置机器密钥的方法.其他人遇到这个问题并解决它?
P.S.,似乎在我们的应用程序中唯一使用machineKey的是SignalR …我想知道是否有一种安全可靠的方法来替换IProtectData而不使用机器密钥来生成令牌. 解决方法
像我一样,我希望能够设置机器密钥,但不能将它们提交到web.config,这将进入源代码控制并成为安全风险,并且能够使用我们与AppSettings一起使用的相同的每个环境配置系统.我确实找到了解决方案,虽然它有点难看,因为它使用反射来操作MachineKeySection配置.
var getter = typeof(MachineKeySection).GetMethod("GetApplicationConfig",BindingFlags.Static | BindingFlags.NonPublic); var config = (MachineKeySection)getter.Invoke(null,Array.Empty<object>()); var readOnlyField = typeof(ConfigurationElement).GetField("_bReadOnly",BindingFlags.Instance | BindingFlags.NonPublic); readOnlyField.SetValue(config,false); config.DecryptionKey = myKeys.EncryptionKey; config.ValidationKey = myKeys.ValidationKey; readOnlyField.SetValue(config,true); 我还希望能够,如果可能的话,提取并使用生产服务器上的当前机器密钥,以便不必强行注销我们当前登录的所有用户.我最终做了一些非常类似于this answer的东西,它也使用了反射. 完整解决方案:https://gist.github.com/cmcnab/d2bbed02eb429098ed3656a0729ee40a (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |