GCP App Script API Auth仅对两个用户有效(代码:403,“ PERMISSION_DENIED”)

时间:2020-10-08 21:08:00

标签: google-apps-script google-cloud-platform http-status-code-403 google-apps-script-api

我已经通过Google Cloud Platform将基于Google Apps脚本的软件部署到多个用户。大多数功能都是通过每x分钟运行一次的触发器来实现的。但是,当前有一个脚本是通过Apps Script API调用的。

昨天我做了一些更改。请参阅我能够回答的这个堆栈溢出问题:Google Apps Script API Authorizations for DriveApp.getFileById。 (这是通过API调用的第二个脚本,但尚未部署太多。)

这可能会使刚加入的两个用户(几天前才加入的两个)“破坏”了通过Apps Script API调用脚本的能力。其他用户很好,我已经比较了客户端的所有功能,所有用户,而且所有用户似乎都是完全一样的。

这是客户端(在runOnEdit中)调用Apps脚本API的代码:

var token = ScriptApp.getOAuthToken();
var header = {
  "Content-Type": "application/json",
  "Authorization": "Bearer " + token,
};

var parms = [id];

var data = {
  "function": "checkSheet",
  "parameters": parms,
  "devMode": false,
}

var options = {
  "method":"POST",
  "headers": header,
  "muteHttpExceptions": true,
  "payload": JSON.stringify(data)
};

var response = UrlFetchApp.fetch(url, options);

对于manifest / appsscript.json文件,我有:

{
  "timeZone": "America/New_York",
  "dependencies": {
  },
  "webapp": {
    "access": "MYSELF",
    "executeAs": "USER_DEPLOYING"
  },
  "exceptionLogging": "STACKDRIVER",
  "runtimeVersion": "V8",
  "oauthScopes": [
    "https://www.googleapis.com/auth/drive",
    "https://www.googleapis.com/auth/script.external_request"
    ]
}

昨天刚刚为所有用户添加了oauthScopes部分(一个人工作了,一个人没有工作)-上面引用的我的堆栈溢出问题的答案。我还为受影响的两个用户添加了许多不同的oauthScopes,但是并没有帮助。

对于仍在运行的所有用户,在其客户端(位于上面的代码所在的位置),其GCP项目中没有启用的API。看到这张图片: [![在此处输入图片描述] [1]] [1]

它们的OAuth同意屏幕只是默认屏幕-类型:公共,默认范围等

但是,今天早上,对于两个没有工作的用户,当上面的代码运行并调用Apps Script API脚本时,响应为:

response = {
  "error": {
    "code": 403,
    "message": "Apps Script API has not been used in project 746982115040 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/script.googleapis.com/overview?project=746982115040 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.",
    "status": "PERMISSION_DENIED",
    "details": [
      {
        "@type": "type.googleapis.com/google.rpc.Help",
        "links": [
          {
            "description": "Google developers console API activation",
            "url": "https://console.developers.google.com/apis/api/script.googleapis.com/overview?project=746982115040"
          }
        ]
      },
      {
        "@type": "type.googleapis.com/google.rpc.ErrorInfo",
        "reason": "SERVICE_DISABLED",
        "domain": "googleapis.com",
        "metadata": {
          "consumer": "projects/746982115040",
          "service": "script.googleapis.com"
        }
      }
    ]
  }
}

但是,这与正在工作的用户没有什么不同-他们没有启用Apps Script API。

因此,我为发生这种情况的两个用户之一启用了Apps Script API。现在,执行完此操作后,我收到以下消息:

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

任何帮助将不胜感激!谢谢!

1 个答案:

答案 0 :(得分:2)

首先,我不得不说,学习GCP及其周围的所有授权都很困难。有太多事情可能是导致这种类型问题的原因。

在我的情况下,最终导致“客户端”的应用程序脚本项目仍然是“由应用程序脚本管理的Cloud Platform项目”,而不是与API关联的常规GCP项目。

要解决此问题,请在Google Apps脚本代码编辑器中查找进行API调用的脚本,然后转到菜单/资源/ Cloud Platform项目。 enter image description here

找到要与之关联的GCP项目编号-在我的情况下,这是我部署API的“服务器”项目编号。

单击“设置项目”按钮。

现在我的API调用有效了!