部署在Google Cloud Run的Flask应用Google OAuth Redirect URI mismatch报错如何处理
问题根因
- Google Cloud Run 前端内置HTTPS负载均衡,用户HTTPS请求到达负载均衡后,会以HTTP协议转发到后端Flask容器,Flask默认无法感知外层的HTTPS协议。
- 你在
google_login中手动指定_scheme='https'生成的授权请求重定向地址是正确的,但OAuth库在回调阶段执行google.authorize_access_token()时,会自动从当前请求上下文拉取当前地址作为校验用重定向地址,这个地址默认会使用Flask感知到的HTTP协议,和GCP凭证中配置的HTTPS重定向地址不匹配,因此抛出错误。 - GCP生产状态的OAuth应用强制要求重定向URI使用HTTPS协议,因此修改配置为HTTP的方案不可行。
解决方案
- 开启Flask代理支持,信任Cloud Run负载均衡传递的
X-Forwarded-Proto请求头,让Flask可以正确识别原始请求协议。在Flask应用初始化代码中添加如下配置:
from werkzeug.middleware.proxy_fix import ProxyFix # 参数配置匹配Cloud Run 1层代理的架构 app.wsgi_app = ProxyFix(app.wsgi_app, x_for=1, x_proto=1, x_host=1, x_port=1)
ProxyFix是Flask依赖库Werkzeug内置的中间件,不需要额外安装依赖。
- (可选)全局配置Flask默认URL协议为HTTPS,避免其他地方生成HTTP链接:
app.config['PREFERRED_URL_SCHEME'] = 'https'
配置后原有url_for中的_scheme='https'参数可以省略,不影响功能。
- 确认GCP OAuth凭证中的重定向URI保持为
https://mydomain.run.app/authorize,无需修改为HTTP版本。
修改完成后重新部署到Cloud Run即可解决重定向不匹配的问题。
内容的提问来源于stack exchange,提问作者Santhoshkumar Sundararaj
相关产品推荐
相关产品推荐

