Google Apps Script Web App 权限设为域名/仅本人时HTTP请求授权失败
解决Google Apps Script Web App权限限制下的HTTP请求访问问题
我之前也踩过一模一样的坑!当把Web App权限从「任何人,甚至匿名」改成「仅我的域名」或者「仅我自己」后,直接用HTTP请求调用就失败,浏览器能访问是因为已经有登录会话自动带了凭证,但纯HTTP请求得手动处理OAuth2授权,这里几个关键步骤你可能没踩对,我给你梳理下:
一、先确认OAuth2令牌的权限范围(Scopes)是否正确
- 你必须确保请求的令牌包含
https://www.googleapis.com/auth/script.webapp.deploy这个核心权限范围,如果你的脚本还调用了其他Google服务(比如Sheets、Drive),也要把对应的scopes加上,比如https://www.googleapis.com/auth/spreadsheets。 - 在Google OAuth Playground操作时,一定要先添全这些scopes再走授权流程,漏了Web App的专属scope肯定会失败。
二、请求时必须正确携带令牌
- 不管你用curl、Postman还是代码里的请求库,都得在请求头里加上
Authorization: Bearer {你的访问令牌},注意Bearer后面有个空格,别写错格式。 - 给你举个curl的示例:
curl -H "Authorization: Bearer YOUR_ACCESS_TOKEN" "https://script.google.com/macros/s/你的WebApp部署ID/exec"
三、针对「仅我自己」权限的特殊注意点
- 如果权限设为「仅我自己」,那获取令牌的账号必须是脚本的所有者账号,哪怕是同域名的其他账号都不行,因为只有所有者能访问。
- 要是想用服务账号来调用,得先给服务账号授权访问你的脚本,并且如果是Workspace域名的话,要在管理后台启用域范围授权,让服务账号能模拟你的身份执行。
四、排查令牌有效性
- 你可以验证令牌是否有效:把令牌放到
https://www.googleapis.com/oauth2/v3/tokeninfo?access_token=YOUR_TOKEN里发GET请求,看看返回的scope字段是否包含你需要的权限,以及expires_in是否还在有效期内。 - 如果令牌过期了,记得重新刷新或者重新获取,别拿着过期的令牌死磕。
五、别忽略部署时的「执行权限」设置
- 部署Web App的时候,「执行权限」选什么很关键:如果权限设为「仅我的域名」,选「访问该Web App的用户」会更合理,这样域名内用户的令牌就能正常调用;如果选「我自己」,那不管谁访问都是以你的身份执行,这时候调用者的令牌需要能代表你的身份(比如用服务账号模拟)。
最后,要是还是不行,去脚本的「执行日志」里看看,请求有没有到达脚本,或者有没有权限相关的错误信息,日志里通常会给出具体原因,比如令牌权限不足、账号不在域名内之类的。
内容的提问来源于stack exchange,提问作者FatFingersJackson
相关产品推荐
相关产品推荐

