如何从刷新令牌中获取访问令牌?刷新令牌会过期吗?

Posted

技术标签:

【中文标题】如何从刷新令牌中获取访问令牌?刷新令牌会过期吗?【英文标题】:how to get access tokens from refresh token? does refresh token expire? 【发布时间】:2021-08-25 19:55:45 【问题描述】:

我正在尝试创建一个 python 脚本,该脚本将(带有访问令牌和文件的.csv)作为输入,并将该文件上传到访问令牌在该 csv 中的多个谷歌驱动器 但是一段时间后访问令牌过期了,我必须再次获取它们......刚刚看到有一个叫做刷新的东西,它刷新了访问令牌

是否可以从python脚本中做到这一点,请解释一下。

刷新令牌会过期吗?

import json
import requests
import pandas as pd
headers = 
para = 
    "name": "update",

files = 
    'data': ('metadata', json.dumps(para), 'application/json; charset=UTF-8'),
    'file': open("./update.txt", "rb")

tokens = pd.read_csv('tokens.csv')
for i in tokens.token:
    headers="Authorization": i
    r = requests.post(
        "https://www.googleapis.com/upload/drive/v3/files?uploadType=multipart",
        headers=headers,
        files=files
    )
    print(r.text)

【问题讨论】:

您需要提供一些代码或工作示例,以便其他人准确回答 我已添加代码请检查 回答你的问题,访问令牌确实过期了,你需要定期获取新的 我可以从 python 脚本中做到这一点,而不去谷歌 api 控制台吗? 是的,您可能必须发出 API 请求才能获取新令牌,您需要找到特定于您使用的文档的文档 【参考方案1】:

为了能够获得a new access_token programmatically using a refresh_token,您必须在redirecting the user to Google's OAuth 2.0 server 时将access_type 设置为offline

如果您这样做了,如果您对https://oauth2.googleapis.com/token 执行以下POST 请求,您可以获得一个新的access_token

POST /token HTTP/1.1
Host: oauth2.googleapis.com
Content-Type: application/x-www-form-urlencoded

client_id=your_client_id&
client_secret=your_client_secret&
refresh_token=refresh_token&
grant_type=refresh_token

相应的响应是这样的:


  "access_token": "1/fFAGRNJru1FTz70BzhT3Zg",
  "expires_in": 3920,
  "scope": "https://www.googleapis.com/auth/drive",
  "token_type": "Bearer"

注意:

您可以在下面我提供的参考中找到多种语言的代码 sn-ps,包括 Python,但考虑到您没有使用 Python 库,我认为我提供的 HTTP/REST sn-p 在您的应用中可能更有用情况。

参考:

Refreshing an access token (offline access)

【讨论】:

以上是关于如何从刷新令牌中获取访问令牌?刷新令牌会过期吗?的主要内容,如果未能解决你的问题,请参考以下文章

刷新刷新令牌

如何在 asp.net 中生成刷新令牌?

在 ASP.NET MVC 中过期后刷新访问令牌

我们应该与访问令牌一起更新刷新令牌吗?

如何从 Google Calendar API 获取刷新的令牌

使用访问令牌和刷新令牌来刷新它们