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

ASP.NET Core部署Heroku时Google OAuth报400: redirect_uri_mismatch错误

这个问题的根因是Heroku使用反向代理架构,ASP.NET Core默认不会信任反向代理传递的原始请求协议(HTTPS)和主机头,导致Google OAuth中间件构造的回调地址和你在Google Cloud控制台配置的不一致,哪怕肉眼看起来完全相同。

步骤1:配置ForwardedHeaders中间件

这是反向代理环境下部署ASP.NET Core应用的必填配置,作用是让应用正确读取反向代理传递的X-Forwarded-Proto(原始请求协议)、X-Forwarded-For(原始请求IP)等头信息。

在Startup.cs的ConfigureServices方法中添加如下配置:

services.Configure<ForwardedHeadersOptions>(options =>
{
    options.ForwardedHeaders = ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto;
    // 清空已知代理/网络限制,适配Heroku的动态代理节点
    options.KnownProxies.Clear();
    options.KnownNetworks.Clear();
});

然后在Configure方法的最开头(必须排在UseAuthentication、UseHttpsRedirection等中间件之前)添加:

app.UseForwardedHeaders();

步骤2:显式指定Google OAuth回调路径

避免默认配置的隐藏问题,直接在AddGoogle配置中显式声明回调路径,和你在Google Cloud控制台配置的完全一致:

services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme)
    .AddGoogle(options =>
    {
        var googleAuthNSection = configuration.GetSection("Google");
        options.ClientId = googleAuthNSection["ClientId"];
        options.ClientSecret = googleAuthNSection["ClientSecret"];
        options.SignInScheme = IdentityConstants.ExternalScheme;
        // 显式指定回调路径,和Google Cloud控制台配置的完全一致
        options.CallbackPath = "/signin-google";
    });

步骤3:确认Google Cloud控制台配置完全匹配

再次检查授权重定向URI的每一个字符:

  • 必须是完整地址,和报错信息中的redirect_uri完全一致,不能多斜杠、少斜杠
  • 协议必须是https,不能是http
  • 大小写完全匹配
  • 不要带任何查询参数

可选:禁用HTTPS重定向中间件

Heroku反向代理已经处理了HTTPS强制跳转,你可以删除UseHttpsRedirection中间件的配置,避免出现重定向循环。

配置完成后重新部署到Heroku即可解决问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 09:45:03