使用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
相关产品推荐
相关产品推荐

