如果我在 pydrive 中使用服务帐户,为什么我需要刷新令牌?

问题描述

我正在使用 pydrive 将一些文件上传到我的驱动器。我使用以下方法进行身份验证:

credentials = ServiceAccountCredentials.from_json_keyfile_name(
    settings.GOOGLE_API_SERVICE_ACCOUNT,scopes
)


pydrive_auth = GoogleAuth()
pydrive_auth.credentials = credentials
drive = GoogleDrive(pydrive_auth)
....

一段时间后,显然 pydrive 尝试刷新访问令牌并尝试查找我的服务器上不存在的 client_secret.json,因此导致它失败。如果我使用的是服务帐户,为什么要尝试刷新访问令牌?我认为服务帐户不需要令牌。代码中是否缺少某些内容,或者我是否需要添加此缺少的文件

解决方法

服务帐户不需要刷新令牌。

刷新令牌由用户授予您,让您可以在他们不在线时访问他们的数据。

服务帐户已获得预授权,它们始终具有访问权限,从某种意义上说,如果您想以这种方式查看它们,则它们是永久的刷新令牌。

gauth = GoogleAuth()
scope = ['https://www.googleapis.com/auth/drive']
gauth.credentials = ServiceAccountCredentials.from_json_keyfile_name(JSON_FILE,scope)
drive = GoogleDrive(gauth)

my_file = drive.CreateFile({'id': 'FILE_ID'})