Google客户端无效的JWT:令牌必须是短期令牌

ajo*_*jon 3 php google-api google-api-php-client

我正在使用Google的php api客户端。我正在浏览服务帐户快速入门指南。据我所知,我完美地遵循了这些步骤。我遇到以下错误:

{
   "error": "invalid_grant",
   "error_description": "Invalid JWT: Token must be a short-lived token (60 minutes) and in a reasonable timeframe. Check your iat and exp values and use a clock with skew to account for clock differences between systems."
}
Run Code Online (Sandbox Code Playgroud)

据我了解,此错误最常见的问题是系统时间是否错误。我已经三重检查了我的时区,日期和时间是否与原子钟同步。我使用php set timezone函数来设置我的时区以匹配我的计算机,但是我继续遇到错误。我正在查看消息的另一部分,其中提到了iat和exp设置,但还没有到位。

有谁对我如何超越这个有任何想法?

小智 19

我在 Windows 上使用 WSL2 时遇到了这个问题 - 有时当笔记本电脑休眠时,WSL 时间会落后于系统时间。

运行sudo hwclock -s以同步。


ll2*_*2ll 8

如果在 Windows 上,请右键单击右下角的日期和时间。单击“调整日期/时间”单击“立即同步”。

在 2020 年为我解决了这个问题。


ajo*_*jon 6

哇!!!最终这真是愚蠢。我正在运行Laravel的家园作为我的开发服务器。我主要假设虚拟机和本地计算机上的时钟将同步。至少在创建时。但是,我花了几个星期没有使用这台机器,所以(我猜)是,这台计算机处于休眠状态时,VM时钟未运行,或者时钟从未同步。无论如何,问题是我的虚拟机时钟比系统时钟晚9天。那就是问题所在。


DaI*_*mTo 5

Invalid_grant错误有两个常见原因。

  1. 您服务器的时钟与NTP不同步。(解决方案:检查服务器时间是否修复错误。)
  2. 已超出刷新令牌限制。(解决方案:您无能为力,他们无法使用更多刷新令牌)。应用程序可以请求多个刷新令牌。例如,这在用户要在多台计算机上安装应用程序的情况下很有用。在这种情况下,需要两个刷新令牌,每个安装令牌一个。当刷新令牌的数量超过限制时,较早的令牌将变为无效。如果应用程序尝试使用无效的刷新令牌,则返回invalid_grant错误响应。每个OAuth 2.0客户端对的唯一限制为25个刷新令牌(请注意,此限制可能会更改)。如果应用程序继续请求同一客户/帐户对的刷新令牌,则一旦发出第26个令牌,先前发出的第一个刷新令牌将变得无效。

  • 难以置信,我很绝望,当我尝试简单地更改我的计算机时间(提前了 5(!) 分钟)时,无法运行的测试开始工作!惊人的! (6认同)