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

如何在Cloud Run中正确加载id_token解决Credentials无该属性报错

问题原因

你本地开发时通过gcloud auth application-default login生成的是用户身份OAuth凭证,refresh后会自动填充id_token字段。但Cloud Run环境下google.auth.default()返回的是Compute Engine默认服务账号凭证,这类凭证仅包含访问令牌(access_token),原生不携带id_token属性,无论怎么refresh都无法获取该字段。

解决方案

直接使用谷歌官方提供的id_token.fetch_id_token方法获取ID令牌,该方法会自动适配本地、Cloud Run、GCE等所有谷歌云运行环境,无需手动处理凭证刷新逻辑。

修正后的完整代码
# 新增依赖导入
from google.oauth2 import id_token
from google.auth.transport.requests import Request
import requests

def ProcessPayload(payload):
    # 替换为你实际请求的目标URL,作为ID令牌的audience(受众)
    TARGET_URL = "你的实际请求地址"
    # 自动适配环境获取ID令牌
    request = Request()
    token = id_token.fetch_id_token(request, TARGET_URL)
    # 发起POST请求
    headers = {'Authorization': f'Bearer {token}'}
    response = requests.post(TARGET_URL, json=payload, headers=headers)
注意事项
  • 需确保你的requirements.txt中包含正确的依赖版本:google-auth>=2.3.0
  • 如果请求的目标是另一个Cloud Run服务,需要为当前Cloud Run的服务账号授予roles/run.invoker权限,否则会返回403错误
  • 如果你需要兼容本地测试环境,只要你已经执行过gcloud auth application-default login,上述代码无需修改即可正常运行

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 19:06:04