You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

调用Google Apps Script API遇403权限错误,求排查指导

排查Google Apps Script API调用时的403权限错误

你在Flutter里用服务账号调用Google Apps Script API碰到403权限问题,虽然已经做了不少配置,但还是踩坑了对吧?结合你的代码和操作步骤,给你梳理几个最容易忽略的排查方向:

  • 给服务账号添加Apps Script项目的访问权限
    就算共享了GCP项目,Apps Script项目本身的权限是独立的。你得打开你的Apps Script项目,点击右上角的「共享」,把代码里的client_email那个服务账号邮箱加进去,至少给「编辑」权限——只给查看者权限的话,服务账号没法运行脚本。

  • 检查API可执行文件的部署权限
    部署API可执行的时候,别把权限设成「仅限我自己」!重新部署一次,选择「API可执行」类型后,权限要选「任何人」(或者根据你的需求选组织内可访问,但服务账号得在这个范围内),不然服务账号根本访问不到这个部署的接口。

  • 验证脚本项目的GCP绑定细节
    打开Apps Script项目的「项目设置」,勾选「显示appsscript.json清单文件」,打开这个文件确认:

    • projectId和你服务账号所在的GCP项目ID完全一致
    • oauthScopes包含你代码里用到的那些范围(尤其是script.scriptappscript.external_request
      另外去GCP控制台,给服务账号添加上「Apps Script API Executor」角色,确保它有script.scripts.run的权限。
  • 不要忽略脚本操作资源的权限
    如果你的projectSummary函数要操作Google Sheets、Drive这些资源,光在scopes里加权限还不够,得给服务账号共享对应的Sheet或文件——比如脚本要读某个Sheet,就得把服务账号邮箱加到那个Sheet的共享列表里,给它至少查看权限。

  • 完善代码的错误捕获
    你现在的代码没处理API返回的具体错误,建议修改scripts.run的调用逻辑,打印详细错误信息:

    service.scripts.run(request, "1C9zxs82nICdyH_O8BMIU9vLpFLmDIZmzw5-3HVnJRvusrr8zMa8nIKXV")
        .then((response) {
      if (response.error != null) {
        print("API Error Details: ${response.error!.details}");
      } else {
        print("Execution Result: ${response.response}");
      }
    }).catchError((err) {
      print("Request Failed: $err");
    });
    

    这些详细信息能帮你更快定位到底是权限范围错了,还是资源访问被拒绝。

  • 核对服务账号密钥格式
    检查代码里的private_key,确保完整包含-----BEGIN PRIVATE KEY----------END PRIVATE KEY-----,换行符也别丢——有时候复制密钥的时候会自动去掉换行,导致身份验证失败,间接触发403错误。

内容的提问来源于stack exchange,提问作者Madhusudhan Sahni

火山引擎 最新活动