Python “的情况”;无效的“授权”;刷新访问令牌时出错?
最近我一直在为这个问题发牢骚 一些背景Python “的情况”;无效的“授权”;刷新访问令牌时出错?,python,google-app-engine,google-oauth,Python,Google App Engine,Google Oauth,最近我一直在为这个问题发牢骚 一些背景 使用库管理用户的令牌。令牌用于定期和并发地执行各种后台任务 每次这些任务中的一个即将为用户运行时,我们都会从存储中获取凭据对象,如果过期时间大约为5分钟,则会进行刷新。否则,将重新使用当前访问令牌 有时,一个用户的多个任务同时运行 有一段时间一切正常,令牌会正常刷新 在其中一次尝试刷新期间,会间歇性地(似乎出乎意料地)返回一个“invalid_grant”错误,并使存储器中的刷新令牌完全无效。(发生的时间/方式/原因是我希望通过这个问题弄清楚的) 到处
- 使用库管理用户的令牌。令牌用于定期和并发地执行各种后台任务
- 每次这些任务中的一个即将为用户运行时,我们都会从存储中获取凭据对象,如果过期时间大约为5分钟,则会进行刷新。否则,将重新使用当前访问令牌
- 有时,一个用户的多个任务同时运行
- 有一段时间一切正常,令牌会正常刷新
- 在其中一次尝试刷新期间,会间歇性地(似乎出乎意料地)返回一个“invalid_grant”错误,并使存储器中的刷新令牌完全无效。(发生的时间/方式/原因是我希望通过这个问题弄清楚的)
我想把这个问题弄清楚,真是束手无策。事实上,我们不能轻易地复制它是一种痛苦。我真的很想知道是什么原因导致我错过了这个 这是我们的刷新代码:
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
def refresh\u oauth\u凭证(用户、凭证、强制=False):
如果没有证书:
一无所获
logging.debug(凭证.token\u到期)
do_refresh=凭据。_在()中过期
如果强制或不刷新:
h=httplib2.Http()
尝试:
logging.debug('正在刷新%s的oauth2凭据…'%user.email〕)
凭据刷新(h)
除AccessTokenRefreshError外:
logging.warning('刷新失败')
一无所获
返回凭证
消息实质上是说刷新令牌无效(过期、吊销等),或者与访问令牌请求详细信息(用户、范围)不匹配。因此,在您的问题中,您说“返回了一个“无效的授权”错误,并且它完全使存储中的刷新令牌无效”,这是另一种情况,即刷新令牌由于某种原因无效,这导致了“无效授权”
如果在开发工作流程/测试期间为用户获得新的刷新令牌,那么我在开发过程中经常看到这一点 在仔细检查(以及大量日志记录)之后,似乎有时OAuth2舞蹈的回调不包含刷新令牌。由于我假设如果为舞蹈提供了正确的参数,就会始终提供刷新令牌,因此我盲目地覆盖存储的令牌。我将开始一个新的问题,为什么我有时得不到刷新令牌。