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

无需客户端ID,Chrome扩展如何认证调用Google Cloud API获取项目名称?

问题

我开发了一款Chrome扩展,用来给Google Cloud Console页面里的项目编号(格式如123456789012)添加tooltip,显示对应的项目名称。目前采用类似Chrome官方OAuth集成的方案,替换成launchWebAuthFlow以兼容Microsoft Edge,但这套方案需要配置OAuth客户端ID,分享给其他用户时遇到两个棘手问题:

  • 用我个人Google Cloud项目的客户端ID:用户登录会占用我的令牌授予速率配额,而且用户必须信任我的应用,这不符合我的预期。
  • 让每位用户自行创建应用/客户端ID并修改扩展清单:使用门槛太高,普通用户很难操作。

既然用户已经登录Google Cloud Console,我认为应该可以利用浏览器中已有的Cookie进行认证,但逆向分析发现页面请求用的是Authorization:SAPISIDHASH头,相关资料只有10多年前的Stack Overflow内容,没找到可行的实现方案。想问有没有无需维护OAuth客户端ID的替代方法,比如利用现有Cookie或其他方式拉取项目编号与名称的对应关系?

解决方案

1. 复用Google Cloud Console页面已加载的项目数据

Google Cloud Console作为单页应用,本身会在页面加载或交互时拉取项目信息,你可以直接从页面中提取这些数据:

  • 监听页面的fetch/XHR请求,捕获Cloud Resource Manager API的请求(比如projects.list或projects.get接口),从返回结果中提取项目编号与名称的映射关系。
  • 检查页面全局变量,很多SPA会将项目数据存在内存中,通过Content Script注入代码访问页面上下文的变量,直接获取已加载的项目列表。

2. 拦截并复用页面的认证头

既然页面请求使用SAPISIDHASH认证,你可以通过扩展拦截页面的请求,提取有效认证头后复用:

  • 在扩展清单中声明declarativeNetRequest和对应Google Cloud域名的host_permissions,配置规则拦截页面的API请求,提取Authorization:SAPISIDHASH头信息。
  • 用这个认证头直接调用Cloud Resource Manager API获取项目名称,由于请求的域名和原页面一致,不会有跨域问题,也无需额外OAuth配置。

3. 借助Google Cloud SDK本地认证(面向技术用户)

如果用户安装了gcloud SDK,可引导他们启用本地代理,扩展通过本地接口获取认证令牌:

  • 让用户运行gcloud auth application-default login生成本地凭据,然后启动gcloud本地代理(默认端口8085)。你的扩展直接调用本地代理接口获取临时令牌,用这个令牌调用API,全程无需你维护客户端ID,认证完全在用户本地完成。

4. 解析页面DOM中的项目名称

很多Google Cloud Console页面会在DOM中显示项目名称,你可以通过DOM选择器提取并关联项目编号:

  • 比如页面顶部的项目选择器、侧边栏的项目列表里都有项目名称,你可以定位这些元素,结合页面中的项目编号上下文(比如当前页面所属项目、列表中的项目项)建立编号与名称的映射。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 19:03:16