问题 可以通过服务帐户调用Google Apps脚本执行API吗?


我想用一个 服务帐户 通过Apps脚本访问Google表格 执行API但是从文档中不清楚这是否受支持。

我尝试过的步骤(从Execution API获得403状态)是:

  1. 创建一个新的(未绑定的)Apps脚本
  2. 访问链接的Developer Console项目
  3. 启用Execution API
  4. 在同一个项目中创建一个新的服务帐户(下载 生成的JSON文件)
  5. 创建新的Google表格并与服务帐户共享 电子邮件地址 (这是我最不确定的一步
  6. 编写一个从电子表格中读取的应用程序脚本函数
  7. 从脚本编辑器手动运行脚本(以设置范围 在脚本上正确)
  8. 发布脚本(“Deploy as API executable”),使其可访问 对任何人'
  9. 使用服务帐户和范围设置新的OAuth2令牌 链接到脚本(在我们的例子中) “https://www.googleapis.com/auth/spreadsheets“)
  10. 尝试使用令牌调用Execution API

这是我得到的回应:

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

这不起作用,因为服务帐户永远无法访问Execution API吗?或者上面的步骤有问题吗?


1149
2017-10-23 15:34


起源

你可能错过了令牌上的谷歌脚本执行api范围 - Zig Mandel
谢谢 - 我试图找到这样的范围,但我不能。列表中唯一的 适用于Google API的OAuth 2.0范围 用于通过Execution API访问服务,而不是Execution API本身。我还发现文档说“在应用程序代码中,为API调用生成OAuth访问令牌。这不是API本身使用的标记,而是脚本所需的标记。” - 我读到(可能是错误的)意味着身份的断言是脚本消耗的服务。 - Stephen L
答案是否解决了您的问题? 能够 您将执行API与服务帐户一起使用? - Party Ark
这里有同样的问题。项目和脚本的ID相同。 API执行已启用。用户可以访问该脚本,但仍然存在问题。 - Maksim Luzik
@StephenL你有没有找到解决这个问题的方法?我目前遇到同样的问题。 - Busata


答案:


原始403错误表示您错误地为您的服务帐户设置了身份验证。但是,即使您已经开始工作,截至目前(2015年11月10日)您也是如此 不能 通过服务帐户执行应用程序脚本。

这是一个已知错误,正在应用程序脚本中进行跟踪 问题跟踪器


9
2017-11-10 23:26



不幸的是,这是正确的答案。在这里找到这个答案我花了大约3天无意义的试验。感谢@Party Ark最终让我走上了正确的轨道。 - Jpsy
@Jpsy好奇,如果你设法得到跟踪问题描述的400错误?我也面临这个问题,但继续得到403,我有理由相信我的身份验证是正确的。 - Daniel


您的问题可能是脚本与错误的项目(即自己的项目,而不是与您的服务帐户关联的项目)相关联。这是你需要做的:

从Scripts编辑器中选择以下菜单项: 资源>开发者控制台项目

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

比照 这个答案


2
2017-10-28 18:03



谢谢。我担心不是这样 - 我正在使用的开发者控制台项目是使用Apps脚本自动创建的项目,并且服务帐户与同一项目相关联。 - Stephen L
在这种情况下,我建议从开发人员控制台创建一个新项目,启用相关API(可能只是Google Apps脚本执行API和Google Drive API),在该项目下生成新的服务帐户,以及传输脚本(或它的副本)到那个项目。 - BarthesSimpson
此外,您是否使用“部署为API可执行文件”对话框中提供的API ID来调用脚本?您必须使用它而不是工作表本身的ID。 - BarthesSimpson