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

Swagger API集成Google OAuth遇Error 400: redirect_uri_mismatch问题求助

解决Google OAuth redirect_uri_mismatch错误的方案

核心问题分析

你使用的GoogleWebAuthorizationBroker是Google针对桌面/控制台应用封装的授权工具,它默认会启动本地随机端口的HTTP服务器,回调地址格式为http://localhost:<随机端口>/authorize/。如果你的Google控制台配置的是Web应用类型的客户端ID,且仅添加了https://localhost或固定端口的HTTPS地址,就会出现地址不匹配的错误——因为工具实际使用的是HTTP协议+随机端口,和你手动配置的地址不一致。


解决方法1:改用桌面应用类型客户端ID(推荐)

这种方式无需手动配置回调地址,Google会自动适配本地授权流程:

  1. 登录Google Cloud控制台,进入「Credentials」页面。
  2. 删除现有的Web应用类型客户端ID,点击「创建凭据」→「OAuth客户端ID」。
  3. 应用类型选择「桌面应用」,填写名称后完成创建。
  4. 将新生成的ClientId和ClientSecret替换代码中的对应值,重新运行即可。

解决方法2:固定回调地址并匹配控制台配置

如果需要保留Web应用类型客户端ID,需强制指定固定回调地址并同步配置:

  1. 查看实际回调地址:在Google授权错误页面中,会明确显示请求中使用的redirect_uri(比如http://localhost:5244/authorize),复制该地址。
  2. 更新控制台配置:在Web应用客户端ID的「已获授权的重定向URI」列表中,添加刚才复制的完整地址(包含协议、域名、端口和路径)。
  3. 修改代码指定固定端口:
string clientId = "my client id";
string secretId = "my secret";
string[] scope = { "https://www.googleapis.com/auth/business.manage" };

var credentials = GoogleWebAuthorizationBroker.AuthorizeAsync(
    new ClientSecrets
    {
        ClientId = clientId,
        ClientSecret = secretId
    },
    scope,
    "user",
    CancellationToken.None,
    new FileDataStore("TokenStore"), // 可选,用于持久化token
    new LocalServerCodeReceiver("localhost", 5244, "/authorize") // 指定固定端口和路径
).Result;

if (credentials.Token.IsExpired(SystemClock.Default))
    credentials.RefreshTokenAsync(CancellationToken.None).Wait();

额外提示

如果你的服务是Web API,GoogleWebAuthorizationBroker并不适用——它依赖本地浏览器跳转和本地服务器监听。这种场景下应该使用带PKCE的Authorization Code Flow:通过前端页面引导用户完成授权,将授权码传回API服务后,再调用Google接口兑换access token。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 08:47:23