如何通过个人账号实现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
相关产品推荐
相关产品推荐

