我正在将.NET Core 3.1应用程序部署到AWS Elastic Beanstalk。
我的管道是HTTPS -> ALB -> HTTP -> Instance
。
我面临的问题是,当我需要身份验证时,重定向Location:
标头是http和absolute,浏览器重定向不正确。
要解决此问题,我需要:
Location:
标头相对,或Location:
标头设为https。我根据app.UseForwardedHeaders()
在Startup.cs
文件中使用Configure ASP.NET Core to work with proxy servers and load balancers,尝试将其设置为https,但它仍然是http。
要使ASP.NET核心身份在Elastic Beanstalk上工作需要做什么?
我的问题是Microsoft.AspNetCore.HttpOverrides
模块的配置。
默认情况下,它是将KnownNetworks
限制为127.0.0.1
,将KnownProxies
限制为::1
。因此,当请求来自我的ALB时,它没有将方案从X-Forwarded-For
移至this.Request.Scheme
。
当我在配置过程中清除网络和代理时,此问题已解决,如下所示:
services.Configure<ForwardedHeadersOptions>(options =>
{
options.ForwardedHeaders =
ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto;
options.KnownNetworks.Clear(); // These are key
options.KnownProxies.Clear();
});
新未知:
问:这样做安全吗?
A:就我而言,我的EC2实例位于私有子网中,并且我的安全组将流量限制为来自ALB的流量,因此我感到非常安全。但是需要更多的研究。