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

Asp.Net Core 7 MVC应用部署在Nginx反向代理后Google认证失效,报invalid_client错误

Asp.Net Core 7 MVC应用部署在Nginx反向代理后Google认证失效,报invalid_client错误

看起来你遇到的是Google OAuth认证里很常见的invalid_client错误,我帮你梳理几个大概率的排查方向,你可以一步步试:


1. 先核对Google开发者控制台的核心配置

这是最容易踩坑的环节:

  • Client ID/Secret是否完全匹配:检查部署环境里的CLIENT_ID和CLIENT_SECRET,和Google控制台生成的内容是不是一模一样——别小看复制粘贴时的空格、大小写遗漏,这些细节都会直接触发invalid_client。
  • 重定向URI是否精确配置:确保在Google控制台的OAuth 2.0客户端ID设置中,已经添加了https://myapp.mydomain.com/signin-google,注意必须是https协议,路径拼写完全不能错,哪怕多一个斜杠或者拼错单词都不行。

2. 确保Asp.Net Core正确识别反向代理的HTTPS请求

你的Nginx已经配置了X-Forwarded-Proto头,但Asp.Net Core默认不会信任反向代理的转发头,导致它会认为当前请求是HTTP协议,进而向Google发送HTTP格式的回调URI,这和你控制台里配置的HTTPS URI不匹配,就会触发错误。解决方法如下:
在Program.cs里添加转发头配置,必须放在认证中间件之前:

// 配置转发头选项
builder.Services.Configure<ForwardedHeadersOptions>(options =>
{
    options.ForwardedHeaders = ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto;
    // 信任Nginx的IP,本地反向代理填127.0.0.1,生产环境建议填写Nginx服务器的具体IP
    options.KnownProxies.Add(IPAddress.Parse("127.0.0.1"));
});

// ...其他服务配置代码...

var app = builder.Build();

// 必须在UseAuthentication、UseAuthorization之前调用
app.UseForwardedHeaders();

// ...其他中间件(如UseStaticFiles、UseRouting等)...

app.UseAuthentication();
app.UseAuthorization();

3. 明确指定Google认证的回调路径

有时候Asp.Net Core在反向代理环境下会自动生成错误的回调路径,你可以手动指定来规避这个问题:

builder.Services.AddAuthentication()
    .AddCookie(x =>
    {
        x.CookieManager = new CookieManagerWrapper();
        x.Cookie.SameSite = SameSiteMode.None;
        x.Cookie.HttpOnly = true;
        x.Cookie.SecurePolicy = CookieSecurePolicy.Always;
    })
    .AddGoogle(opt => {
        opt.ClientId = builder.Configuration["CLIENT_ID"]!;
        opt.ClientSecret = builder.Configuration["CLIENT_SECRET"]!;
        // 明确指定回调路径,和Google控制台的配置保持完全一致
        opt.CallbackPath = "/signin-google";
    });

4. 验证配置是否正确加载

在开发模式下,你可以临时添加一行输出,确认程序是否正确读取到了CLIENT_ID和CLIENT_SECRET:

Console.WriteLine($"Loaded Client ID: {builder.Configuration["CLIENT_ID"]}");
Console.WriteLine($"Loaded Client Secret: {builder.Configuration["CLIENT_SECRET"]}");

如果输出为空或者内容不对,那就是配置文件没部署到位,或者环境变量没设置正确,这时候需要先解决配置加载的问题。


按照这个顺序排查,大概率能解决问题,我之前处理过类似的反向代理下OAuth认证失效的情况,大多是转发头未配置或者Google控制台的URI写错导致的。

备注:内容来源于stack exchange,提问作者Joseph Izang

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.22 07:13:04