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

如何在NodeJS中不使用Google SDK获取Google服务账号的Bearer Token

实现方案:手动完成谷歌服务账号JWT授权流程

不需要依赖Google官方SDK,你可以直接按服务账号OAuth 2.0标准流程生成并交换JWT拿到Bearer Token,整个流程只需要通用的JWT库和HTTP客户端即可完成,不需要做URL到服务SDK的映射。

前置依赖

仅需要引入2个通用能力,无需谷歌相关SDK:

  • 任意语言的JWT签名库(支持RS256算法即可)
  • 通用HTTP POST客户端

具体实现步骤

步骤1:构造JWT头

固定格式如下,仅需替换密钥对应字段:

{
  "alg": "RS256",
  "typ": "JWT",
  "kid": "服务账号密钥中的private_key_id值"
}

步骤2:构造JWT负载

负载字段取值规则如下:

字段取值说明
iss直接填服务账号密钥中的client_email值
scope可直接填https://www.googleapis.com/auth/cloud-platform(全量云服务权限,无需绑定具体服务,也可根据调用的API缩小权限范围)
aud固定填https://oauth2.googleapis.com/token
exp过期时间,取当前Unix时间戳+3600(最长有效期1小时)
iat当前Unix时间戳

示例负载:

{
  "iss": "sa@sa12345-12345.iam.gserviceaccount.com",
  "scope": "https://www.googleapis.com/auth/cloud-platform",
  "aud": "https://oauth2.googleapis.com/token",
  "exp": 1710000000,
  "iat": 1709996400
}

步骤3:签名生成JWT字符串

用服务账号密钥中的private_key值作为签名密钥,用RS256算法对上述头和负载进行签名,得到完整的JWT字符串(格式为[base64编码的头].[base64编码的负载].[签名串])。

步骤4:向谷歌OAuth接口交换Bearer Token

发送POST请求到https://oauth2.googleapis.com/token,请求头Content-Type设为application/x-www-form-urlencoded,请求体携带以下参数:

  • grant_type:固定值urn:ietf:params:oauth:grant-type:jwt-bearer
  • assertion:填上一步生成的完整JWT字符串

示例curl请求:

curl --request POST \
  --url https://oauth2.googleapis.com/token \
  --header 'Content-Type: application/x-www-form-urlencoded' \
  --data 'grant_type=urn%3Aietf%3Aparams%3Aoauth%3Agrant-type%3Ajwt-bearer&assertion=你的JWT字符串'

接口返回内容中的access_token字段就是你需要的Authorization Bearer Token,有效期1小时,过期后重复上述流程重新生成即可。

使用说明

拿到Token后,直接在调用目标REST API的请求头中添加Authorization: Bearer 你的access_token即可,只要scope权限足够就可以正常调用任意谷歌云服务API,完全不需要做URL到SDK的映射。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 23:51:00