如果使用Python中的google.oauth2库使access_token过期,如何使用刷新令牌刷新access_token?

时间:2019-05-09 10:01:02

标签: python django oauth-2.0 google-api

我正在按照以下方式初始化凭据对象,如果令牌过期,则刷新令牌。下面提到的方法。当我使用实例时,出现错误提示('invalid_grant: Token has been expired or revoked.', '{\n "error": "invalid_grant",\n "error_description": "Token has been expired or revoked."\n}')

import google.auth.transport.requests
from googleapiclient.discovery import build
import google.oauth2.credentials
from oauth2client import GOOGLE_TOKEN_URI, client

try:
   self.credentials = google.oauth2.credentials.Credentials(
      self.google_access_token,
      refresh_token=self.google_refresh_token,
      token_uri=GOOGLE_TOKEN_URI,
      client_id=settings.GOOGLE_CLIENT_ID,
      client_secret=settings.GOOGLE_CLIENT_SECRET)
   if self.credential.expired:
      request = google.auth.transport.requests.Request()
      self.credentials.refresh(request)
except:
        pass

self.analytics = build('analyticsreporting', 'v4', credentials=self.credentials)

请提供建议。

1 个答案:

答案 0 :(得分:0)

您必须创建一个settings.yamlcredentials.json并使用它来创建刷新的访问令牌。

在该过程中,您将所有凭据(例如client_id,client_secret,范围等)放入.json.yaml文件中,该文件以后将用于刷新过期的访问令牌。

语法:- google.oauth2.credentials.Credentials(from_authorized_user_file("filename.json"))

该文件能够创建新的访问令牌,并且由于它是文件,因此可以将其放置在安全的地方,以免被错误使用。 (如果其他人拥有此文件的所有权,那么他们可以向您的googleapi隐式请求)