我正在使用 ARR 而不https
卸载我们的非本地托管环境。这意味着命中 ARR 的https
请求是但发送到后端服务器的请求只是http
.
如果我https
在 openiddict 中禁用要求,则配置返回http
url。如果我启用它,那么请求将被拒绝,因为后端服务器将它们接收为http
. 有没有办法解决?
我正在使用 ARR 而不https
卸载我们的非本地托管环境。这意味着命中 ARR 的https
请求是但发送到后端服务器的请求只是http
.
如果我https
在 openiddict 中禁用要求,则配置返回http
url。如果我启用它,那么请求将被拒绝,因为后端服务器将它们接收为http
. 有没有办法解决?
您所描述的实际上是一个非常常见的问题,它影响任何使用或不使用 OpenIddict 并在反向代理级别执行 TLS 终止时出现的 ASP.NET Core 应用程序:在这种情况下,ASP.NET Core 确实没有办法知道实际的方案是什么,所以它假设HttpRequest.Scheme
是http
,不是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();
});
确保在任何其他中间件之前注册它。