pho*_*lly 3 arr openid-connect asp.net-core openiddict
我https在非本地托管环境上使用 ARR,无需卸载。这意味着命中 ARR 的请求为 ,https但发送到后端服务器的请求仅为http。
如果我禁用httpsopeniddict 中的要求,则配置返回httpurl。如果我启用它,那么请求将被拒绝,因为后端服务器将它们接收为http. 有没有办法解决?
您所描述的实际上是一个非常常见的问题,它会影响任何使用或不使用 OpenIddict 的 ASP.NET Core 应用程序,并在反向代理级别执行 TLS 终止时出现:在这种情况下,ASP.NET Core 确实没有办法知道实际的方案是什么,所以它假设HttpRequest.Scheme是http,而不是https。
要解决这个问题,您必须恢复真实的方案,以便所有依赖它的中间件(包括 OpenIddict)都能按预期工作。
这可以使用“转发标头”中间件通过引用Microsoft.AspNetCore.HttpOverrides包并调用app.UseForwardedHeaders().
根据您的代理,您可能需要调整设置以匹配它使用的标头。
注意:使用IIS集成包时会自动注册该中间件。您可以使用以下语法修改默认选项:
services.Configure<ForwardedHeadersOptions>(options =>
{
options.ForwardedHeaders = ForwardedHeaders.XForwardedProto;
});
Run Code Online (Sandbox Code Playgroud)
如果这种方法不起作用,您仍然可以使用内联中间件覆盖该方案:
app.Use((context, next) =>
{
context.Request.Scheme = "https";
return next();
});
Run Code Online (Sandbox Code Playgroud)
确保在任何其他中间件之前注册它。
| 归档时间: |
|
| 查看次数: |
2071 次 |
| 最近记录: |