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

如何开发基于用户凭证的多用户Google Cloud账单数据查询应用

搞定Google Cloud多用户账单应用的第一步:先把认证逻辑走对

兄弟,首先得给你提个关键醒:绝对不要自己做登录表单收集用户的Google用户名和密码——这既违反Google的服务条款,又会让用户对你的应用完全不信任,毕竟没人愿意把账号密码交给第三方。Google早就给这类场景准备好了标准方案:用OAuth 2.0授权框架,让用户通过官方渠道安全授权你的应用访问他们的账单数据。

下面是你第一步必须落地的核心步骤,帮你把卡住的地方打通:

1. 先在Google Cloud Console配置OAuth客户端

  • 登录你自己的Google Cloud项目,进入「API和服务」→「凭据」页面
  • 点击创建「OAuth 2.0 客户端ID」,选择对应你的应用类型(比如Web应用选Web类型,桌面应用选桌面类型)
  • 配置授权重定向URI(Web应用必填,桌面应用可以用Google提供的默认回调地址)
  • 把生成的客户端ID和密钥妥善保存,后面写代码会用到

2. 实现OAuth 2.0授权流程(这才是正确的“登录窗口”)

你不需要自己做登录框,直接引导用户走Google的官方授权流程:

  • 你的应用跳转到Google的授权URL,务必请求cloud-billing.readonly权限(这是获取账单数据的最小必要权限,别多请求无关权限,用户更容易同意授权)
  • 用户在Google官方页面登录自己的账号,确认并同意授权你的应用访问账单数据
  • Google会将用户重定向回你的应用,同时返回一个授权码
  • 你的应用拿着这个授权码,加上之前的客户端ID/密钥,向Google请求访问令牌和刷新令牌

3. 用令牌调用Cloud Billing API获取数据

拿到有效访问令牌后,就可以调用API拉取用户的账单数据了:

  • 先确保你的Google Cloud项目已经启用了「Cloud Billing API」(在API库搜索就能开启)
  • 给你个Python的简单示例,大概是这么调用的:
import google.auth
from googleapiclient.discovery import build

# 这里的凭据是通过OAuth流程拿到的用户授权凭据
credentials, _ = google.auth.default(scopes=['https://www.googleapis.com/auth/cloud-billing.readonly'])
billing_service = build('cloudbilling', 'v1', credentials=credentials)

# 获取用户的所有账单账号
billing_accounts = billing_service.billingAccounts().list().execute()
for account in billing_accounts.get('billingAccounts', []):
    print(f"账单账号ID: {account['name']}, 显示名称: {account['displayName']}")

# 如果需要更详细的费用明细,还得结合Cost Management API或者Billing Reports API

4. 多用户支持的核心:安全存储刷新令牌

  • 每个用户授权后,你会拿到一个有效期很长的刷新令牌,一定要加密后存储在你的数据库中
  • 用户下次访问时,用这个刷新令牌就能换取新的访问令牌,无需用户再次授权
  • 注意:刷新令牌可能会失效(比如用户取消了对你应用的授权、修改了账号密码),所以要提前处理这种情况,引导用户重新完成授权

最后再强调几个关键点

  • 权限最小化:只请求cloud-billing.readonly权限,别贪多要其他权限,用户更愿意信任权限清晰的应用
  • 合规性:一定要明确告知用户你会用他们的账单数据做什么,严格符合Google的OAuth政策
  • 错误处理:授权失败、令牌失效、API调用报错这些情况都要考虑到,给用户友好的提示,别让用户一脸懵

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 09:35:40