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会自动适配本地授权流程:
- 登录Google Cloud控制台,进入「Credentials」页面。
- 删除现有的Web应用类型客户端ID,点击「创建凭据」→「OAuth客户端ID」。
- 应用类型选择「桌面应用」,填写名称后完成创建。
- 将新生成的
ClientId和ClientSecret替换代码中的对应值,重新运行即可。
解决方法2:固定回调地址并匹配控制台配置
如果需要保留Web应用类型客户端ID,需强制指定固定回调地址并同步配置:
- 查看实际回调地址:在Google授权错误页面中,会明确显示请求中使用的redirect_uri(比如
http://localhost:5244/authorize),复制该地址。 - 更新控制台配置:在Web应用客户端ID的「已获授权的重定向URI」列表中,添加刚才复制的完整地址(包含协议、域名、端口和路径)。
- 修改代码指定固定端口:
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
相关产品推荐
相关产品推荐

