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

Google OAuth redirect_uri不匹配求助:Python应用同步Gmail附件到Drive

解决OAuth redirect_uri_mismatch错误的方案

核心问题原因

你使用的是Web应用类型的OAuth客户端ID,但代码默认调用了适配桌面/本地应用的授权流程(自动生成localhost回调地址),和你配置的域名URI不匹配,从而触发错误。

具体解决步骤

1. 替换授权流程,显式指定redirect_uri

不要用InstalledAppFlow(这是给本地应用设计的,会自动生成localhost地址),改用适配Web应用的Flow类,手动指定你配置的回调URI:

from google_auth_oauthlib.flow import Flow

# 初始化Flow时明确指定redirect_uri
flow = Flow.from_client_secrets_file(
    'credentials.json',
    scopes=['https://www.googleapis.com/auth/gmail.readonly', 'https://www.googleapis.com/auth/drive.file'],
    redirect_uri='https://你的域名.com/回调路径'
)

# 生成授权URL
authorization_url, state = flow.authorization_url(
    access_type='offline',
    include_granted_scopes='true'
)
print(f"请访问此链接授权:{authorization_url}")

2. 确保credentials.json格式正确

检查你的credentials.json是web类型配置,且redirect_uris数组包含你在控制台设置的完整URI:

{
  "web": {
    "client_id": "你的客户端ID",
    "client_secret": "你的客户端密钥",
    "redirect_uris": ["https://你的域名.com/回调路径"],
    "auth_uri": "https://accounts.google.com/o/oauth2/auth",
    "token_uri": "https://oauth2.googleapis.com/token"
  }
}

3. 搭建回调服务接收授权码

Web应用需要自己搭建HTTP服务处理Google的回调请求,获取授权码后交换令牌。比如用Flask写一个简单的回调接口:

from flask import Flask, request
from google_auth_oauthlib.flow import Flow

app = Flask(__name__)

@app.route('/回调路径')
def oauth_callback():
    # 初始化Flow时参数要和生成授权URL时一致
    flow = Flow.from_client_secrets_file(
        'credentials.json',
        scopes=['https://www.googleapis.com/auth/gmail.readonly', 'https://www.googleapis.com/auth/drive.file'],
        redirect_uri='https://你的域名.com/回调路径'
    )
    # 用回调中的code交换令牌
    flow.fetch_token(code=request.args.get('code'))
    credentials = flow.credentials
    
    # 保存令牌到文件,供后续同步代码使用
    with open('token.json', 'w') as f:
        f.write(credentials.to_json())
    
    return "授权完成,可关闭此页面"

if __name__ == '__main__':
    # 注意:生产环境必须用HTTPS,本地测试可临时用HTTP但需在控制台添加对应localhost URI
    app.run(host='0.0.0.0', port=443, ssl_context=('你的证书.pem', '你的密钥.pem'))

4. 验证控制台配置一致性

再次检查Google Cloud控制台中,Web应用类型OAuth客户端ID的授权重定向URI,必须和credentials.json、代码中指定的URI完全一致(包括HTTPS/HTTP、路径、末尾是否带斜杠等细节)。

内容的提问来源于stack exchange,提问作者RedChair

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 05:29:50