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

使用Google PHP API Client服务账号时遇Invalid JWT错误求助

解决Google PHP API Client服务账号"invalid_grant"(JWT时间错误)的排查思路

我来帮你梳理几个容易被忽略的排查方向,毕竟除了系统时间,这个错误还有不少潜在诱因:

  • 检查是否手动干预了JWT时间参数
    Google PHP Client默认会自动生成符合要求的iat(签发时间)和exp(过期时间),但如果你在代码里手动设置过这两个参数,或者直接自定义了assertion(JWT字符串),一定要确保:

    • iat是当前正确的Unix时间戳(用time()函数获取,不要依赖其他可能不准的时间来源)
    • exp必须是iat + 3600秒以内(最多60分钟),不能超出这个范围
  • 验证PHP时间函数的准确性
    即使你设置了date_default_timezone_set(),也得确认PHP实际使用的时间是否正确:

    1. 在代码里添加echo time();,输出当前Unix时间戳
    2. 对比原子钟的在线Unix时间,看两者是否一致
    3. 同时检查php.ini里的date.timezone配置,确保没有被其他脚本或配置覆盖
  • 重新获取服务账号密钥文件
    有时候密钥文件的格式错误(比如private_key复制不完整、多余换行/空格),会导致生成的JWT无效,进而触发时间相关的错误提示。建议重新登录Google Cloud Console,下载最新的服务账号JSON密钥文件,替换现有文件后再测试。

  • 更新Google API Client到最新版本
    旧版本的客户端可能存在时间处理的bug(比如时区计算错误),用Composer执行更新命令:

    composer update google/apiclient
    

    更新完成后再尝试发起请求。

  • 检查NTP同步与服务器时钟状态
    即使你认为时间已经同步,也可以再确认服务器的NTP状态:

    • Linux服务器执行:ntpq -p,查看同步的NTP服务器和时间偏移
    • Windows服务器执行:w32tm /query /status,检查同步状态
      如果服务器时钟有微小偏移(比如超过1分钟),可能会触发Google的时间校验逻辑,需要重新校正时钟。
  • 排查缓存导致的过期token问题
    如果你的代码里缓存了access token,可能存在缓存的token已经过期或时间异常的情况。可以临时禁用缓存,让客户端每次都生成新的token,看是否还会报错。

  • 手动解码JWT验证时间参数
    你可以在代码里打印出生成的JWT字符串,用JWT解码工具检查iat和exp的实际值:

    $client = new Google_Client();
    // 你的服务账号配置代码...
    // 获取生成的JWT
    $assertion = $client->getAssertion();
    // 打印到日志或输出
    error_log($assertion);
    

    解码后确认:

    • iat和exp的时间是否与当前实际时间匹配
    • exp - iat是否在3600秒以内

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 06:55:29