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
相关产品推荐
相关产品推荐

