使用服务帐户的Google Drive API问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用服务帐户的Google Drive API问题相关的知识,希望对你有一定的参考价值。

我有一个服务器程序正在尝试从Google云端硬盘读取特定文件。 身份验证是使用服务帐户设置的,可以成功执行admin SDK操作。 但是,然后我尝试通过以下方式使用Drive API,但出现404错误:

credentials = SignedJwtAssertionCredentials(settings.GOOGLE_SERVICE_ACCOUNT_EMAIL, key, scope='https://www.googleapis.com/auth/drive')
http = credentials.authorize(httplib2.Http())
drive = build('drive', 'v2', http=http)
file_data = drive.files().get_media(fileId="MYFILEID").execute()

如果我将文件权限设置为“具有链接的任何人都可以查看”,则代码将按预期工作。

在控制台中为该服务帐户启用了Drive API,并且该服务帐户已被授予域范围的委派。

如果我将sub='email@mydomain.com'添加到SignedJwtAssertionCredentials调用中,那么当我尝试构建驱动器服务时,会得到一个

AccessTokenRefreshError: access_denied

有任何想法吗?

编辑:

如果我与服务帐户的电子邮件地址共享有问题的文件,则可以使用。 但是,我本以为域范围的委派将提供域范围的特权。 这是否是预期的行为(即服务帐户只能访问在公共/域范围内或已与服务帐户电子邮件明确共享的驱动器对象)?

以上是关于使用服务帐户的Google Drive API问题的主要内容,如果未能解决你的问题,请参考以下文章

Google Drive API Python 服务帐户示例

如何通过 Google Drive .NET API v3 使用服务帐户访问 Team Drive

Google Drive - 服务帐户存储限制

Google Drive API - 服务帐户存储限制 - 替代方案

Google Drive API、Oauth 和服务帐号

使用预建帐户登录,无需手动登录 - Android Google Drive API