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

如何通过服务账号JSON生成Google Business API调用所需的Access Token?

解决服务账号生成Google Business API Access Token的问题

我完全理解你的困惑——拿着服务账号的JSON文件,本以为调用generateAccessToken接口就能直接生成token,结果却碰到了认证错误。其实这个错误逻辑是通顺的:调用iamcredentials.googleapis.com的接口本身也需要身份认证,你得先通过服务账号的私钥完成身份校验,才能请求生成针对Google Business API的access token。

下面给你两种可行的解决方案,优先推荐官方客户端库的方式,它能帮你省去手动处理加密、签名的繁琐细节:

方法一:使用Google官方客户端库(推荐)

以Python为例,借助google-auth系列库可以轻松搞定整个流程:

  1. 先安装依赖包:
pip install google-auth google-auth-httplib2
  1. 编写代码加载服务账号并生成token:
from google.oauth2 import service_account
import google.auth.transport.requests

# 替换为你的服务账号JSON文件路径
SERVICE_ACCOUNT_PATH = "/path/to/your/service-account.json"
# Google Business API所需的权限范围
API_SCOPES = ["https://www.googleapis.com/auth/business.manage"]

# 加载服务账号凭证
credentials = service_account.Credentials.from_service_account_file(
    SERVICE_ACCOUNT_PATH, scopes=API_SCOPES
)

# 刷新/获取有效access token(首次调用会自动生成)
request = google.auth.transport.requests.Request()
credentials.refresh(request)

# 拿到可用的access token
access_token = credentials.token
print(f"生成的Access Token: {access_token}")

这个方法会自动处理JWT签名、向Google认证服务器请求token的全流程,你不用手动调用iamcredentials接口,直接就能拿到符合需求的access token。

方法二:手动生成JWT并换取Access Token

如果你不想依赖客户端库,可以手动完成以下步骤:

  1. 提取服务账号关键信息:从JSON文件中获取private_key、client_email、token_uri(默认是https://oauth2.googleapis.com/token)。

  2. 构造JWT内容:

    • 头部(Header):指定加密算法和类型:
      {"alg": "RS256", "typ": "JWT"}
      
    • 载荷(Payload):必须包含以下字段:
      • iss:服务账号的client_email
      • scope:权限范围,填https://www.googleapis.com/auth/business.manage
      • aud:token接收地址,即https://oauth2.googleapis.com/token
      • exp:过期时间戳(当前时间+3600秒,最长不超过3600秒)
      • iat:签发时间戳(当前时间)
  3. 用私钥签名JWT:将Header和Payload分别做Base64URL编码后拼接,再用服务账号的private_key以RS256算法签名,得到完整的JWT字符串。

  4. 请求Access Token:向https://oauth2.googleapis.com/token发送POST请求,参数如下:

    • grant_type:固定值urn:ietf:params:oauth:grant-type:jwt-bearer
    • assertion:你生成的签名后的JWT

curl示例:

curl -X POST https://oauth2.googleapis.com/token \
  -H "Content-Type: application/x-www-form-urlencoded" \
  -d "grant_type=urn:ietf:params:oauth:grant-type:jwt-bearer&assertion=YOUR_SIGNED_JWT_STRING"

成功响应会返回包含access_token的JSON数据。

关键注意事项

  • 服务账号授权:必须把服务账号的邮箱添加到对应的Google Business账号中,授予它管理员权限或至少拥有评论管理的权限。否则就算拿到token,调用Reviews接口时会返回权限不足的错误。
  • 权限范围校验:确保请求的scope是https://www.googleapis.com/auth/business.manage,这个权限足够访问Reviews接口。

内容的提问来源于stack exchange,提问作者Carlos Pérez

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 05:01:40