代币必须是短暂的代币并且在合理的时间范围内
Posted
技术标签:
【中文标题】代币必须是短暂的代币并且在合理的时间范围内【英文标题】:Token must be a short-lived token and in a reasonable timeframe 【发布时间】:2016-07-11 10:03:49 【问题描述】:我遇到了与this 相同的错误。 在我的情况下,当应用程序尝试通过 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
。过去一个月确实运行正常,所以我猜是谷歌改变了授权方式。
有人遇到并解决了这个问题吗?
【问题讨论】:
我什么都没做,但它已经解决了。有人有想法吗? 这是我的答案enter link description here @MichaelMishKisilenko 显然是内部时钟不同步的原因。感谢您分享您的! 这主要是您客户端上的时间相关问题。我在我的 android 模拟器上遇到了这个问题。它的时间按照时区设置不正确。 【参考方案1】:我几乎在同一时间偶然发现了同样的问题,所以我预计 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 分钟(由于内部时钟的电池故障)。当我手动将计算机的内部时间更改为正确的时间时,它又开始工作了。
here 提到了此解决方案,但没有完整的错误消息
【讨论】:
这可能是答案,因为我看到我的服务器的时钟有时不同步。我很感激 这似乎是解决方案。具体来说,即使我的系统时钟正常,我使用的 Docker 容器的时钟也会中断。 这里有完全相同的问题。我的电脑时钟有 5 分钟不同步。感谢您的回答 我在运行单元测试时收到此消息,但忘记了我也修补了时间(是的,我有模拟,但我在没有模拟的情况下测试它以检查凭据) 这为我解决了。我的电脑时钟关闭了几个小时。重新调整它,错误消失了。【参考方案2】:我遇到了同样的问题,我发现我的服务器延迟了 8 分钟。我配置了NTP服务器,神奇地解决了
【讨论】:
刚刚运行ntpdate ntp.ubuntu.com
为我工作,谢谢!
所以这种情况一直在发生,如何确保服务器时间始终匹配?我不断收到同样的错误......
在我尝试了一切之后,我找到了你的答案,它对我有用!【参考方案3】:
对于那些在容器化应用程序中遇到该错误并最终出现在这里的人,
我在使用容器化应用程序中的令牌时遇到了同样的问题。重新启动 Docker Desktop (Windows) 为我做了。
在第一次遇到这个问题之前,我已经设置了几周。
【讨论】:
是的。我也是。可能是因为我正在休眠我的机器。所以它最终使码头工人感到困惑 这里与容器化的 .net 核心应用程序相同。【参考方案4】:遇到同样的问题....手动将我的计算机时钟重置为当前时间....问题已解决。
【讨论】:
我在使用 Xcode 时遇到了这个问题,但在重置时间后,我的项目运行成功。 这里有already been stated【参考方案5】:我被这件事难住了好几个小时。我什至发布了this question。事实证明,我忽略了一些应该有些明显的事情。我的开发服务器是 Linux 虚拟机。我的 VM 上的时钟比我的本地系统时钟晚 8 天。因此,虽然我的本地时钟是正确的,但我忽略了我的虚拟机延迟了几天的事实。希望这可以为心不在焉的人节省一些时间。
【讨论】:
【参考方案6】:对于那些使用 vagrant,SSH 进入你的盒子并运行sudo service ntp stop && sudo ntpd -gq && sudo service ntp
【讨论】:
【参考方案7】:我在尝试访问谷歌云大查询 API 时遇到了类似的问题。调整我的系统时钟并允许 windows 10 自动设置时间和时区解决了这个问题。
【讨论】:
这里有already been stated【参考方案8】:我遇到了类似的问题,我的工作一直失败并出现以下错误:
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服务器,问题解决了。
【讨论】:
【参考方案9】:我在使用适用于 Linux 的 Windows 子系统 (WSL) 时遇到了这个问题。我所有的 WSL 图像都以过去设置的日期运行,https://github.com/microsoft/WSL/issues/4245 表明当 Windows 从睡眠状态恢复时这是一个问题。
我通过重启 WSL 修复了,wsl --shutdown
【讨论】:
【参考方案10】:听起来很明显,但请确保exp
的到期时间在iat
的发布时间之后。
【讨论】:
以上是关于代币必须是短暂的代币并且在合理的时间范围内的主要内容,如果未能解决你的问题,请参考以下文章