首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Azure网站上设置machineKey

如何在Azure网站上设置machineKey
EN

Stack Overflow用户
提问于 2015-04-13 05:49:44
回答 3查看 11.1K关注 0票数 30

我在运行一个Azure网站。每当我部署时,每个人都会注销,因为machineKey会更改。

我在web.config中指定了machineKey,但这并没有解决问题。我相信这是因为Azure会自动覆盖machineKey [1]

我在这里找到了几个类似的问题,但答案链接到了死链接。

那么,解决方案是什么呢?当然,有一种方法可以让用户保持登录,而不管Azure上的部署是什么。

EN

回答 3

Stack Overflow用户

发布于 2015-04-21 15:15:00

尝试在Application_Start上重置机器密钥配置部分

代码语言:javascript
复制
protected void Application_Start()
{
    // ...

    var mksType = typeof(MachineKeySection);
    var mksSection = ConfigurationManager.GetSection("system.web/machineKey") as MachineKeySection;
    var resetMethod = mksType.GetMethod("Reset", BindingFlags.NonPublic | BindingFlags.Instance);

    var newConfig = new MachineKeySection();
    newConfig.ApplicationName = mksSection.ApplicationName;
    newConfig.CompatibilityMode = mksSection.CompatibilityMode;
    newConfig.DataProtectorType = mksSection.DataProtectorType;
    newConfig.Validation = mksSection.Validation;

    newConfig.ValidationKey = ConfigurationManager.AppSettings["MK_ValidationKey"];
    newConfig.DecryptionKey = ConfigurationManager.AppSettings["MK_DecryptionKey"];
    newConfig.Decryption = ConfigurationManager.AppSettings["MK_Decryption"]; // default: AES
    newConfig.ValidationAlgorithm = ConfigurationManager.AppSettings["MK_ValidationAlgorithm"]; // default: SHA1

    resetMethod.Invoke(mksSection, new object[] { newConfig });
}

上面假设您在<appSettings>部分中设置了适当的值:

代码语言:javascript
复制
<appSettings>
  <add key="MK_ValidationKey" value="...08EB13BEC0E42B3F0F06B2C319B..." />
  <add key="MK_DecryptionKey" value="...BB72FCE34A7B913DFC414E86BB5..." />
  <add key="MK_Decryption" value="AES" />
  <add key="MK_ValidationAlgorithm" value="SHA1" />
</appSettings>

但是你可以从任何你喜欢的配置源加载你的实际值。

票数 23
EN

Stack Overflow用户

发布于 2015-04-21 13:34:21

如果Azure正在重写你的machineKey,你对此无能为力,因为它是他们基础设施的一部分。但是,还有其他方法。

覆盖FormsAuthentication

这应该不难,因为您可以很容易地查找FormsAuthentication的源代码并创建自己的逻辑,并使用存储在web.config或数据库中的自己的密钥替换MachineKey。

自定义身份验证筛选器

最简单的方法是创建一个过滤器,并检查、验证、加密和解密过滤器中的cookie。您需要在OnAuthorization方法上执行此操作,并创建IPrincipal的新实例,如果解密成功,则将IsAuthenticated设置为true。

OAuth

  1. 启用OAuth并创建OAuthProvider。但是,您需要在您控制的服务器上托管OAuthProvider,因为这将需要machineKey machineKey第三方OAuth,如果您使用谷歌、脸书等启用OAuth,将很容易,因为用户将被重定向到OAuth提供商,他们将继续自动登录,新的会话将是established.
票数 1
EN

Stack Overflow用户

发布于 2015-07-12 02:01:44

我也遇到了同样的问题,在我的例子中,我使用了VS13中的webdeploy to Azure向导。我想我要疯了,因为我会在web.config中设置机器密钥,然后在已部署的web.config上将其更改为自动生成。它位于webdeploy脚本/设置中。我的解决方案是使用服务器资源管理器从VS13中打开实时azure站点,然后编辑web.config并保存更改。这保留了我的设置和我提供的密钥,一切工作正常。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29595034

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档