Google Drive API访问共享驱动器无文件返回权限问题求助
可能的Google Workspace/GCP策略限制及解决方法
域范围委派未启用
服务账号需要通过域范围委派获得访问公司Drive资源的权限,否则即使添加了文件夹权限,身份验证层面会被拦截。
解决:让公司IT登录Google Admin控制台,依次进入「安全」>「API控制」>「域范围委派」,添加服务账号的客户端ID(可在GCP项目的「IAM与管理员」>「服务账号」中找到),并勾选所需的Drive API权限(如https://www.googleapis.com/auth/drive.readonly或读写权限)。共享驱动器外部成员访问限制
服务账号的邮箱格式为xxx@[项目ID].iam.gserviceaccount.com,可能被公司策略判定为外部用户,即使你已将其添加为文件夹管理员。
解决:让公司IT操作:- 打开目标共享驱动器的「设置」>「成员权限」,确保「允许外部成员访问此驱动器」已开启;
- 若全局策略限制,进入Admin控制台「应用」>「Google Workspace」>「Drive和Docs」>「共享设置」,调整外部共享级别为允许与外部用户共享。
组织级API禁用策略
公司可能在GCP组织层面禁用了Google Drive API,导致项目无法调用该API。
解决:让公司IT检查GCP组织政策,确认restrict.googleapis.com相关规则未禁用Drive API;同时在对应GCP项目的「API和服务」>「已启用的API和服务」中,确保Google Drive API处于启用状态。共享驱动器权限继承问题
若仅将服务账号添加到子文件夹,可能因共享驱动器的权限设置导致无法遍历上层资源。
解决:让公司IT将服务账号直接添加为共享驱动器的「内容管理员」,而非仅子文件夹,确保权限覆盖整个驱动器层级;同时确认共享驱动器的「内容可见性」设置为「任何有链接的用户可查看」。
API调用细节检查
- 确保
files.list请求同时包含两个关键参数:
仅设置service.files.list( supportsAllDrives=True, includeItemsFromAllDrives=True, q="'目标文件夹ID' in parents", fields="files(id, name)" )supportsAllDrives=True不足以获取共享驱动器的文件,必须搭配includeItemsFromAllDrives=True。 - 验证
q参数中的文件夹ID是否为共享驱动器内的正确ID,而非个人Drive中的ID。 - 确认使用的服务账号密钥文件属于工作账号对应的GCP项目,而非个人项目的密钥。
内容的提问来源于stack exchange,提问作者Alessandro Lodesani

