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

构建Google认证签名时遭遇无效JWT签名问题

排查JWT签名无效导致Google API调用失败的问题

先确认签名构建是否正确

Google服务账户JWT要求使用RS256(SHA256withRSA)算法,你选的算法是对的,但要检查以下细节:

  • 签名前的待签内容必须是Base64url编码后的header + 点(.) + Base64url编码后的payload的原始字符串,不能包含任何换行、空格或额外字符。
  • 必须使用服务账户JSON密钥文件中private_key字段的完整私钥,确保包含开头的-----BEGIN PRIVATE KEY-----和结尾的-----END PRIVATE KEY-----,私钥的换行格式不能丢失或被篡改。
  • 签名结果必须再做一次Base64url编码(同样要去掉填充符=,替换+为-、/为_),再拼接到待签内容后形成完整JWT。

若签名无误,这些原因也会触发该错误

  • 声明集(payload)字段错误:
    • iss必须严格等于服务账户的邮箱(JSON密钥里的client_email),不能拼写错误。
    • aud固定为https://oauth2.googleapis.com/token,不能填成API的端点地址。
    • scope必须是目标API的有效授权范围,多个范围用空格分隔,比如调用Sheets API要填https://www.googleapis.com/auth/spreadsheets.readonly,范围错误或遗漏会导致验证失败。
    • exp(过期时间)必须是当前UTC时间+3600秒以内的Unix时间戳(秒级,不是毫秒),超过1小时或时间戳格式错误都会触发报错。
    • iat(签发时间)必须是当前UTC时间前后5分钟内的Unix时间戳,时间偏差过大也会被判定为无效。
  • Base64url编码不规范:
    • header和payload的JSON必须先转成UTF-8字节流再编码,不能直接对字符串做编码(部分语言默认编码非UTF-8会出问题)。
    • 编码后必须严格移除所有=填充字符,同时替换+为-、/为_,任何不符合规范的编码都会导致签名验证失败。
  • 系统时间偏差:如果你的服务器本地时间与UTC标准时间偏差超过5分钟,Google会认为JWT的时间戳不合法,进而返回签名无效的错误。
  • 私钥不匹配:确保使用的私钥与Google Cloud控制台中创建的目标服务账户完全对应,不能混用其他服务账户的私钥,也不能用公钥进行签名操作。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 00:15:45