跨多个应用服务计划覆盖 Microsoft Azure 应用服务上的 MachineKey

Posted

技术标签:

【中文标题】跨多个应用服务计划覆盖 Microsoft Azure 应用服务上的 MachineKey【英文标题】:Override MachineKey on Microsoft Azure App Services across multiple App Service Plan 【发布时间】:2019-02-15 00:36:19 【问题描述】:

我正在尝试在 ASP.Net MVC 应用程序的 Web.Config 中设置机器密钥,但它听起来像 Azure automatically provision unique machine keys for each web app 并覆盖了我的 Web.Config 中的内容。

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

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

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

当您在应用服务计划 (ASP) you do not need to worry about machineKeys as the App Service Platform will use the same one across all your instances 的多个实例上运行 ASP.NET 应用程序时,似乎也不需要对您的应用程序进行任何更改。

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

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

【问题讨论】:

【参考方案1】:

生成机器密钥并添加到 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" />

【讨论】:

以上是关于跨多个应用服务计划覆盖 Microsoft Azure 应用服务上的 MachineKey的主要内容,如果未能解决你的问题,请参考以下文章

AWS Beanstalk 跨多个 AWS 账户部署

跨浏览器服务器发送事件,或替代方案,包括 Microsoft 浏览器

Angular - 跨多个模块使用组件

跨多个子视图处理触摸事件

我们可以在 IIS 中部署 Microsoft bot 应用程序以在没有 Azure 的情况下进行托管吗?

使用 Feign 为计划的跨服务任务启用 OAuth2