调用Google Drive API获取共享盘文件/文件夹权限报404如何解决
问题原因说明
你遇到的404报错并非Drive API的已知行为,是请求配置错误导致,常见触发原因如下:
- 缺少共享盘支持参数:Drive v3 API默认仅检索个人云盘资源,所有涉及共享盘文件的操作请求,都必须添加
supportsAllDrives=true参数。你当前的请求未携带该参数,API不会在共享盘范围内检索文件ID,自然返回不存在错误。 - 鉴权方式不符合要求:文件权限属于敏感信息,仅用API key无法完成鉴权,你需要通过OAuth 2.0流程获取访问令牌,授权范围至少包含
https://www.googleapis.com/auth/drive.readonly。 useDomainAdminAccess参数误用:该参数仅适用于已完成全域权限委派的服务账号场景,如果你使用普通企业/个人账号的OAuth授权,携带该参数会导致鉴权逻辑异常,无法检索到目标文件。
正确调用方式
普通用户/OAuth授权场景
请求不需要携带useDomainAdminAccess参数,也不能用API key鉴权,正确格式如下:
GET https://www.googleapis.com/drive/v3/files/[FILE ID]/permissions?supportsAllDrives=true HTTP/1.1 Authorization: Bearer [你的OAuth2访问令牌]
全域委派服务账号场景
需要同时携带共享盘支持参数和域管理员访问参数,使用服务账号模拟目标用户生成的OAuth令牌鉴权:
GET https://www.googleapis.com/drive/v3/files/[FILE ID]/permissions?supportsAllDrives=true&useDomainAdminAccess=true HTTP/1.1 Authorization: Bearer [服务账号生成的模拟用户令牌]
批量获取共享盘所有文件权限的优化方案
你可以直接在拉取共享盘文件列表的接口中指定返回权限字段,减少遍历请求的次数,列表接口请求参数如下:
- 接口地址:
GET https://www.googleapis.com/drive/v3/files - 必选参数:
corpora=drivedriveId=[目标共享盘的ID]includeItemsFromAllDrives=truesupportsAllDrives=truefields=files(id,name,mimeType,permissions)(指定返回权限字段)
请求完成后即可一次性获取共享盘下所有文件、文件夹的基础信息和对应权限列表,直接筛选外部协作者信息即可。
内容的提问来源于stack exchange,提问作者ken5scal
相关产品推荐
相关产品推荐

