使用ARR在Openiddict中对Https的要求

问题描述 投票:1回答:1

我在非本地托管环境中使用没有https卸载的ARR。这意味着命中ARR的请求是https,但发送到后端服务器的请求只是http

如果我在openiddict中禁用https要求,那么配置将返回http网址。如果我启用它,那么请求被拒绝,后端服务器将其作为http接收。有没有办法解决?

asp.net-core openid-connect arr openiddict
1个回答
2
投票

您所描述的实际上是一个非常常见的问题,影响任何使用OpenIddict的ASP.NET Core应用程序,并且在反向代理级别执行TLS终止时出现:在这种情况下,ASP.NET Core确实没办法要知道实际的方案是什么,所以它假设HttpRequest.Schemehttp,而不是https

要解决这个问题,你必须恢复真正的方案,以便依赖它的所有中间件 - 包括OpenIddict - 按预期工作。

这可以通过引用"forwarded headers" middleware包并调用Microsoft.AspNetCore.HttpOverrides使用app.UseForwardedHeaders()来完成。

您可能需要调整设置以匹配其使用的标头,具体取决于您的代理。

注意:使用IIS集成包时会自动注册此中间件。您可以使用以下语法修改默认选项:

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

如果此方法不起作用,您仍然可以使用内联中间件覆盖该方案:

app.Use((context, next) =>
{
    context.Request.Scheme = "https";

    return next();
});

确保在任何其他中间件之前注册它。

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.