Python 是否可以使用签名JWT对Google Drive API进行授权调用?

Python 是否可以使用签名JWT对Google Drive API进行授权调用?,python,google-drive-api,jwt,Python,Google Drive Api,Jwt,以下内容可在以下网页上阅读: 使用一些Google API,您可以使用签名JWT直接作为承载令牌而不是OAuth 2.0访问令牌进行授权API调用。如果这是可能的,您可以避免在进行API调用之前向Google的授权服务器发出网络请求 如果要调用的API在Google API GitHub存储库中发布了服务定义,则可以使用JWT而不是访问令牌进行授权API调用 我的问题是:是否可以使用签名JWT对Google驱动API进行授权调用?我在地图上搜索了一下,但什么也没找到。如果是的话,有人能给我一个页

以下内容可在以下网页上阅读:

使用一些Google API,您可以使用签名JWT直接作为承载令牌而不是OAuth 2.0访问令牌进行授权API调用。如果这是可能的,您可以避免在进行API调用之前向Google的授权服务器发出网络请求

如果要调用的API在Google API GitHub存储库中发布了服务定义,则可以使用JWT而不是访问令牌进行授权API调用

我的问题是:是否可以使用签名JWT对Google驱动API进行授权调用?我在地图上搜索了一下,但什么也没找到。如果是的话,有人能给我一个页面链接,说明如何操作(最好是Python)。

  • 您想使用服务帐户使用驱动器API
  • 您希望使用python实现这一点
如果我的理解是正确的,那么这个答案呢?请把这看作是几个可能的答案之一

在你的情况下,如何使用

用法: 1.创建服务帐户: 在这种情况下,请创建服务帐户并下载JSON文件

2.安装“谷歌api python客户端” 为了使用以下示例脚本,请安装“GoogleAPI python客户端”

3.示例脚本: 在运行脚本之前,请设置
服务帐户文件
的变量

from google.oauth2 import service_account
from googleapiclient.discovery import build

SERVICE_ACCOUNT_FILE = '###'  # Please set the file including JSON values of the credentials of service account.

SCOPES = ['https://www.googleapis.com/auth/drive.metadata.readonly']
credentials = service_account.Credentials.from_service_account_file(SERVICE_ACCOUNT_FILE, scopes=SCOPES)
service = build('drive', 'v3', credentials=credentials)
fileList = service.files().list().execute()
print(fileList)
  • 运行此脚本时,将使用驱动器API中的Files:list方法检索服务帐户的Google驱动器中的文件列表
注:
  • 服务帐户的Google Drive与您自己的Google Drive不同。如果您想使用服务帐户检索Google驱动器中的文件,则需要与服务帐户共享该文件。请小心这个
参考资料:

如果我误解了您的问题,并且这不是您想要的方向,我很抱歉。

目前,Google Drive API不允许在授权承载头中使用JWT令牌。您可以在此处看到允许的API列表:。不幸的是,该驱动器不在列表中,需要额外的步骤来获取驱动器API的访问令牌。

您非常感谢,即使它没有具体解决我的问题(使用JWT)。from_service_account_file函数的使用是否隐含了JWT。无论如何,再次感谢。@Patrick谢谢您的回复。对使用服务帐户时,将使用私钥和客户端电子邮件。在本例中,JWT的值由GoogleAPI python客户机的库创建,并使用创建的JWT检索访问令牌。然后,访问令牌可以用于使用GoogleAPI。如果这对您的实际情况没有帮助,我很抱歉。在文档中,他们似乎说可以使用JWT代替access token,并且这有助于避免在进行API调用之前向Google的授权服务器发出网络请求。您似乎说JWT用于获取访问令牌。“对不起,我不明白。”帕特里克谢谢你的回答。我认为你的理解是正确的。检索访问令牌的流程如下所示。1.使用服务帐户的私钥和客户端电子邮件创建JWT值。2.使用JWT检索访问令牌。对于OAuth2,用户需要打开自己的浏览器来检索用于检索访问令牌的授权码。但对于服务帐户,这不是必需的。如果这没有用,我道歉。
from google.oauth2 import service_account
from googleapiclient.discovery import build

SERVICE_ACCOUNT_FILE = '###'  # Please set the file including JSON values of the credentials of service account.

SCOPES = ['https://www.googleapis.com/auth/drive.metadata.readonly']
credentials = service_account.Credentials.from_service_account_file(SERVICE_ACCOUNT_FILE, scopes=SCOPES)
service = build('drive', 'v3', credentials=credentials)
fileList = service.files().list().execute()
print(fileList)