4

当我将 freezegun 与 google storage api 一起使用时,出现以下错误。

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 in the JWT claim.', {'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 in the JWT claim.'})

我认为忽略包可能会解决问题。参考:https ://github.com/spulec/freezegun/pull/185

有时需要忽略特定包(即库)的 FreezeGun 行为。一次调用可以忽略它们:

我尝试在忽略列表中添加 ["google", "google.auth", "google.cloud"],但仍然遇到相同的错误。

from google.cloud import storage
import freezegun

ig_ms = ["google", "google.oauth2", "urllib3", "google.cloud"]
freezegun.configure(extend_ignore_list=ig_ms)


with freezegun.freeze_time("2017-05-21", ignore=ig_ms):
    client = storage.Client()

    print(list(client.list_buckets()))

我对如何正确使用忽略包感到困惑。例如:

import urllib3
import freezegun

with freezegun.freeze_time("2017-05-21", ignore=['urllib3']):
    http = urllib3.PoolManager()
    resp = http.request("GET", "https://httpbin.org/robots.txt")
    print(resp.status)

无论我是否将 urllib3 添加到忽略列表,它仍然会引发SystemTimeWarning: System time is way off (before 2020-07-01). This will probably lead to SSL verification errors

4

1 回答 1

0

Invalid_grant 错误有两个常见原因。

  1. 您的服务器时钟与 NTP 不同步。(解决方法:检查服务器时间是否有误修复。)

  2. 已超出刷新令牌限制。(解决方案:您无能为力,他们不能使用更多的刷新令牌)应用程序可以请求多个刷新令牌。例如,这在用户想要在多台机器上安装应用程序的情况下很有用。在这种情况下,需要两个刷新令牌,每个安装一个。当刷新令牌的数量超过限制时,旧令牌将失效。如果应用程序尝试使用无效的刷新令牌,则会返回一个 invalid_grant 错误响应。每对唯一的 OAuth 2.0 客户端的限制为 25 个刷新令牌(请注意,此限制可能会发生变化)。如果应用程序继续为同一客户/帐户对请求刷新令牌,一旦第 26 个令牌发出,之前发出的第 1 个刷新令牌将失效。

于 2021-09-11T17:46:14.250 回答