Vue3/JS调用Google Sheets API报403 PERMISSION_DENIED权限错误
问题描述
- 在Google Cloud控制台创建了API密钥,删除旧密钥重新生成后问题仍存在
- 控制台配置截图:

- 调用接口代码如下:
export const getSheet= async () => { try { const sheetId ='xxxxxxx' const tabName = 'myTab' const accountKey = 'xxxxxxx' const url =' https://sheets.googleapis.com/v4/spreadsheets/'+ sheetId +'/values/'+tabName+'?key='+ accountKey console.log(url) const response = await fetch(url); console.log(response); return ''; } catch (error) { console.log(error); } finally { console.log('finally'); } };
- 实际发送的请求地址:
https://sheets.googleapis.com/v4/spreadsheets/xxxxxxx/values/myTab?key=xxxxxxx
- 所有配置调整后接口始终返回错误:
error: {code: 403, message: "The caller does not have permission", status: "PERMISSION_DENIED"}
- 已尝试过公开社区内同主题的多个常见解决方案,均未生效,寻求可行修复方法。
解决方案
按优先级逐个排查,90%的同类问题都是前两个原因导致的:
- 确认目标表格的共享权限
API密钥本身不绑定任何Google账号身份,仅用于标识你的调用项目、统计配额,因此只能访问已开启公开访问的表格,这是最容易被忽略的坑——很多人误以为API密钥关联了自己的云项目就能访问自己账号下的私有表格,实际逻辑完全不是这样。打开目标Google表格,点击右上角「共享」按钮,将通用访问权限设置为「知道链接的任何人」,权限等级选择「查看者」即可满足读值需求。
注意:如果表格存放在企业/组织共享盘内,组织管理员可能禁止文件对外公开,这种场景下API密钥鉴权完全不可用,只能更换鉴权方式 - 确认Google Sheets API已在当前项目启用
打开Google Cloud控制台,进入「API和服务」-「已启用的API和服务」页面,确认当前选中的是你创建API密钥对应的项目,且列表中存在「Google Sheets API」且状态为已启用。仅创建API密钥但未启用对应API时,百分百会报权限错误。 - 检查API密钥的限制配置
进入「API和服务」-「凭据」页面,点击你正在使用的API密钥进入详情页:
- 应用限制:本地调试阶段可以先临时设置为「无」,确认接口调通后再根据需求添加网站/IP限制,避免限制规则拦截合法请求
- API限制:选择「限制密钥」,在下拉API列表中必须勾选「Google Sheets API」,未勾选对应API的密钥无法调用Sheets接口
- 修正代码细节问题
你贴的代码中拼接的url字符串开头多了一个多余空格,虽然多数情况下fetch会自动处理,但建议手动删除避免异常。如果工作表名称包含空格、特殊字符,需要先对tabName做URL编码再拼接。 - 等待配置生效
Google Cloud侧的权限、API配置存在1-3分钟的生效延迟,所有配置修改完成后等待几分钟再发起调用,不要改完立刻测试。
如果你的业务场景不允许公开表格,直接放弃API密钥鉴权方案,改用服务账号鉴权:在Google Cloud控制台创建服务账号,下载服务账号密钥文件,将服务账号的邮箱地址添加到目标表格的共享列表中并授予查看权限,调用时使用服务账号生成临时访问令牌携带在请求头中即可,这种方式不需要公开表格,安全性更高,适合生产环境使用。
内容的提问来源于stack exchange,提问作者CoffeePeddlerIntern
相关产品推荐
相关产品推荐

