调用Gmail API出现Google OAuth 2.0 redirect_uri_mismatch错误如何解决
错误原因
- 客户端类型与授权流程不匹配:你在Google Cloud控制台创建的是Web应用类型的OAuth 2.0客户端ID,但代码中使用的
InstalledAppFlow是专为桌面端、移动端这类本地安装类应用设计的授权流程,二者规则不兼容。 - 回调地址校验不通过:
InstalledAppFlow.run_local_server()默认会启动本地临时服务,实际回调地址为http://localhost:<端口号>/,你在Web应用客户端中配置的redirect_uri和这个实际回调地址不完全一致,触发Google OAuth 2.0校验规则报错。
解决方法
- 方案一(推荐,适配快速入门代码):
进入Google Cloud控制台的「API和服务→凭据」页面,删除原有Web应用类型的OAuth客户端,重新创建桌面应用类型的OAuth 2.0客户端ID,下载新的凭据文件替换本地的creds.json。操作完成后删除本地已生成的token.json文件,重新运行代码即可正常走授权流程。 - 方案二(保留Web应用类型客户端):
如果你确实需要使用Web应用类型的客户端,需要做两处调整:- 将代码中的
InstalledAppFlow替换为适用于Web服务的Flow类,显式指定和控制台配置完全一致的redirect_uri,示例调整如下:
from google_auth_oauthlib.flow import Flow SCOPES = ['https://www.googleapis.com/auth/gmail.readonly'] # 替换为你自己的redirect_uri,需要和控制台配置完全一致 REDIRECT_URI = 'http://localhost:8080/' flow = Flow.from_client_secrets_file( 'creds.json', scopes=SCOPES, redirect_uri=REDIRECT_URI ) # 生成授权链接 auth_url, state = flow.authorization_url( access_type='offline', include_granted_scopes='true' ) # 后续处理回调逻辑可根据业务需求实现- 进入Google Cloud控制台的Web应用客户端配置页面,将你代码中使用的redirect_uri完整添加到「已授权的重定向URI」列表中,确保协议、域名、端口、路径甚至末尾的斜杠都完全一致。
- 将代码中的
- 方案三(临时调试用):
如果你不想修改客户端类型,可在代码中指定固定端口,同时将对应地址添加到Web应用的redirect_uri列表中:- 修改代码中run_local_server的参数,指定固定端口:
creds = flow.run_local_server(port=8080) - 进入Web应用客户端配置页面,添加
http://localhost:8080/到已授权的重定向URI列表,保存后等待2分钟生效,删除旧的token.json后重新运行代码即可。
- 修改代码中run_local_server的参数,指定固定端口:
内容的提问来源于stack exchange,提问作者test manisha
相关产品推荐
相关产品推荐

