Google OAuth2 redirect_uri异常求助:Python脚本运行失败
解决Google OAuth2 redirect_uri不匹配问题(Python脚本场景)
核心排查与解决步骤
1. 核对脚本与控制台的redirect_uri一致性
直接浏览器访问正常但脚本失败,大概率是脚本内配置的redirect_uri和Google Cloud控制台的配置不严格匹配:
- 检查Python脚本中初始化OAuth客户端时传入的
redirect_uri参数,必须和控制台里的https://local.mysite.com完全一致,包括协议(不能把https写成http)、域名,不能多末尾斜杠或额外路径。 - 比如脚本里写
redirect_uri='https://local.mysite.com/'(多了斜杠),就会触发不匹配错误。
2. 排查MAMP PRO本地站点配置
确认你的https://local.mysite.com本地站点配置无问题:
- 检查MAMP PRO是否正确将该域名映射到本地服务,HTTPS证书是否被系统信任(避免脚本请求时的SSL验证失败)。
- 确保脚本里没有硬编码旧端口(比如之前的8000/8080),导致实际请求的redirect_uri带端口,和控制台的无端口配置冲突。
3. 清除OAuth客户端缓存
Python的OAuth库(如google-auth、oauth2client)可能缓存旧配置,导致新redirect_uri未生效:
- 删除脚本运行目录下的
.credentials文件夹(若存在)。 - 或在脚本中添加
cache_discovery=False参数,强制不使用缓存配置,示例代码:from google_auth_oauthlib.flow import InstalledAppFlow flow = InstalledAppFlow.from_client_secrets_file( 'client_secret.json', scopes=['YOUR_REQUIRED_SCOPES'], redirect_uri='https://local.mysite.com' ) flow.run_local_server(port=None, cache_discovery=False)
4. 确认Google Cloud控制台配置状态
- 检查控制台中OAuth 2.0客户端ID的
redirect_uris列表,确保只有https://local.mysite.com,无残留旧配置(比如之前的localhost:8000)。 - 配置修改后需等待几分钟生效,控制台更新可能不会实时同步到授权服务器。
5. 调整脚本的授权流程类型
若脚本使用run_local_server()方法,默认会启动本地HTTP服务器并生成带端口的redirect_uri(如http://localhost:8080/),和你配置的域名冲突:
- 改用手动授权码流程,让脚本跳转到你配置的域名获取授权码,再手动输入到脚本中,示例:
flow = InstalledAppFlow.from_client_secrets_file( 'client_secret.json', scopes=['YOUR_REQUIRED_SCOPES'], redirect_uri='https://local.mysite.com' ) auth_url, _ = flow.authorization_url(prompt='consent') print(f"请访问此链接授权:{auth_url}") authorization_code = input("输入页面返回的授权码:") flow.fetch_token(code=authorization_code) credentials = flow.credentials
内容的提问来源于stack exchange,提问作者anjanesh
相关产品推荐
相关产品推荐

