如何从 Google OAuth 2.0 Playground 运行 Google App Script 函数 |调用者没有权限

How to run Google App Script function from Google OAuth 2.0 Playground | The caller does not have permission

我创建了一个新脚本,它在我的 google 帐户上创建了 "Google Form"。以下是示例代码:

function myFunction() {
var form = FormApp.create('New Form');
var item = form.addCheckboxItem();
item.setTitle('What condiments would you like on your hot dog?');
item.setChoices([
  item.createChoice('Ketchup'),
  item.createChoice('Mustard'),
  item.createChoice('Relish')
]);
form.addMultipleChoiceItem()
.setTitle('Do you prefer cats or dogs?')
.setChoiceValues(['Cats','Dogs'])
.showOtherOption(true);
form.addPageBreakItem()
.setTitle('Getting to know you');
form.addDateItem()
.setTitle('When were you born?');
form.addGridItem()
.setTitle('Rate your interests')
.setRows(['Cars', 'Computers', 'Celebrities'])
.setColumns(['Boring', 'So-so', 'Interesting']);

Logger.log('Published URL: ' + form.getPublishedUrl());
Logger.log('Editor URL: ' + form.getEditUrl());
}

下一步,通过发布 > 部署为 API 可执行文件使 API 可执行文件

现在,如果我直接从 Google 应用程序脚本执行代码,它工作得非常好,并且也正在创建表单。

现在 我在执行来自 Google OAuth 2.0 Playground 的代码时遇到了问题。为此,我遵循了以下步骤:

  1. 访问https://console.developers.google.com并创建一个新项目
  2. 在左侧菜单中,select "Library"
  3. 在应用程序脚本库中,搜索"Apps Script API"并启用它

  4. 接下来,转到凭据菜单并单击 "Create Credentials" > OAuth 客户端 ID

  5. 在下一个屏幕上,select Web 应用程序

  6. 输入新 Web 应用程序的名称

  7. 在"Authorised JavaScript origins"设置“http://localhost

  8. 在 "Authorised redirect URIs" 中设置“https://developers.google.com/oauthplayground”,因为目前我们需要在 Google OAuth Playground 上进行身份验证响应。然后点击创建。

  9. 成功后,您将收到您将在 Google OAuth Playground 中提供的帐户的 "Client ID" 和 "Client secret" 以验证其他用户应用程序.

  10. 现在访问 https://developers.google.com/oauthplayground 并单击设置齿轮。在下拉菜单中,选中 "Use your own OAuth credentials" 并输入在第 9 步收到的 "OAuth Client ID" 和 "OAuth Client Secret"

  11. 接下来,在 "Step 1 Select & authorize APIs" 部分,select "Apps Script API v1" 和 select “https://www.googleapis.com/auth/forms”选项,然后单击授权

  12. 接下来它会询问您想要访问其 selected 范围的帐户的授权。在这里,我使用创建代码的 "App Script" 和生成 "Client ID" 和 "Client Secret" 的相同帐户。

  1. 上面的步骤会生成"Authorization code",你还可以生成"Refresh token"和"Access token"。

  2. 接下来,我们必须使用服务来执行google应用程序脚本代码。点击 "List Possible Operations" 然后 select "Run Scripts"

    1. 接下来将生成一个语法,询问您可以从 google 应用程序脚本项目中找到的脚本 ID。为此,在 google App Script 项目上,单击“文件”>“项目属性”,最后将打开一个涉及脚本 ID 的弹出窗口

  1. 在PlayGround中输入脚本ID,然后点击"Enter Request Body"按钮设置请求Body。了解请求体参数,参考文档https://developers.google.com/apps-script/api/reference/rest/v1/scripts/run

  1. 现在点击"Send Request"

完成上述所有步骤后,我们收到以下身份验证错误:

POST /v1/scripts/{ScriptId}:run HTTP/1.1
Host: script.googleapis.com
Content-length: 95
Content-type: application/json
Authorization: Bearer {your authentication}
{
  "function": "myFunction",
  "parameters": [],
  "sessionState": "Test",
  "devMode": true
}
HTTP/1.1 403 Forbidden
Content-length: 126
X-xss-protection: 1; mode=block
X-content-type-options: nosniff
Transfer-encoding: chunked
Vary: Origin, X-Origin, Referer
Server: ESF
-content-encoding: gzip
Cache-control: private
Date: Fri, 26 Oct 2018 13:44:57 GMT
X-frame-options: SAMEORIGIN
Alt-svc: quic=":443"; ma=2592000; v="44,43,39,35"
Content-type: application/json; charset=UTF-8
{
  "error": {
    "status": "PERMISSION_DENIED", 
    "message": "The caller does not have permission", 
    "code": 403
  }
}

感谢提前解决

要解决此问题,您需要为您在 App 脚本中创建的项目创建凭据,而不是在 Google 控制台中创建新项目。因此跳过问题中提到的步骤 1:

  1. 访问https://console.developers.google.com并创建一个新项目

并打开 App Script 项目。在当前情况下,项目是 "Test Google Form API Personal"

接下来,通过单击三点选项菜单然后 select "Cloud Project"

打开项目 "Cloud Project"

现在 Google 控制台屏幕将打开。创建已打开项目的 OAuth 凭据。