首页 > 解决方案 > 跨多个应用服务计划覆盖 Microsoft Azure 应用服务上的 MachineKey

问题描述

我正在尝试在 ASP.Net MVC 应用程序的 Web.Config 中设置机器密钥,但听起来Azure 会自动为每个 Web 应用程序配置唯一的机器密钥并覆盖我的 Web.Config 中的内容。

我想这样做的原因是因为我有一个应用服务女巫用作身份验证应用程序。那是用户将登录的地方。而且我还有很多其他应用程序将使用第一个应用程序提供的令牌。这样做会在一个独特的地方对用户进行身份验证,并且用户将能够浏览门户中的某些模块,并且只进行一次身份验证。它在 localhost 或托管在 IIS 中运行良好,但在 Azure Hosted App Service 上,即使我在 Application_Start 上重置了机器密钥配置部分,机器密钥似乎也没有被正确读取。

我尝试了此处描述的解决方案,但正如@gorillapower 所说

似乎这对我们不起作用。我们正在使用 .NET 4.6.1 并使用带有 app.UseCookieAuthentication() 的 OWIN 启动并使用 Redis 缓存会话提供程序。我实现了上述内容,但用户在插槽交换后不断退出。有任何想法吗?

似乎当您在应用服务计划 (ASP) 的多个实例上运行 ASP.NET 应用程序时,您无需担心机器密钥,因为应用服务平台将在您的所有实例中使用相同的密钥,因此不需要对您的应用程序进行任何更改。

但就我而言,我们的应用程序都在不同的应用程序服务计划中。所以这个解决方案不适用。

关于这个问题的任何线索?谢谢

标签: asp.net-mvcazuremachinekey

解决方案


生成机器密钥并添加到 web.config 文件中

它适用于 IIS 或 Azure Web App 服务中的 Web Farm/负载均衡器。注意:仅当您使用 IAppBuilder->UseCookieAuthentication-> CookieAuthenticationOptions 时才有效

<system.web>
    <authentication mode="None" />
    <machineKey validation="HMACSHA256" decryption="AES" validationKey="D6883865C0490AFA4907A046E838DD2C7B13B636694B552630C13770701B944A" decryptionKey="2C3C48562E6FE018E71B69BDB27D06048A573C094A962AA9A1547C3D874C63B0" />

推荐阅读