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

Google Cloud Run服务集成Google OAuth2时遭遇redirect_uri_mismatch错误

Google Cloud Run服务集成Google OAuth2时遭遇redirect_uri_mismatch错误

我之前也踩过这个一模一样的坑!Google的错误提示确实够不友好的,连期望的重定向URI都不肯直接说,不过咱们可以从这几个核心方向排查:

1. 先核对Google OAuth控制台的授权URI列表

首先去Google Cloud Console的「API和服务」→「凭据」页面,找到你用的那个OAuth 2.0客户端ID,检查「已获授权的重定向URI」里有没有精确添加你代码里配置的https://helloworld-lrbsxicfna-uw.a.run.app/oauth2callback。这里一定要精确匹配:https不能写成http,域名、路径一个字符都不能错,哪怕多个斜杠都会出问题。

2. 别硬编码Cloud Run的服务域名!

你代码里硬写了root = 'https://helloworld-lrbsxicfna-uw.a.run.app',这在本地测试没问题,但Cloud Run如果后续换域名、加自定义域名,或者用临时测试域名的话,直接就会不匹配。更灵活的做法是让Flask动态获取当前请求的域名,比如:

# 举个例子,在登录路由里动态生成重定向URI
@app.route('/login')
def login():
    # 用url_for的_external=True参数自动生成完整的回调URI
    redirect_uri = url_for('oauth2callback', _external=True)
    return oauth.google.authorize_redirect(redirect_uri)

甚至可以把oauth注册时的redirect_uri参数去掉,完全在授权的时候动态传,这样本地和Cloud Run环境都能自动适配。

3. 检查是否有代理/负载均衡导致的URI变形

如果你的Cloud Run服务前面挂了负载均衡、CDN或者其他代理,外部请求的真实URI可能和代码里获取到的不一致。这时候需要让Flask信任代理传递的头信息,在代码里加上:

from werkzeug.middleware.proxy_fix import ProxyFix
# 配置信任代理的X-Forwarded-Proto和X-Forwarded-Host头
app.wsgi_app = ProxyFix(app.wsgi_app, x_proto=1, x_host=1)

这样Flask才能正确拿到外部用户访问的真实域名,生成匹配的重定向URI。

4. 验证Cloud Run服务的实际回调路径

你可以先在本地模拟Cloud Run的环境,或者直接在Cloud Run的日志里看请求的实际路径,确认回调路径/oauth2callback是不是能正常访问,有没有被路由规则拦截。

备注:内容来源于stack exchange,提问作者Rick McGeer

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.16 08:29:34