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

Flask实现Google OAuth流程时fetch_token执行失败报错如何解决

问题本质

该报错由oauthlib默认的scope一致性校验规则触发:代码中声明的请求scope仅为https://www.googleapis.com/auth/drive.metadata.readonly,但谷歌授权服务器返回的授权scope包含了额外权限(包括gmail只读、用户基本信息、openid等),两者不一致时oauthlib会抛出错误阻断流程。
该现象和代码中开启的include_granted_scopes='true'参数直接相关:该参数会触发谷歌的增量授权逻辑,将该用户历史给当前应用授权过的所有scope一并返回,正好命中了oauthlib的校验规则。

解决方案

方案1:关闭scope变更校验(推荐)

适配增量授权逻辑,仅需新增一行环境变量配置即可,无需修改其他业务代码:

if __name__ == '__main__':
  # 本地运行时禁用OAuthlib的HTTPs校验
  # 开发者操作提示:生产环境运行时*切勿*开启该选项
  os.environ['OAUTHLIB_INSECURE_TRANSPORT'] = '1'
  # 新增配置:关闭scope变更校验,允许返回的scope包含额外已授权权限
  os.environ['OAUTHLIB_RELAX_TOKEN_SCOPE'] = '1'

  waitress.serve(app, port="8080", url_scheme="https")

方案2:关闭增量授权

如果不需要获取用户历史授权的所有scope,直接修改授权URL生成参数即可,仅返回本次请求的scope:

authorization_url, state = flow.authorization_url(
    # 开启离线访问,无需重复征求用户权限即可刷新access token,推荐Web服务端应用使用
    access_type='offline',
    # 将原true改为false,关闭增量授权
    include_granted_scopes='false')

如果返回的额外scope不属于你预期的授权范围,可检查谷歌云控制台对应项目的OAuth客户端配置,确认是否添加了多余的强制授权scope。

内容的提问来源于stack exchange,提问作者Mohammed Suhail CS

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 15:57:01