Google Analytics Reporting API JWT认证失败排查求助
排查Google Analytics Reporting API JWT签名无效问题
核心排查方向
- 私钥格式必须严格合规:
保持带-----BEGIN PRIVATE KEY-----和-----END PRIVATE KEY-----的完整格式,每64个字符换行,末尾的=填充符不能丢,不能随便去掉换行或首尾标记。 - JWT构建流程不能错:
- 先对Header和Payload分别做URL安全的Base64编码(替换
+为-、/为_,去掉末尾=) - 用
.拼接编码后的Header与Payload,得到待签名字符串 - 用私钥以RS256算法对该字符串签名,再对签名结果做同样的URL安全Base64编码
- 最后用
.拼接三部分得到完整JWT,少任何一步都会导致签名无效
- 先对Header和Payload分别做URL安全的Base64编码(替换
- 时间戳参数要准确:
iat和exp必须是整数型UTC时间戳,exp需比iat大,但不能超过iat + 3600(Google限制JWT有效期最多1小时) - Kid字段必须匹配:
确认Header里的kid和服务账号JSON中的private_key_id完全一致,大小写敏感
验证技巧
用Python快速生成正确JWT做对比,找出差异:
import jwt import time from google.oauth2 import service_account # 加载你的服务账号JSON文件 credentials = service_account.Credentials.from_service_account_file( 'your-service-account.json', scopes=['https://www.googleapis.com/auth/analytics.readonly'] ) # 生成标准JWT valid_jwt = credentials._make_authorization_grant_assertion() print(valid_jwt)
把这个JWT放到jwt.io里解析,和你手动构建的内容逐段对比,就能快速定位哪里错了。
后续API调用步骤
拿到有效JWT后,先请求获取access_token:
curl -X POST https://oauth2.googleapis.com/token \ -d "grant_type=urn:ietf:params:oauth:grant-type:jwt-bearer" \ -d "assertion=<你的完整JWT>"
拿到access_token后,调用reports:batchGet时在请求头添加Authorization: Bearer <access_token>即可。
内容的提问来源于stack exchange,提问作者Vikas J
相关产品推荐
相关产品推荐

