You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Nginx反向代理时,如何修正外部认证的redirect_uri协议错误?

解决反向代理下redirect_uri协议错误问题

问题出在默认转发头配置未生效,ASP.NET Core默认仅信任本地环回地址的代理请求,再加上中间件调用顺序可能有误,按以下步骤修复:

1. 显式配置ForwardedHeadersOptions

在Program.cs中添加转发头配置,指定要转发的头字段及信任的代理IP:

builder.Services.Configure<ForwardedHeadersOptions>(options =>
{
    // 开启转发X-Forwarded-For和X-Forwarded-Proto头
    options.ForwardedHeaders = ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto;
    // 添加Nginx所在服务器IP到信任列表,本地代理填127.0.0.1,远程代理填实际IP
    options.KnownProxies.Add(IPAddress.Parse("127.0.0.1"));
    // 若为内网段代理,可用网段配置替代单个IP
    // options.KnownNetworks.Add(new IPNetwork(IPAddress.Parse("192.168.0.0"), 24));
});

2. 调整中间件调用顺序

确保UseForwardedHeaders()在认证中间件之前执行,让认证模块能获取正确的协议信息:

var app = builder.Build();

// 优先处理转发头,必须在UseAuthentication之前
app.UseForwardedHeaders();

// 再加载认证、授权中间件
app.UseAuthentication();
app.UseAuthorization();

// 其他业务中间件
app.MapControllers();
app.Run();

3. 检查Nginx配置

确认Nginx反向代理配置中正确传递转发头,在对应location块中添加:

proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-Host $host;

修改完成后,ASP.NET Core就能正确识别Nginx传递的X-Forwarded-Proto头,生成带https的redirect_uri。

内容的提问来源于stack exchange,提问作者Perfect28

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 18:15:16