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

如何用Ruby生成无Scope的GCP Bearer Token(类gcloud命令)

Ruby生成等效gcloud默认应用凭证Token的方法

要实现和gcloud auth application-default print-access-token完全等效的Bearer Token生成效果,你可以参考以下两种方法,无需手动指定自定义scope:

方法一:指定默认Cloud Platform范围

gcloud命令生成的默认Token实际上隐含了https://www.googleapis.com/auth/cloud-platform这个通用权限范围,覆盖绝大多数GCP服务的访问需求。你可以直接在Ruby代码中指定这个scope,代码如下:

require 'googleauth'

# 引入默认的Cloud Platform通用范围
default_scope = ['https://www.googleapis.com/auth/cloud-platform']
authorizer = Google::Auth::ServiceAccountCredentials.make_creds(
  json_key_io: File.open('sa.json'),
  scope: default_scope
)
token = authorizer.fetch_access_token!
# 输出Token
puts token['access_token']

方法二:自动加载应用默认凭证

如果你不想手动指定服务账号文件,还可以利用googleauth库的应用默认凭证机制,和gcloud的行为完全一致——它会自动查找环境变量、本地gcloud生成的凭证文件等,无需显式传入sa.json:

require 'googleauth'

# 自动加载默认凭证,同时指定通用scope
authorizer = Google::Auth.get_application_default(['https://www.googleapis.com/auth/cloud-platform'])
token = authorizer.fetch_access_token!
puts token['access_token']

特殊场景:生成无特定scope的Token

如果确实需要生成不带任何scope的Token(注意:绝大多数GCP服务不接受这种Token),可以手动构造并签名JWT,再请求Token接口,示例代码如下:

require 'jwt'
require 'json'
require 'time'
require 'net/http'
require 'uri'

# 读取服务账号文件
sa_data = JSON.parse(File.read('sa.json'))
private_key = OpenSSL::PKey::RSA.new(sa_data['private_key'])

# 构造JWT payload
payload = {
  iss: sa_data['client_email'],
  aud: 'https://oauth2.googleapis.com/token',
  exp: Time.now.to_i + 3600, # 有效期1小时
  iat: Time.now.to_i,
  sub: sa_data['client_email']
}

# 签名生成JWT
jwt = JWT.encode(payload, private_key, 'RS256')

# 请求Google Token接口获取无scope的Token
uri = URI('https://oauth2.googleapis.com/token')
params = {
  grant_type: 'urn:ietf:params:oauth:grant-type:jwt-bearer',
  assertion: jwt
}

response = Net::HTTP.post_form(uri, params)
token_data = JSON.parse(response.body)
puts token_data['access_token']

内容的提问来源于stack exchange,提问作者v-so14

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 12:20:30