为什么我的应用程序脚本部署为API可执行文件返回Permission Denied?

时间:2015-10-03 08:24:16

标签: google-apps-script execution-api

我在脚本编辑器中创建了一个脚本,将其发布为" Deploy as API executable"。在这个脚本中,我向我的工作表提供了一个doc_id,并定义了一个从该工作表中获取数据的函数。

然后我去https://developers.google.com/apps-script/execution/rest/v1/scripts/run测试执行API。我添加了范围,授权应用程序并尝试了它。我收到以下错误消息:

"error": {
  "code": 403,
  "message": "The caller does not have permission",
  "status": "PERMISSION_DENIED"
}

有人能告诉我我做错了吗?

6 个答案:

答案 0 :(得分:23)

确保应用脚本与正确的开发控制台项目相关联。

该脚本应与使用的OAuth 2.0客户端ID对应的开发控制台项目ID相关联(此开发控制台项目还应具有" Apps脚本执行API"已启用)。

要更改应用脚本的开发者控制台项目,请选择以下菜单项:资源>开发者控制台项目......

在此屏幕上输入开发控制台的项目编号。

答案 1 :(得分:8)

即使一切正常,您也可以通过"devMode":true获得该错误。 多亏了这一点,当我尝试为其他用户部署时,我浪费了半天时间。

仅供将来参考。

答案 2 :(得分:3)

您只需将服务帐户用户添加为项目的编辑器

要添加的服务帐户中的电子邮件看起来像这样 {project-name}@{project-name}.iam.gserviceaccount.com

答案 3 :(得分:2)

我混合了你的所有建议,而且我需要使用非过时的#39;项目的ID。当我发布脚本时,它会给我一个ID,只要所有者运行例程,我就会成功使用该ID,并且仅在Google Chrome中使用(如果我在Edge上尝试它就会失败)。当我发布并与其他用户一起尝试时,它会停止工作。我打开脚本,转到文件/项目属性,然后复制更长的脚本ID。然后,例程开始为任何用户工作。在下图中,我用红色表示单独为开发人员工作的密钥,在绿色表示适用于所有用户的密钥(他们在purpouse中被剪切,我的环境是西班牙语,因此实际翻译的选项可能会有所不同,抱歉)

Project properties keys

我认为值得总结一下:

  1. 我按照' Using the execution API'和quickstarts将我的脚本发布为执行API。 (创建脚本,启用Google Apps脚本执行API,每个人都使用Access发布为API可执行文件)enter image description here
  2. 我在文件/分享:API sharing settings
  3. 上让所有人都可以看到该脚本
  4. 我确保devMode在我的通话中未设置为true。这里是JavaScript调用snipet:JavaScript call snippet
  5. 我确保在OAuth请求期间包含了项目中的所有范围: API scopes API OAuth call
  6. 我必须等待几分钟才能获得所有安全权利(即OAuth凭证)
  7. 基本上,这些是我需要遵循的所有必要步骤才能使脚本运行起来。希望能帮助到你。最后,我希望您看到我失败时及成功时看到的内容:API call fail API call success

    谢谢!

答案 4 :(得分:1)

我也遇到了错误,所有内容都是相关联的...经过一段时间的调查后,我发现表格应该通过链接分享。这是googleapis v4的限制。

答案 5 :(得分:0)

我遇到了同样的权限问题,我通过将google工作表的状态更改为public来解决了这个问题。现在我可以使用GET方法读取数据