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

时间:2018-01-02 06:17:57

标签: php google-api google-api-php-client

我正在使用Google's php api client。我正在使用quickstart guide服务帐户。我完美地遵循了这些步骤(据我所知)。我遇到了以下错误:

{
   "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."
}

据我所知,此错误最常见的问题是系统时间是否错误。我已经三次检查我的时区,日期和时间与原子钟同步。我使用php set timezone函数来设置我的时区以匹配我的电脑,但我继续得到错误。我正在研究消息的另一部分,它提到了iat和exp设置,还没有到达任何地方。

有没有人对如何克服这个问题有任何想法?

9 个答案:

答案 0 :(得分:4)

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

在2020年为我解决了此问题。

答案 1 :(得分:3)

Invalid_grant错误有两个常见原因。

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

答案 2 :(得分:3)

WOW !!!这最终变得非常愚蠢。我正在运行Laravel的宅基地作为我的开发服务器。我主要假设我的VM和本地机器上的时钟将被同步。至少在创作时。但是,我花了几个星期没有使用这台机器,所以(我猜),当这台计算机处于休眠状态时,VM时钟没有运行,或者时钟从未同步。无论如何,问题是我的vm时钟比我的系统时钟晚了大约9天。这导致了这个问题。

答案 3 :(得分:0)

我找到了到服务器的单独更改时区。

date
Output:
Wed Apr 26 17:44:38 UTC 2017 

然后

timedatectl list-timezones
sudo timedatectl set-timezone America/New_York
Output:
Wed Apr 26 13:55:45 EDT 2017

答案 4 :(得分:0)

如果您在本地运行,请检查计算机的时区,对我来说这是个问题,在这种情况下,最好的解决方案是将其设置为自动

答案 5 :(得分:0)

检查一次系统时间。由于Windows无法更新最新的时区,因此可能发生双重引导。只需在设置中再次刷新它,然后查看魔术。

不知道为什么要依赖,但这就是事实!

答案 6 :(得分:0)

对于我来说,我只需要重启机器即可。 (针对流浪VM的问题)。它又在工作。

答案 7 :(得分:0)

在linux中,我通过选择自动日期和时间选项来解决此问题。

答案 8 :(得分:0)

在 MacOs Catalina (10.15.7) 中,我通过选择自动日期和时间选项解决了这个问题。