Asp.net core 我应该将UseForwardedHeaders()放在配置标志后面吗?

Asp.net core 我应该将UseForwardedHeaders()放在配置标志后面吗?,asp.net-core,asp.net-core-2.0,Asp.net Core,Asp.net Core 2.0,为了支持在Linux上使用反向代理(在本例中为nginx)运行ASP.NET核心应用程序,我必须添加以下代码段: // Forward headers in order to be able to operate behind a reverse proxy app.UseForwardedHeaders(new ForwardedHeadersOptions { ForwardedHeaders = ForwardedHeaders.XForwardedFor | ForwardedH

为了支持在Linux上使用反向代理(在本例中为nginx)运行ASP.NET核心应用程序,我必须添加以下代码段:

// Forward headers in order to be able to operate behind a reverse proxy
app.UseForwardedHeaders(new ForwardedHeadersOptions
{
    ForwardedHeaders = ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto
});

// The above does not appear to be enough to get the right redirect URI result when
// logging in with OpenID Connect. This code snippet from
// https://github.com/aspnet/Docs/issues/2384 fixed it.
app.Use((context, next) =>
{
    if (context.Request.Headers.TryGetValue(XForwardedPathBase, out StringValues pathBase))
    {
        context.Request.PathBase = new PathString(pathBase);
    }

    if (context.Request.Headers.TryGetValue(XForwardedProto, out StringValues proto))
    {
        context.Request.Protocol = proto;
    }

    return next();
});
我找不到任何明确的建议,关于我是否可以在默认情况下保持启用状态,或者是否应该将其置于某个显式配置标志之后

在我看来,如果这些头是在不使用反向代理的情况下添加的,那么这可能会产生奇怪的效果?我想不出有什么方法可以利用它,但也许我遗漏了什么


那么,除了性能上的微小改进之外,为这一特定配置引入标志还有什么好处呢?

不,不要在没有反向代理的情况下将其保留,这很危险。客户端可以使用它来提供假值(欺骗)并欺骗任何检查这些值的应用程序逻辑。

iirc它在
CreateDefaultBuilder
内隐式调用(以前是
。useisintegration()
这是在
CreateDefaultBuilder
中调用的iirc。此外,您仅在反向代理方案中需要它来获取原始协议和原始调用者ip/主机名。它仅在IIS方案中隐式调用。context.Request.protocol不是x-forwarded-proto的正确字段,它应该是scheme,这应该是alrUseForwardedHeaders已经为您提供了解决方案。@Tratcher在重新检查后,我不再需要任何解决方案;至少对于我当前的托管场景来说是这样。是的,我想……除了应用程序本身目前没有任何与这两种方式相关的逻辑之外。不过,我还是通过
appsettings.json
将配置引入了b为了安全起见。