【问题标题】:Refreshing google access tokens with the refresh tokens使用刷新令牌刷新 google 访问令牌
【发布时间】:2019-06-29 01:00:09
【问题描述】:

如何使用 python 中的刷新令牌刷新 google 中的访问令牌?我有刷新令牌、客户端 ID 和客户端密码

我已尝试使用以下代码生成访问令牌(过期后)

 params = {
            "grant_type": "refresh_token",
            "client_id": client_id,
            "client_secret": client_secret,
            "refresh_token": refresh_token
          }
authorization_url = "https://www.googleapis.com/oauth2/v4/token"

r = requests.post(authorization_url, data=params)
print(r.text)

if r.ok:
       return r.json()['access_token']
else:
       return None

我收到如下错误回复:

{
  "error": "invalid_grant",
  "error_description": "Bad Request"
}

但我需要生成访问令牌。

【问题讨论】:

  • 有什么理由不使用 Google api python 客户端库?
  • @kkr 我认为您的脚本是正确的。当我遇到这样的错误时,我通过再次检索新的刷新令牌来避免这个问题。虽然我不确定你的情况是否和你一样,例如,检索新的刷新令牌并重试如何?

标签: python oauth google-api google-drive-api google-oauth


【解决方案1】:

这是它无法正常工作的三个主要原因。我不是 Python 开发人员,因此无法测试您的代码,抱歉。

以字符串形式发送参数

检查您的参数,确保它们是作为用 & 分隔的单个字符串发送的。

Post https://accounts.google.com/o/oauth2/token
client_id={ClientId}&client_secret={ClientSecret}&refresh_token=1/ffYmfI0sjR54Ft9oupubLzrJhD1hZS5tWQcyAvNECCA&grant_type=refresh_token

内容类型标题

另外我认为您需要将内容类型标头设置为类似application/x-www-form-urlencoded

更改端点

如果这样不行

也尝试使用https://accounts.google.com/o/oauth2/token 而不是https://www.googleapis.com/oauth2/v4/token 我记得有时其中一个或另一个会出现问题

【讨论】:

    猜你喜欢
    • 2020-07-12
    • 2022-10-31
    • 2021-12-17
    • 2017-06-09
    • 1970-01-01
    • 2015-11-26
    • 2020-06-12
    • 1970-01-01
    • 2014-07-15
    相关资源
    最近更新 更多