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

遍历Google Drive文件时出现insufficientFilePermissions错误如何解决

Google Drive API insufficientFilePermissions 错误排查与解决方法

核心问题根源

你遇到的403权限错误主要由SCOPES配置冲突、查询参数缺失、无权限访问文件敏感配置三类问题导致,对应解决方案如下:

1. 修复SCOPES冗余冲突问题

你当前配置的SCOPES存在大量重叠权限,Google OAuth授权时会默认取权限集合的最小交集,你配置的drive.readonly、drive.metadata.readonly等只读权限会覆盖最高权限的drive全量权限,导致你没有资格查看文件的权限配置。
正确的SCOPES只需保留最高权限即可,如果你需要遍历所有文件并查看权限,仅保留以下配置:

SCOPES = ['https://www.googleapis.com/auth/drive']

注意:修改SCOPES后必须删除本地旧的token.json文件,重新走授权流程生成新的token文件,否则修改的SCOPES不会生效

2. 补全文件列表查询的全量适配参数

默认的service.files().list()仅返回你个人创建、或明确共享到你个人账号下的文件,共享盘文件、仅拥有查看权限的公共文件不会返回完整元数据,需要新增两个适配全量文件的参数:

files = service.files().list(
    fields='files(id, name, capabilities)',
    includeItemsFromAllDrives=True,
    supportsAllDrives=True
).execute().get('files', [])

3. 新增权限预校验逻辑,跳过无权限文件

不是所有你能看到的文件都支持查看权限配置,比如公共只读共享文件、你仅拥有浏览权限的共享盘文件,都没有查看权限列表的资格,需要先判断文件的canReadPermissions属性再调用接口,避免无意义报错:

for file in files:
    # 预校验是否有权限读取该文件的权限配置
    if file.get('capabilities', {}).get('canReadPermissions', False):
        try:
            perms = service.permissions().list(
                fileId=file['id'],
                supportsAllDrives=True
            ).execute()
            print(perms)
        except Exception as e:
            print(f"文件{file['id']}获取权限失败: {str(e)}")
    else:
        print(f"无权限查看文件{file.get('name', '未命名')}({file['id']})的权限配置")

4. 修正无效排查逻辑的问题

你之前写的requests.get测试代码存在两个错误,测试结果不具备参考性:

  • 字符串拼接错误,没有把动态的file['id']拼接到请求URL中
  • 没有在请求头中携带Authorization: Bearer {你的access_token}参数,直接访问接口必然返回401登录要求

额外排查点

如果你使用的是服务账号授权而非个人账号授权,需要提前将需要访问的文件/共享盘的查看权限授予服务账号的邮箱地址,否则就算SCOPES配置正确也会返回403权限错误。

内容的提问来源于stack exchange,提问作者I.T. G.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 23:36:05