首页 > 解决方案 > asp.net 身份认证 .net core 2.1

问题描述

我在使用 nginx Web 服务器后面的红隼在 Linux 机器上运行的 .net core 2.1 MVC 应用程序遇到问题。此环境在负载平衡器后面有 2 个 Web 服务器。

问题是用于身份验证的 .AspNetCore.Identity.Application cookie。我能够进行身份验证并重定向到装饰有

[授权]

属性(有时)。但是,在下一个请求中,cookie 消失了,我得到了 401。当我们从混合中取出一台服务器并将所有流量强制到一台服务器时,一切都按预期工作。

使用 Forms auth,可以通过指定机器密钥来解决相同的问题。.net 核心使用身份的等价物是什么?我发现了一些让我头疼的链接。他们提到做这样的事情:

 services.Configure<ForwardedHeadersOptions>(options =>
 {
     options.ForwardedHeaders = ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto;
 });

我不知道这是否能解决问题,我不想在不知道它们做什么的情况下尝试。

标签: asp.net-core-mvcasp.net-identityasp.net-core-2.1

解决方案


我怀疑您的经历与数据保护有关。

ASP.NET Core cookie 身份验证依赖于数据保护层来加密和解密存储在 cookie 中的数据。默认情况下,每台机器上都会创建一个本地密钥,这意味着它们无法解密另一台机器创建的 cookie,如官方文档中所述

我建议您浏览数据保护配置文档页面并评估您的选项。其中之一是将密钥存储在 UNC 共享中并使用证书对其进行加密(本段中的所有链接都链接到同一页面的不同部分)。


推荐阅读