【问题标题】:403 error - The Caller does not have permisson403错误-调用者没有权限
【发布时间】:2016-04-18 06:35:44
【问题描述】:

我想从我的 chrome 扩展程序中使用 Google Execution Api。

在下面的页面上,有一个表单来测试执行 api 请求,但是当我发送请求时,我收到 403 错误作为响应。

发布此问题的人似乎已经解决了他的问题,这可能与我的问题相同。 Why does my apps script deployed as API executable return Permission Denied?

但是,我无法解决这个错误。请指导我帮我解决这个错误。

请求

这是我在申请表中输入的内容。

https://developers.google.com/apps-script/execution/rest/v1/scripts/run#try-it

响应

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

项目密钥:MVO00WF1oNYdJ7YvOZGxXh_z7UcVTY4Um

范围

我使用电子表格 API,因此我添加电子表格范围作为 OAuth 2.0 的附加范围。

code.gs

这是要调用的示例函数代码。

// This function does nothing. Just a test.
function myFunction(data) {

    var sheet = SpreadsheetApp.getActiveSheet();

    return "success!!";

}

与项目关联的脚本

附加信息

  1. 我将项目部署为 API 可执行文件。
  2. 我在开发者控制台上启用了执行 API。
  3. 我在开发者控制台上创建了 OAuth 2.0 客户端 ID。

参考

https://developers.google.com/apps-script/guides/rest/api#limitations

【问题讨论】:

  • 您的问题是如何解决的?

标签: javascript google-chrome-extension google-apps-script google-chrome-app google-apps


【解决方案1】:

脚本是公开的还是仅供您使用?我收到了这个错误,当我公开脚本时它得到了解决。我正在做一个 Android 应用程序,所以答案可能并不完全适用。

【讨论】:

  • 不公开。它仅供我使用。我认为我不应该在我的情况下公开它。
【解决方案2】:

我在浏览 Google 提供的快速入门文档时遇到了类似的问题。我注意到您的范围中有两个项目。小心将第二个作用域添加到数组中。对我来说,我使用的是node.js quickstart,所以第 10 行看起来像这样:

var SCOPES = ['https://www.googleapis.com/auth/drive', 'https://www.googleapis.com/auth/spreadsheets'];

另外,正如上面一行(第 8-9 行)所表明的,我必须保存我以前的凭据。转到您的主目录并找到(隐藏的)文件夹 .credentials。对我来说,命令是:

 me@mydrive:~/.credentials $ rm script-nodejs-quickstart.json 

我这样做了,我重新运行了我的脚本,获得了授权,并且一切正常。

【讨论】:

    【解决方案3】:

    您的403 错误表明您在服务帐户的身份验证中错误或遗漏了某些配置。确保应用脚本与正确的开发控制台项目相关联。 该脚本应与与所使用的OAuth 2.0 客户端 ID 对应的开发控制台项目 ID 相关联(此开发控制台项目还应启用“Apps Script Execution API”)。

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

    【讨论】:

      【解决方案4】:

      我昨天遇到了同样的问题:虽然我做的一切都是正确的,但我得到了同样的错误。

      我通过删除 .credentials 文件并重新运行代码解决了这个问题。如果之前没有这样做,请尝试一下。

      【讨论】: