asp.net-core-mvc - 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 cookie 身份验证依赖于数据保护层来加密和解密存储在 cookie 中的数据。默认情况下,每台机器上都会创建一个本地密钥,这意味着它们无法解密另一台机器创建的 cookie,如官方文档中所述。
我建议您浏览数据保护配置文档页面并评估您的选项。其中之一是将密钥存储在 UNC 共享中并使用证书对其进行加密(本段中的所有链接都链接到同一页面的不同部分)。
推荐阅读
- javascript - 如何为传递给 MDXRenderer 的 HTML 元素设置样式?
- linux - 在 gnuplot 上为一个 x 值绘制更多 y 值
- postgresql - 摆脱 JOIN LATERAL
- laravel - Laravel 5.8 此路由不支持 PUT 方法。支持的方法:GET、HEAD、POST
- c++ - 向使用 raw_ptr 的类发出 unique_ptr 为 nullptr 的信号
- selenium - Cucumber 与 Jenkins 的集成在远程机器上成功构建,但在带有 net.serenity-bdd 插件的 Serenity Reports 中有黑色屏幕截图
- mysql - 有什么方法可以将 PostgreSQL 数据库实时流备份到 MySQL?或者可以使用 PostgreSQL 转储到 MySQL 吗?
- asp.net - 使用VB.Net在Gridview中获取订单ID的行号
- docker - Docker compose:无法在应用程序中打开角度容器
- php - 如何在php中构造url?