1

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

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

4

1 回答 1

4

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

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

这可以通过引用Microsoft.AspNetCore.HttpOverrides并调用app.UseForwardedHeaders().

根据您的代理,您可能需要调整设置以匹配它使用的标头。

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

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

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

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

    return next();
});

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

于 2017-03-02T18:11:32.473 回答