【问题标题】:invalid_grant Error when Authenticating oauth Request - Google Drive验证 oauth 请求时出现 invalid_grant 错误 - Google Drive
【发布时间】:2016-03-29 14:42:26
【问题描述】:

我正在尝试访问客户的 Google 云端硬盘以下载他们的文件。在我自己的谷歌驱动器上测试代码时,我能够成功下载文件。但是,当我从他们那里得到 oauth 代码时,我得到了错误:

oauth2client.client.FlowExchangeError: invalid_grant

在查看了其他一些答案后,建议您确保 access_type='offline',这似乎是默认设置,我可以在生成的 url 中看到设置了此参数。听起来他们返回的代码可能只在一个小时内有效,但是我试图在一小时内使用它,但仍然没有运气。关于如何避免此问题的任何其他建议?

这是我一直在运行的代码:

from oauth2client import client
import webbrowser

flow = client.flow_from_clientsecrets(
  'client_secrets.json',
  scope='https://www.googleapis.com/auth/drive.readonly',
  redirect_uri='urn:ietf:wg:oauth:2.0:oob')

auth_uri = flow.step1_get_authorize_url()
webbrowser.open(auth_uri)

print auth_uri

auth_code = raw_input('Enter the auth code: ')

credentials = flow.step2_exchange(auth_code)
http_auth = credentials.authorize(httplib2.Http())

flow.step2_exchange 行出错。

【问题讨论】:

    标签: python google-drive-api oauth2


    【解决方案1】:

    据我所知,此错误有三个标准原因。

    1. 您的 PC 上的时间已关闭。 解决方案:检查一下。
    2. 您尝试使用验证码不止一次。 您只能使用一次身份验证码来获取刷新令牌。
    3. 您不止一次地测试和验证代码。每次验证代码时,您都会获得一个有效的刷新令牌。您最多可以获得 25 个刷新令牌,然后它们就会停止工作。 解决方案:确保每次刷新访问权限时使用的是刷新令牌,而不是旧令牌。

    另外,谷歌作为 Python 教程向您展示了如何使用 Python 客户端库访问驱动器,它可能会让您更轻松。 Python QuickStart

    【讨论】:

    • 非常感谢您的帮助。如果我在用户允许访问后 15 分钟内使用它,则该令牌似乎是有效的。我检查了我电脑上的时间,它与 NTP 同步。我没有多次使用令牌,而且我一次只使用一个。我不确定为什么时间限制似乎会影响令牌,但现在我的问题已经解决(我只需要确保快速使用令牌)。如果您对它的行为方式有任何其他想法,我很想听听他们的意见!
    • 您说的是哪个令牌?如果它的身份验证代码是,您需要尽快使用该代码并获取您的访问令牌并刷新令牌。它不会长时间徘徊。
    • 谢谢!是的,验证码。没想到有时间限制。你知道它有多长吗?这使得尝试与其他人协调以获取代码时具有挑战性。
    • 不知道您需要多长时间才能交换身份验证码,时间不长。明显低于 15 分钟。编写脚本来测试它应该不难
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-24
    • 1970-01-01
    • 2018-04-26
    • 2018-10-28
    • 2021-01-26
    相关资源
    最近更新 更多