4

我们有一个.NET 4.5.x oss 应用程序,我们正在使用 git deploy 将其部署到 azure 网站。我们有一个构建服务器,它将工件提交到 git repo,然后我们使用它来 git deploy。我们使用 azure 中的应用设置来控制一切。但是,我在寻找通过应用程序设置/环境变量设置机器密钥的方法时遇到了障碍。还有其他人遇到这个问题并解决它吗?

PS,似乎我们应用程序中唯一使用machineKey的是SignalR ...我想知道是否有一种安全可靠的方法可以在不使用机器密钥生成令牌的情况下替换IProtectData。

4

1 回答 1

2

和你一样,我希望能够设置机器密钥,但不将它们提交到 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);

如果可能的话,我还希望能够提取和使用生产服务器上的当前机器密钥,这样就不必强制注销我们当前登录的所有用户。我最终做了一些与这个答案非常相似的事情,它也使用了反射。

完整解决方案:https ://gist.github.com/cmcnab/d2bbed02eb429098ed3656a0729ee40a

于 2017-03-13T13:31:33.460 回答