令牌必须是短期令牌并在合理的时间范围内。

69

我遇到了与此问题相同的错误。在我的情况下,这发生在应用程序尝试通过Google Cloud Client API上传文件时。

POST https://www.googleapis.com/oauth2/v4/token
400 Bad Request
Invalid JWT: Token must be a short-lived token and in a reasonable timeframe
我如何加载令牌是通过读取服务帐户JSON文件,并将其附加到PHP中的CURLOPT_HTTPHEADER。过去一个月它确实正常工作,所以我猜测Google更改了授权方式。是否有人面对并解决了这个问题?

1
我什么也没有做,但问题已经解决了。有人有想法吗? - wataru
1
这是我的答案 在此输入链接描述 - Michael Kisilenko
4
@MichaelMishKisilenko 显然是不同步的内部时钟引起的。感谢您分享! - wataru
这主要是客户端的时间相关问题。我在我的Android模拟器上遇到了这个问题,它的时间设置与时区不符。 - Ronak Poriya
10个回答

129

我在差不多同一时间也遇到了同样的问题,所以我认为这是Google的普通漏洞,但事实上是发生在我的电脑上的:

raise HttpAccessTokenRefreshError(error_msg, status=resp.status)
oauth2client.client.HttpAccessTokenRefreshError: invalid_grant: Invalid JWT: Token must be a short-lived token and in a reasonable timeframe

在我的情况下,这个问题是由计算机时钟的同步不良引起的,执行代码的计算机存在5分钟的延迟(由于内部时钟的故障电池)。当我手动更改了计算机的内部时间到正确的时间时,它又开始正常工作了。

这个解决方案在这里提到过,但没有完整的错误信息。


1
这可能是答案,因为我曾经看到我的服务器时钟有时不同步。非常感谢。 - wataru
4
这似乎是解决方案。具体来说,我正在使用的Docker容器时钟出了问题,尽管我的系统时钟正常。 - plowman
我这里也遇到了完全相同的问题。我的电脑时钟比实际时间慢了5分钟。感谢您的答案。 - Caique Moreira
当我运行单元测试时,我收到了这个错误,然后忘记了我也修补了时间(是的,我有模拟,但我在没有模拟的情况下测试它以检查凭据)。 - dieend
1
这对我解决了问题。我的电脑时钟差了几个小时。重新调整后,错误消失了。 - I Stand With Israel

22

我有相同的问题,后来发现我的服务器延迟了8分钟。我配置了NTP服务器,神奇地问题就解决了。


10
对我来说,只运行ntpdate ntp.ubuntu.com就能解决我的问题,谢谢! - Sergio Gonzalez
这种情况一直发生,我该如何确保服务器时间始终匹配?我一直收到同样的错误... - gustavoanalytics
在我尝试了所有方法之后,我找到了你的答案,它对我起作用了! - Ismail El Moudni

7

对于那些在容器化应用中遇到此错误并进入此处的人,

当我使用来自容器化应用的令牌时,我也遇到了同样的问题。 重新启动Docker Desktop(Windows)这一步解决了我的问题。

在第一次出现问题之前,我已经使用这个设置了几周。


2
是的,我也是。可能是因为我让我的机器休眠了。所以最终会导致Docker混乱。 - Dilushan
1
同样适用于容器化的 .NET Core 应用程序。 - Saeed El Dah

7

遇到同样的问题......手动将电脑时钟调整为当前时间......问题解决。


我在使用Xcode时遇到了该问题,但是经过调整时间后,我的项目成功运行了。 - Zulqarnain Mustafa
这已经被声明了。 - Liam

3

如果你使用vagrant,ssh进入你的虚拟机并运行sudo service ntp stop && sudo ntpd -gq && sudo service ntp


2

当我尝试访问Google Cloud BigQuery API时,遇到了类似的问题。调整系统时钟并允许Windows 10自动设置时间和时区解决了该问题。


这已经被声明过了。 - Liam

2

我在使用Windows子系统Linux(WSL)时遇到了这个问题。我的所有WSL镜像都运行在过去的日期,https://github.com/microsoft/WSL/issues/4245 表明这是一个Windows从睡眠中恢复时的问题。

我通过重新启动WSL来解决这个问题,wsl --shutdown


2

我曾经在这个问题上被卡了数小时。我甚至发布了这个问题。结果发现我忽略了一些显而易见的东西。我的开发服务器是一个Linux虚拟机。我的虚拟机上的时钟比本地系统时钟慢了8天。所以尽管我的本地时钟是正确的,但我忽视了我的虚拟机已经延迟了几天。希望这可以为健忘的人节省一些时间。


1

我遇到了类似的问题,我的工作一直失败,并出现以下错误:

  File "/usr/local/lib/python2.7/site-packages/google/oauth2/_client.py", line 59, in _handle_error_response
    error_details, response_body)
google.auth.exceptions.RefreshError: ('invalid_grant: 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.', u'{\n  "error" : "invalid_grant",\n  "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."\n}')
2018-05-1713:01:01:  API CALL iOS intra day: module failed.

实际根本原因是系统时间与服务器不同步。我已经刷新了ntp服务器,同步了时间,问题已解决。

0

听起来很明显,但请确保过期时间exp在签发时间iat之后。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接