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

Python调用Google API创建Source Repositories出现401错误如何解决?

问题根因

  • 你使用了错误的令牌类型调用API:google.oauth2.id_token.fetch_id_token获取的是ID令牌,仅适用于调用Cloud Functions、Cloud Run等需要身份验证的面向应用的服务,Source Repositories这类GCP资源管理类API需要的是带OAuth权限作用域的访问令牌(Access Token)。
  • API Key仅支持访问公开可访问的资源,创建私有代码仓库属于需身份认证的操作,拼接API Key的方式本身不适用该场景。

修复方案

替换原有令牌获取逻辑,使用google.auth.default获取对应作用域的访问令牌,修复后的代码如下:

import urllib.request
import json
import google.auth
import google.auth.transport.requests

# 替换为实际项目ID和要创建的仓库名
PROJECT_NAME = "你的实际项目ID"
REPO_NAME = "目标仓库名"

body = { "name" : f"projects/{PROJECT_NAME}/repos/{REPO_NAME}"}
jsondata = json.dumps(body).encode("utf8")
req = urllib.request.Request(f'https://sourcerepo.googleapis.com/v1/projects/{PROJECT_NAME}/repos', method='POST')
req.add_header('Content-Type', 'application/json; charset=utf-8')

# 获取带cloud-platform作用域的访问令牌
credentials, project_id = google.auth.default(scopes=['https://www.googleapis.com/auth/cloud-platform'])
auth_req = google.auth.transport.requests.Request()
credentials.refresh(auth_req)
req.add_header("Authorization", f"Bearer {credentials.token}")

response = urllib.request.urlopen(req, jsondata)
print(response.read().decode())

额外排查项

  • 确认你操作的项目已经启用Source Repositories API
  • 确认环境变量GOOGLE_APPLICATION_CREDENTIALS指向的服务账号密钥文件路径正确,无读取权限问题
  • 确认服务账号已在对应项目中被授予Source Repository Administrator权限,权限配置生效存在最多5分钟的延迟,若刚配置可以稍等后重试

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 19:45:02