我遇到了一个.net核心2.1 MVC应用程序的问题,该应用程序在nginx Web服务器后面使用茶est的Linux机壳上运行。该环境在负载均衡器后面有2个Web服务器。
问题是用于身份验证的.AspNetCore.Identity.Application cookie。我能够进行身份验证并重定向到装饰有
的控制器[授权]
属性(有时)。但是,在下一个请求中,cookie消失了,我得到了401。当我们从一台服务器中取出一台服务器并将所有流量强制发送到一台服务器时,一切都会按预期进行。
使用Forms auth,可以通过指定机器密钥来解决相同的问题。 .net核心使用身份的等效性是什么?我发现一些链接不胜枚举。他们提到这样做:
services.Configure<ForwardedHeadersOptions>(options =>
{
options.ForwardedHeaders = ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto;
});
我不知道这是否可以解决问题,并且我不想在不知所措的情况下尝试尝试。
答案 0 :(得分:1)
我怀疑您的经验与数据保护有关。
ASP.NET Core cookie身份验证依靠数据保护层来加密和解密cookie中存储的数据。默认情况下,每台计算机上都会创建一个本地密钥,这意味着它们无法解密由另一台计算机创建的cookie,例如stated in the official documentation。
我建议您浏览data protection configuration文档页面并评估您的选择。其中之一是store the keys on a UNC share和encrypt them with a certificate(本段中的所有链接都链接到同一页面的不同部分)。