gpt4 book ai didi

python - 尝试刷新 token 时获得 invalid_grant

转载 作者:太空宇宙 更新时间:2023-11-04 06:14:07 25 4
gpt4 key购买 nike

当 OAuth2Credential 对象尝试刷新其 access_token 时,有时它会收到 invalid_grant 错误,然后变得无法刷新。我使用的代码基于 Google 的 python API 和 Mirror API 示例。

背景:

  • 使用 oauth2client 模块进行身份验证和 OAuth2Credential 对象。
  • 像 Google 自己的示例代码一样,将经过 pickle 和 base64 处理的 OAuth2Credential 对象存储到数据库中
  • 使用apiclient模块调用Mirror API
  • 此代码在 3 个不同的服务器上运行,在尝试发送时均出现相同的问题
  • 我要求的范围是 "https://www.googleapis.com/auth/glass.timeline""https://www.googleapis.com/auth/用户信息.profile"
  • 我可以确认 access_type 设置为“离线”
  • 我要求 approval_prompt 为“强制”以防万一

这是用于调用镜像 API 的代码:

from apiclient.discovery import build
http = credential.authorize(http=httplib2.Http())
service = build("mirror", "v1", http=http)
payload = <JSON_PAYLOAD_HERE>
service.timeline().insert(body=payload).execute()

调用服务时,它有可能发出 401,这意味着需要刷新 access_token。然后它调用刷新方法,该方法与 AccessTokenRefreshError 除外,错误为 invalid_grant。在这一点上,credential 和 bunk 一样好,因为 access_token 已过期并且 refresh_token 只会给出相同的错误。

我看到页面说这可能是由于 NTP 问题导致的,但我已经确认(甚至切换了 NTP 服务器)我的服务器是同步的。另一种记录的可能性是,只有 25 个刷新 token 在被回收之前可以存在,但我已经在 Credential 对象上实现了一个 store() 方法,所以当它被刷新时,新的凭证被保存到位(我可以确认这有效正如我在刷新数据库时看到的新信息)。

由于我无法获得用户凭据以开始按需展示此问题,因此除了“等待一段时间”之外,我无法解释任何其他条件来重现该问题。我已经看到这个问题在验证和发送一个电话后很快就发生了,一直到一百个电话后一周的时间。

目前解决问题的唯一方法是要求用户重新授权,但这不是解决方案,因为我希望在没有用户交互的情况下离线使用 api。我也无法通知用户他们需要重新授权。

最佳答案

来自评论线程的回答:用户从 MyGlass 网站关闭了 Glassware,导致 token 被撤销。

用户需要再次通过授权流程才能使用 Glassware,方法是访问 Glassware 授权端点或在 MyGlass 上将其重新“打开”(如果可用)。

关于python - 尝试刷新 token 时获得 invalid_grant,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16947308/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com