我有一个服务器程序试图从Google云端硬盘读取特定文件。使用服务帐户设置身份验证,并且可以成功执行管理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
有什么想法吗?
编辑:
如果我使用服务帐户电子邮件地址共享相关文件,则可以使用。但是,我认为域范围的授权将提供域范围的权限。这是预期的行为(即服务帐户只能访问公共/域范围内的驱动对象,或者是否已与服务帐户电子邮件明确共享)?