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

获取第三方网站的Google OAuth访问令牌遇到问题求助

核心问题纠正与解决方案

你搞反了OAuth的角色逻辑

你现在写的代码是用来获取Google自身服务的访问令牌,和第三方网站完全无关。你要的不是“用Google OAuth拿第三方网站的令牌”,而是通过Google身份认证,让第三方网站给你发它的令牌——Google在这里只是个「身份验证工具」,第三方网站才是真正给你发权限令牌的主体。

正确的流程是什么

当你点击第三方网站的“用Google登录”时,完整流程是:

  • 第三方网站生成授权请求URL,跳转到Google的登录页面(这里的scope会包含两部分:Google的身份scope,比如openid/email;第三方网站自己的API权限scope)
  • 你登录并授权后,Google把授权码返回给第三方网站的后端
  • 第三方网站拿着授权码去Google验证你的身份合法性,确认后,由第三方网站给你颁发它自己的访问令牌

关于你遇到的scope警告

你看到的Warning: Scope has changed from "email" to "https://www.googleapis.com/auth/userinfo.email openid"是正常行为:

  • email是OpenID Connect的简写scope,Google会自动将其映射为标准的完整URL形式
  • 这个scope的作用只是让Google返回你的邮箱信息,供第三方网站验证身份,和第三方网站的API权限没有关系

如何模拟获取第三方网站的令牌

放弃google_auth_oauthlib,这个库只对接Google服务。用通用HTTP请求库(比如Python的requests)或通用OAuth库(requests-oauthlib)来模拟流程:

  1. 先找第三方网站的开发者文档,获取它的:
    • 授权端点URL
    • Token端点URL
    • 它定义的API权限scope(比如read:user、write:posts这类)
  2. 构造授权请求,跳转到Google认证页面(请求参数里要包含第三方网站的client_id、scope、redirect_uri,以及Google的身份scope)
  3. 手动或自动获取Google返回的授权码
  4. 把授权码发给第三方网站的Token端点,换取它的访问令牌

快速补一下OAuth基础

  • OAuth2:核心是「你(资源所有者)允许第三方应用(客户端)访问你的数据(资源服务器)」,第三方应用拿到的令牌是资源服务器发的
  • OpenID Connect:基于OAuth2的身份认证协议,用来确认「你是谁」,Google在这里就是OpenID身份提供者
  • Scope分类:
    • 身份提供者的scope:比如Google的openid/email,用来获取你的身份信息
    • 资源服务器的scope:第三方网站定义的,用来控制你能访问它的哪些API

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 00:33:17