通过应用程序设置MachineKey

本文关键字:MachineKey 设置 应用程序 | 更新日期: 2023-09-27 18:02:42

我们有。net 4.5。我们正在使用git部署部署到azure网站的X oss应用程序。我们有一个构建服务器,它将构件提交到git仓库,然后我们使用它来进行git部署。我们使用azure中的应用程序设置来控制一切。然而,我遇到了障碍,找到了一种通过应用程序设置/环境变量设置机器键的方法。还有人遇到这个问题并解决它吗?

注:在我们的应用程序中,似乎唯一使用machineKey的是SignalR…我想知道是否有一种安全可靠的方法来替换IProtectData,而不使用机器密钥来生成令牌。

通过应用程序设置MachineKey

像你一样,我希望能够设置机器密钥,但不将它们提交到web。并且可以使用与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