我正在运行一个 Azure 网站。machineKey
每当我部署时,每个人都会因为更改而注销。
我在中指定了machineKey
,web.config
但这并没有解决问题。我相信这是因为 Azure 会自动覆盖machineKey
[1]。
我在这里发现了几个类似的问题,但答案链接到死链接。
那么,解决方案是什么?不管 Azure 上的部署如何,肯定有一种方法可以让用户保持登录状态。
我正在运行一个 Azure 网站。machineKey
每当我部署时,每个人都会因为更改而注销。
我在中指定了machineKey
,web.config
但这并没有解决问题。我相信这是因为 Azure 会自动覆盖machineKey
[1]。
我在这里发现了几个类似的问题,但答案链接到死链接。
那么,解决方案是什么?不管 Azure 上的部署如何,肯定有一种方法可以让用户保持登录状态。
尝试重置机器密钥配置部分Application_Start
:
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>
部分中设置了适当的值:
<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>
但是您可以从您喜欢的任何配置源加载您的实际值。
如果 Azure 正在重写你的 machineKey,你就无能为力了,因为它是他们基础设施的一部分。但是,还有其他方法。
覆盖 FormsAuthentication
这应该不难,因为您可以轻松查找 FormsAuthentication 的源代码并创建自己的逻辑并用存储在 web.config 或数据库中的自己的密钥替换 MachineKey。
自定义身份验证过滤器
最简单的方法是创建一个过滤器并检查、验证、加密过滤器中的解密 cookie。如果解密成功,您需要在 OnAuthorization 方法上执行此操作并创建 IPrincipal 的新实例并将 IsAuthenticated 设置为 true。
身份验证
我遇到了同样的问题,就我而言,我在 VS13 中使用 webdeploy to Azure 向导。我以为我要疯了,因为我会在 web.config 中设置机器密钥,然后在部署的 web.config 上将其更改为自动生成。它在 webdeploy 脚本/设置中。我的解决方案是使用 Server Explorer 从 VS13 中打开 live azure 站点,然后编辑 web.config 并保存更改。这使用我提供的密钥保留了我的设置,并且一切正常。