You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Google Drive v3 API:列出Shared Drive正常但获取时返回404

问题:调用Google Drive API的drives.get接口返回404(已能正常列出共享驱动器)

问题详情

使用跨域服务账号访问另一Google Workspace下的共享驱动器,已通过drives().list()成功获取到驱动器ID,但调用drives().get()时返回404错误。相关代码如下:

import os.path

from google.oauth2 import service_account
from google.auth.transport.requests import Request
from google.oauth2.credentials import Credentials
from googleapiclient.discovery import build
from googleapiclient.errors import HttpError
from googleapiclient.http import MediaFileUpload

SCOPES = ["https://www.googleapis.com/auth/drive"]
SERVICE_ACCOUNT_FILE = "credentials.json"

def main():

  creds = service_account.Credentials.from_service_account_file(
        SERVICE_ACCOUNT_FILE, scopes=SCOPES)        

  try:
        drive_api_service = build("drive", "v3", credentials=creds)

        # 调用drives.get接口
        folder = (drive_api_service.drives()
          .get(driveId="1AEZqVMFTv9qTVp7QVA", useDomainAdminAccess=True)  
          .execute())

  except Exception as error:
        print(f'An error occurred: {error}')

if __name__ == "__main__":
  main()

已完成的配置

  • 服务账号已开启Domain Wide Delegation
  • 服务账号邮箱被添加为目标共享驱动器的Content Manager角色
  • 共享驱动器已开启「允许外部用户访问共享驱动器中的文件」设置
  • 已通过drives().list()确认驱动器ID有效,返回结果:
{'kind': 'drive#driveList', 'drives': [{'id': '1AEZqVMFTv9qTVp7QVA', 'name': 'dcf_results', 'kind': 'drive#drive'}]}

错误信息

调用drives.get()时返回404:

An error occurred: <HttpError 404 when requesting https://www.googleapis.com/drive/v3/drives/0ADQqULDEv5pYUk9PVA?useDomainAdminAccess=true&alt=json returned "Shared drive not found: 0ADQqULDEv5pYUk9PVA". Details: "[{'message': 'Shared drive not found: 1AEZqVMFTv9qTVp7QVA', 'domain': 'global', 'reason': 'notFound', 'location': 'driveId', 'locationType': 'parameter'}]">

解决方案

1. 移除useDomainAdminAccess=True参数

你的服务账号不属于共享驱动器所在的Workspace域,启用该参数会强制API以域管理员身份尝试访问,反而触发权限验证失败。直接移除该参数,使用服务账号自身的权限调用即可:

folder = (drive_api_service.drives()
  .get(driveId="1AEZqVMFTv9qTVp7QVA")  
  .execute())

2. 验证服务账号的实际权限

虽然已添加Content Manager角色,但可通过以下代码确认服务账号在目标驱动器上的权限是否生效:

permissions = drive_api_service.permissions().list(
    fileId="1AEZqVMFTv9qTVp7QVA",
    supportsAllDrives=True
).execute()
print(permissions)

确保返回结果中包含你的服务账号邮箱,且角色为contentManager。

3. 检查参数一致性

注意错误信息中出现了两个不同的驱动器ID(0ADQqULDEv5pYUk9PVA和1AEZqVMFTv9qTVp7QVA),务必确认代码中传入的driveId与drives().list()返回的ID完全一致,避免复制粘贴错误。

内容的提问来源于stack exchange,提问作者Ayo I

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 08:14:59