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

如何从google.oauth2.Credentials获取GCP AI平台调用所需的Access Token

解决方案

一、获取可用Access Token的方法

你拿到的credentials.token为空是因为Google服务账号凭证对象默认不会主动触发token拉取,需要手动调用refresh方法完成认证,示例代码如下:

from google.oauth2 import service_account
from google.auth.transport.requests import Request

# 加载本地服务账号密钥文件
credentials = service_account.Credentials.from_service_account_file(
    '/path/to/key.json',
    scopes=['https://www.googleapis.com/auth/cloud-platform']
)

# 凭证无效/无token时主动刷新获取
if not credentials.valid or credentials.token is None:
    credentials.refresh(Request())

access_token = credentials.token

注意:Access Token默认有效期为1小时,过期后需要重新调用refresh方法刷新,不要长期缓存同一个token使用。

二、适配异步场景的更优实现方案

因为你使用的是Twisted异步服务,直接调用同步的credentials.refresh()会阻塞事件循环,推荐两种更适配的方案:

  • 方案1:本地部署场景(服务运行在GCP外部)
    单独启一个定时任务,每50分钟(提前于1小时有效期)在独立线程中刷新一次token,存入全局变量,所有异步请求直接读取全局缓存的有效token即可,避免每次请求都刷新、避免阻塞事件循环。
  • 方案2:GCP内部部署场景(服务运行在GCE/GKE/Cloud Run等GCP服务上)
    不需要加载本地服务账号密钥,直接用异步HTTP客户端请求GCP元数据接口获取token,完全异步不阻塞,请求信息如下:
    • 请求地址:http://metadata.google.internal/computeMetadata/v1/instance/service-accounts/default/token
    • 请求Header:Metadata-Flavor: Google
      拿到返回的token后同样可以做定时缓存,不用每次请求都调用元数据接口。

获取token后调用GCP AI Platform预测接口时,只需要在请求头中添加Authorization: Bearer <你的access_token>,请求体和TensorFlow Serving的REST预测格式完全一致即可正常拿到返回结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 00:48:03