调用google_auth_oauthlib库时出现redirect uri mismatch错误的解决方法
修复Google OAuth URI不匹配问题
核心问题分析
- 默认重定向URI带端口:
run_local_server()默认使用的重定向URI是http://localhost:8080/(或随机分配端口),但你的client-secret中只配置了不带端口的http://localhost和https://localhost,端口不匹配直接触发错误。 - Cloud Terminal环境限制:云端终端运行本地服务器模式时,本地浏览器无法直接访问云端的
localhost端口,这会进一步导致认证流程异常。
具体修复步骤
步骤1:更新Client Secret的重定向URI
在Google Cloud Console的OAuth 2.0客户端配置中,添加以下重定向URI:
http://localhost:8080/(匹配默认端口)urn:ietf:wg:oauth:2.0:oob(适配控制台授权模式)
步骤2:修改代码适配环境
根据Cloud Terminal的特性,推荐两种可行方案:
方案A:指定固定端口匹配配置
修改代码指定固定端口,确保和client-secret中配置的URI完全一致:
auth_flow = flow.InstalledAppFlow.from_client_secrets_file( client_secrets_file=client_secret_json_file_path, scopes=scopes ) # 指定固定端口8080,需确保client-secret已添加http://localhost:8080/ auth_flow.run_local_server(port=8080)
方案B:切换到控制台授权模式
针对云端终端无法直接访问本地端口的情况,改用控制台模式,无需依赖本地服务器:
auth_flow = flow.InstalledAppFlow.from_client_secrets_file( client_secrets_file=client_secret_json_file_path, scopes=scopes ) # 运行后会输出授权URL,手动复制到浏览器打开,获取授权码后粘贴回终端即可完成认证 auth_flow.run_console()
注意:使用此方案必须提前在client-secret中添加urn:ietf:wg:oauth:2.0:oob作为重定向URI。
步骤3:验证配置生效
修改完客户端配置后,务必重新下载最新的client-secret JSON文件替换本地文件,再重新运行代码。
内容的提问来源于stack exchange,提问作者Elad Ben-David
相关产品推荐
相关产品推荐

