访问令牌和刷新令牌,在Python中使用Google Plus提供无效授权?

Jai*_*tel 5 python oauth google-api google-plus google-oauth

我正确地确定了离线访问并存储了它.每隔60分钟,在需要时,我会检索一个新的access_token.代码没有改变,但奇怪的是,当他第一次通过授权时.

client_id       ="xxxxx.apps.googleusercontent.com"
client_secret   ="xxxxxxxxxxxxxxxxxxxx"
refresh_token   ="xxxxxxxxxxxxxxxxxxx"
response        = oauth2a.RefreshToken(client_id,client_secret,refresh_token)

def RefreshToken(client_id, client_secret, refresh_token):
  params = {}
  params['client_id'] = client_id
  params['client_secret'] = client_secret
  params['refresh_token'] = refresh_token
  params['grant_type'] = 'refresh_token'
  request_url = AccountsUrl('o/oauth2/token')

  response = urllib.urlopen(request_url, urllib.urlencode(params)).read()
  return json.loads(response)
Run Code Online (Sandbox Code Playgroud)

答案总是{u'error':u'invalid_grant'}.我在三台不同的机器上尝试了这个,并且还得到 HTTPError:HTTP错误400:错误的请求

谢谢

DaI*_*mTo 12

Invalid_grant错误有两个常见原因.

  1. 您的服务器时钟与NTP不同步.(解决方案:检查服务器时间是否错误修复它.)
  2. 已超出刷新令牌限制.(解决方案:您无法做任何事情,他们无法使用更多刷新令牌)应用程序可以请求多个刷新令牌.例如,这在用户想要在多台计算机上安装应用程序的情况下非常有用.在这种情况下,需要两个刷新令牌,每个安装一个.当刷新令牌的数量超过限制时,旧令牌变为无效.如果应用程序尝试使用无效的刷新令牌,则会返回invalid_grant错误响应.每个唯一的OAuth 2.0客户端对的限制是25个刷新令牌(请注意,此限制可能会发生变化).如果应用程序继续请求同一客户端/帐户对的刷新令牌,则一旦发出第26个令牌,先前发出的第一个刷新令牌将变为无效.第27个请求的刷新令牌将使先前发出的第二个令牌无效,依此类推.