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

如何实现用户基于自有谷歌云资源的计费API调用认证?

正确实现方案

1. 保持用户级OAuth授权流程

你之前添加的Scope(比如https://www.googleapis.com/auth/cloud-translation)是正确的,这个Scope本身就是用于获取用户访问自身云资源的权限。继续基于现有OAuth 2.0流程获取用户的access_token和refresh_token,但注意全程不要使用你的应用服务账号密钥,所有操作都基于用户的OAuth令牌。

2. 调用API时必须指定用户的云项目ID

这是你之前出错的核心原因:谷歌云计费类API(包括翻译API)默认会关联请求发起方的云项目(也就是你的应用项目),所以必须在调用时明确指定用户自己的项目ID,才能让费用和资源归属到用户的账号下。

以翻译API为例,正确的调用格式:

  • 在URL中包含用户项目ID:
POST https://translation.googleapis.com/v3/projects/{用户的云项目ID}:translateText
  • 请求头仍携带用户的令牌:Authorization: Bearer {用户的access_token}
  • 其他API(如其他计费类云服务)同理,都需要在请求路径或参数中指定用户的项目ID

3. 引导用户完成前置配置

因为要使用用户自有资源,必须让用户完成以下操作:

  • 创建自己的谷歌云项目
  • 在谷歌云控制台启用目标API(比如Cloud Translation API)
  • 确保用户的谷歌账号对该项目拥有足够权限(比如Editor、Cloud Translation Admin角色)
  • 在你的应用中让用户绑定自己的云项目ID(可存储在用户的账号信息中)

4. 令牌的自动刷新管理

谷歌access_token有效期仅1小时,你需要用OAuth流程中获取的refresh_token,在令牌过期时自动刷新:

POST https://oauth2.googleapis.com/token
Content-Type: application/x-www-form-urlencoded

client_id=你的应用客户端ID&
client_secret=你的应用客户端密钥&
refresh_token=用户的refresh_token&
grant_type=refresh_token

关键误区规避

  • 不要混用应用服务账号和用户OAuth令牌:服务账号代表你的应用操作资源,用户OAuth令牌代表用户操作自身资源,二者完全独立
  • 绝对不能省略用户项目ID:所有计费类云API的调用都必须指定该参数,这是区分资源归属的核心标识

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 20:40:30