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

如何通过Python HTTP请求获取Google OAuth 2.0 Playground授权码

问题原因分析
  • 你对OAuth 2.0授权码流程的核心逻辑理解有误:第一步构造的授权URL不是用来直接发送GET请求获取授权码的,这个地址需要用户在浏览器中打开、完成Google账号登录、同意授权操作后,Google才会将授权码附加在你设置的redirect_uri参数中返回。你直接用requests.get请求该地址得到的是Google登录页面的HTML内容,把这个响应对象当作授权码传入后续请求,自然会触发「Malformed auth code.」报错。
  • 代码中直接把requests.get返回的响应对象赋值给authorization_code,没有提取任何有效参数,传入POST请求的根本不是字符串格式的合法授权码,格式完全不符合Google接口要求。
解决方案

方案1:配合Google OAuth 2.0 Playground快速验证

  • 把你构造的authorization_redirect_url直接复制到浏览器打开,登录你的Google账号并同意授权,之后页面会跳转到OAuth Playground,地址栏中可以看到code=xxx格式的参数,复制=后面的内容就是合法的授权码。
  • 将代码中的authorization_code值替换为你复制的授权码字符串,再运行POST请求即可正常获取access token。

方案2:Python代码自动完成完整授权流程

如果不想手动复制授权码,可以调整逻辑自动捕获回调地址返回的授权码:

  • 先将redirect_uri修改为http://localhost:空闲端口,比如http://localhost:8080,这个地址必须和你在Google Cloud后台创建OAuth凭证时填写的回调地址完全一致。
  • 代码中启动一个简易的本地HTTP服务监听对应端口,用户在浏览器完成授权后,Google会将请求转发到本地服务,直接从请求参数中提取code的值即可。
修正后的核心代码示例
import requests
from flask import Flask, request

app = Flask(__name__)

auth_url = "https://accounts.google.com/o/oauth2/auth"
access_token_url = "https://oauth2.googleapis.com/token"
# 注意必须和Google Cloud后台配置的回调地址完全一致
callback_url = "http://localhost:8080"
client_id = '替换为你的client_id'
client_secret = '替换为你的client_secret'

# 第一步:输出授权地址,提示用户点击完成授权
authorization_redirect_url = f"{auth_url}?response_type=code&client_id={client_id}&redirect_uri={callback_url}&scope=openid&access_type=offline"
print(f"请打开以下地址完成授权:{authorization_redirect_url}")

# 第二步:本地服务监听回调,自动提取授权码换access token
@app.route('/')
def get_auth_code():
    authorization_code = request.args.get('code')
    data = {
        'grant_type': 'authorization_code',
        'code': authorization_code,
        'redirect_uri': callback_url,
        'client_id': client_id,
        'client_secret': client_secret
    }
    access_token_response = requests.post(access_token_url, data=data)
    return access_token_response.json()

if __name__ == '__main__':
    app.run(port=8080, debug=False)
注意事项
  • 授权码是一次性凭证,使用一次后就会失效,不可重复提交。
  • 授权码有效期极短,仅有几分钟,获取后需要尽快发起兑换access token的请求。
  • 所有请求中的redirect_uri参数必须和你申请Client ID时配置的地址完全一致,包括协议、端口、末尾斜杠都不能有差异。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 12:27:00