使用服务账号在Google Drive创建快捷方式突发403 Forbidden错误
问题描述
我用Python代码在Drive文件夹中创建指向另一文件夹(暂称“folder X”)的快捷方式,原本运行正常,突然触发如下报错:
googleapiclient.errors.HttpError: <HttpError 403 when requesting https://www.googleapis.com/drive/v3/files?alt=json returned "Forbidden". Details: "[{'message': 'Forbidden', 'domain': 'global', 'reason': 'forbidden'}]">
此前正常使用的服务账号JSON认证密钥文件突然出现这个Forbidden提示,我无法确定原因。想请教:问题出在哪里?如何让服务账号通过该JSON密钥重新获得folder X的访问权限?
目前临时解决办法是复制“folder X”并创建新的同名文件夹,之后代码就能正常运行,但这并非长久之计。
可能的原因及解决方法
- folder X的共享权限被修改:大概率是有人移除了服务账号对folder X的访问权限。找到JSON密钥文件中的
client_email字段,打开folder X的共享设置,确认该邮箱是否在共享列表中,且拥有至少查看者权限(创建快捷方式需要最低查看权限)。 - 服务账号的项目权限被变更:检查Google Cloud控制台,确认服务账号所在项目的Drive API是否仍处于启用状态,同时确保服务账号拥有
Drive File Viewer或更高等级的角色权限。 - folder X被移入受限组织单元:如果你的Drive属于企业/教育域,folder X可能被移动到了限制外部服务账号访问的组织单元,联系域管理员确认该文件夹的组织单元权限配置。
- API配额超限:部分情况下,配额超限也会触发类似Forbidden提示。进入Google Cloud控制台的Drive API配额页面,确认是否超出调用限制。
重新授权步骤:
- 从creds.json中提取服务账号的邮箱地址(
client_email字段); - 打开folder X的共享设置,添加该邮箱并设置为查看者或更高权限;
- 等待数分钟让权限生效后,重新运行代码。
相关代码
def Functie_Maak_Snelkoppeling(snelkoppeling_map, listing_map, shortcut_name): creds = service_account.Credentials.from_service_account_file('C:/.../creds.json') service = build('drive', 'v3', credentials=creds) file_metadata = { 'name': shortcut_name, 'mimeType': 'application/vnd.google-apps.shortcut', 'parents': [listing_map], 'shortcutDetails': { 'targetId': snelkoppeling_map } } service.files().create(body=file_metadata).execute()
内容的提问来源于stack exchange,提问作者Pieter-Jan Roex
相关产品推荐
相关产品推荐

