gpt4 book ai didi

python - 刷新access token报 "invalid_grant"错误的情况?

转载 作者:太空宇宙 更新时间:2023-11-03 11:51:25 26 4
gpt4 key购买 nike

最近我一直在为这个问题烦恼。

一些背景

  • 使用oauth2client库来管理用户的 token 。 token 用于定期并发执行各种后台任务。
  • 每次这些任务之一即将为用户运行时,我们都会从存储中获取凭据对象,并在距离到期约 5 分钟后进行刷新。否则,将重新使用当前访问 token 。
  • 有时会出现 1 个用户的多个任务同时运行的情况
  • 有一段时间一切正常, token 正常刷新
  • 间歇性地,在其中一次尝试刷新期间,似乎出乎意料,返回“invalid_grant”错误,它使存储中的刷新 token 完全无效。 (什么时候/如何/为什么发生是我希望通过这个问题弄清楚的)

四处搜索,有很多关于这个问题的主题/报告。但到目前为止我发现的所有内容都不适用于我们的案例。我将尝试列出到目前为止我研究过的那些:

  1. 用户已撤销权限

这是最明显、记录最多且易于重现的,但不幸的是,在我们的案例中,我们的用户(或我们自己,在测试时)根本没有撤销权限。

  1. 刷新“旧”访问 token

起初我以为一个用户一次只能有 1 个有效的访问 token 。 That is false ,并在 OAuth2 Playground 上进行了验证。

  1. User has too many active access tokens

每位用户每位客户最多只能拥有 25 个事件 token 。一旦达到该限制,旧的访问 token 将自动失效,即使它们的到期日期尚未过去。

这对我们来说也是一个死胡同,因为我们的问题发生在刷新时,而不是使用最旧的访问 token 。并且此限制仅影响访问 token ,不影响刷新 token 。

  1. 在短时间内多次请求刷新

根本没有记录。只是顺便提及,没有引用。试图通过在 7 秒内刷新 25 次来模拟它,但一切顺利。但没有引用资料,这是在黑暗中拍摄的。我们的后台任务每几分钟最多只能执行 10 个任务。继续前进。

  1. 并发刷新导致 token 成功的竞争条件

I've asked a question here, but this wasn't the case .通过同时运行两个计划的任务在 AppEngine 上进行测试。


我已无计可施,无法确定这个问题。我们无法轻易复制它的事实是一种痛苦。我真的很想了解可能导致我错过的原因是什么?

这是我们的刷新代码:

def refresh_oauth_credentials(user, credentials, force=False):
if not credentials:
return None
logging.debug(credentials.token_expiry)
do_refresh = credentials._expires_in() < 300
if force or do_refresh:
h = httplib2.Http()
try:
logging.debug('Refreshing %s\'s oauth2 credentials...' % user.email)
credentials.refresh(h)
except AccessTokenRefreshError:
logging.warning('Failed to refresh.')
return None
return credentials

最佳答案

该消息实质上是说刷新 token 无效(过期、撤销等)或与访问 token 请求详细信息(用户、范围)不匹配。所以在你的问题中你说“返回了一个“invalid_grant”错误,它完全使存储中的刷新 token 无效”,这有点相反,即。由于某种原因,刷新 token 无效,这导致了“无效授权”。

如果在您的开发工作流程/测试期间您正在为用户获取新的刷新 token ,我在开发过程中经常看到这种情况。

关于python - 刷新access token报 "invalid_grant"错误的情况?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26400776/

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