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

如何通过个人账号实现googleapiclient的GCP API身份验证?

用个人账号令牌连接GCP API的Python实现

我完全懂这种找不到清晰文档的 frustration——Google官方关于个人账号OAuth认证的内容确实藏得有点深,尤其是和服务账号的流程对比起来。下面我会给你一套简洁的方案,替换掉你当前的服务账号代码,改用个人账号的令牌来访问GCP API。

第一步:准备OAuth客户端凭据

首先你需要在GCP控制台创建一个OAuth客户端ID(桌面应用类型):

  • 登录GCP控制台,进入「API和服务」→「凭据」页面
  • 点击「创建凭据」→选择「OAuth客户端ID」
  • 应用类型选「桌面应用」,随便填个名称,然后点击创建
  • 下载生成的JSON文件(通常叫credentials.json),保存到你的项目目录里

第二步:安装依赖包

确保你安装了必要的Python库:

pip install google-auth-oauthlib google-api-python-client

第三步:替换为个人账号认证的代码

下面是完整的示例代码,替换你原来的服务账号逻辑:

from google_auth_oauthlib.flow import InstalledAppFlow
from googleapiclient.discovery import build
import const

# 定义所需的权限范围,和你原来的保持一致
SCOPES = [const.GCP_SCOPE]

def get_gcp_crm_service():
    # 加载OAuth客户端凭据,启动本地授权流程
    flow = InstalledAppFlow.from_client_secrets_file(
        'credentials.json',  # 这里填你下载的OAuth凭据文件路径
        scopes=SCOPES
    )
    # 第一次运行会弹出浏览器,让你登录个人GCP账号授权
    # 授权成功后会生成token.json,后续运行自动读取,无需重复授权
    credentials = flow.run_local_server(port=0)

    # 构建Cloud Resource Manager服务
    crm_service = build('cloudresourcemanager', 'v1', credentials=credentials)
    return crm_service

# 使用示例
if __name__ == '__main__':
    crm_service = get_gcp_crm_service()
    crm_projects_api = crm_service.projects()
    projects_list = crm_projects_api.list().execute()['projects']
    project_id_list = [p['projectId'] for p in projects_list]
    print(project_id_list)

关键说明

  • 令牌持久化:第一次授权成功后,会在当前目录生成token.json文件,后续运行代码会自动读取这个文件,不用每次都登录授权。
  • 权限验证:确保你的个人GCP账号拥有目标项目的访问权限(比如至少是「项目查看者」角色),否则会返回权限不足的错误。
  • 范围匹配:SCOPES要和你实际需要的API权限对应,你原来用的const.GCP_SCOPE如果是https://www.googleapis.com/auth/cloud-platform(全权限),那完全没问题;如果是更细分的范围,保持一致即可。

和你原有服务账号代码的区别

原来的代码是通过服务账号密钥文件直接获取凭据,而新代码是通过OAuth 2.0授权流程获取个人账号的令牌,更适合个人开发/测试场景,不需要管理服务账号的密钥文件。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 03:48:27