1

我正在尝试在不停机的情况下从 VS 发布我的网络应用程序。如果您在 Google 中搜索,您会找到有关使用插槽的官方文档并稍后进行交换。

这是一个很好的方法,但是当我进行交换时,我还有其他问题,登录丢失(看这个问题:link)。

链接中的相关信息:

会话未链接到身份验证,您试图以错误的方式解决它。

所有表单身份验证票证和 cookie 都使用数据保护层进行加密和签名。您遇到的问题是由于未保存加密密钥,并且应用程序彼此隔离。

我怎样才能做到这一点?在 AWS 我有滚动更新......

有关更多信息,我正在使用带有 Identity 3.0 的 ASP.NET Core

谢谢!!

4

3 回答 3

2

你现在看到的是一个天蓝色的限制。虽然 Azure 网站将共享密钥环,但它将交换槽视为单独的应用程序。

有几件事可以尝试。

首先,设置一个通用的应用程序名称。这将有所帮助,因为默认情况下,共享密钥环的每个应用程序都是隔离的;但如果他们共享应用程序名称,他们可以共享密钥

public void ConfigureServices(IServiceCollection services)
{
    services.AddDataProtection();
    services.ConfigureDataProtection(configure =>
    {
        configure.SetApplicationName("my application");
    });
}

如果这对 azure 来说还不够(老实说,我不确定热交换是否最终会使用 Azure Web App 的共享密钥文件夹),您可以将其与使用 Azure 数据表存储加密密钥相结合 - https://github.com/GrabYourPitchforks/DataProtection .Azure/树/开发

在这两者之间,它应该获得用于保护您的应用程序之间共享的身份 cookie 的加密密钥。

于 2016-04-09T17:23:35.223 回答
0

我为那些感兴趣的人找到了一个 aspnet core 1.0 的分支:

https://github.com/prajaybasu/DataProtection.Azure/tree/dev/DataProtection.Azure

就像另一个一样,它将加密密钥存储在 azure 存储帐户上。它完全解决了我的问题。

从吹镖的解决方案开始,我解决了我的问题,所以谢谢。

安德烈亚

于 2016-09-09T10:38:19.740 回答
-1

您是否使用内存中的会话状态?

“登录”被“丢失”的问题是架构问题,而不是更新 Web 应用程序的问题。

使用 RedisCache 之类的东西来获取会话状态。它不仅会在您更新应用程序时持续存在,而且还会处理多个服务器实例上的负载平衡。就目前而言,当您横向扩展至多台服务器时,以及更新应用程序时,您可能会遇到此问题。

于 2016-04-09T10:44:18.757 回答