如何从 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 的代码时遇到了问题。为此,我遵循了以下步骤:
- 访问https://console.developers.google.com并创建一个新项目
- 在左侧菜单中,select "Library"
在应用程序脚本库中,搜索"Apps Script API"并启用它
接下来,转到凭据菜单并单击 "Create Credentials" > OAuth 客户端 ID
在下一个屏幕上,select Web 应用程序
输入新 Web 应用程序的名称
在"Authorised JavaScript origins"设置“http://localhost”
在 "Authorised redirect URIs" 中设置“https://developers.google.com/oauthplayground”,因为目前我们需要在 Google OAuth Playground 上进行身份验证响应。然后点击创建。
成功后,您将收到您将在 Google OAuth Playground 中提供的帐户的 "Client ID" 和 "Client secret" 以验证其他用户应用程序.
现在访问 https://developers.google.com/oauthplayground 并单击设置齿轮。在下拉菜单中,选中 "Use your own OAuth credentials" 并输入在第 9 步收到的 "OAuth Client ID" 和 "OAuth Client Secret"
接下来,在 "Step 1 Select & authorize APIs" 部分,select "Apps Script API v1" 和 select “https://www.googleapis.com/auth/forms”选项,然后单击授权
接下来它会询问您想要访问其 selected 范围的帐户的授权。在这里,我使用创建代码的 "App Script" 和生成 "Client ID" 和 "Client Secret" 的相同帐户。
上面的步骤会生成"Authorization code",你还可以生成"Refresh token"和"Access token"。
接下来,我们必须使用服务来执行google应用程序脚本代码。点击 "List Possible Operations" 然后 select "Run Scripts"
- 接下来将生成一个语法,询问您可以从 google 应用程序脚本项目中找到的脚本 ID。为此,在 google App Script 项目上,单击“文件”>“项目属性”,最后将打开一个涉及脚本 ID 的弹出窗口
- 在PlayGround中输入脚本ID,然后点击"Enter Request Body"按钮设置请求Body。了解请求体参数,参考文档https://developers.google.com/apps-script/api/reference/rest/v1/scripts/run
- 现在点击"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:
- 访问https://console.developers.google.com并创建一个新项目
并打开 App Script 项目。在当前情况下,项目是 "Test Google Form API Personal"
接下来,通过单击三点选项菜单然后 select "Cloud Project"
打开项目 "Cloud Project"
现在 Google 控制台屏幕将打开。创建已打开项目的 OAuth 凭据。
我创建了一个新脚本,它在我的 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 的代码时遇到了问题。为此,我遵循了以下步骤:
- 访问https://console.developers.google.com并创建一个新项目
- 在左侧菜单中,select "Library"
在应用程序脚本库中,搜索"Apps Script API"并启用它
接下来,转到凭据菜单并单击 "Create Credentials" > OAuth 客户端 ID
在下一个屏幕上,select Web 应用程序
输入新 Web 应用程序的名称
在"Authorised JavaScript origins"设置“http://localhost”
在 "Authorised redirect URIs" 中设置“https://developers.google.com/oauthplayground”,因为目前我们需要在 Google OAuth Playground 上进行身份验证响应。然后点击创建。
成功后,您将收到您将在 Google OAuth Playground 中提供的帐户的 "Client ID" 和 "Client secret" 以验证其他用户应用程序.
现在访问 https://developers.google.com/oauthplayground 并单击设置齿轮。在下拉菜单中,选中 "Use your own OAuth credentials" 并输入在第 9 步收到的 "OAuth Client ID" 和 "OAuth Client Secret"
接下来,在 "Step 1 Select & authorize APIs" 部分,select "Apps Script API v1" 和 select “https://www.googleapis.com/auth/forms”选项,然后单击授权
接下来它会询问您想要访问其 selected 范围的帐户的授权。在这里,我使用创建代码的 "App Script" 和生成 "Client ID" 和 "Client Secret" 的相同帐户。
上面的步骤会生成"Authorization code",你还可以生成"Refresh token"和"Access token"。
接下来,我们必须使用服务来执行google应用程序脚本代码。点击 "List Possible Operations" 然后 select "Run Scripts"
- 接下来将生成一个语法,询问您可以从 google 应用程序脚本项目中找到的脚本 ID。为此,在 google App Script 项目上,单击“文件”>“项目属性”,最后将打开一个涉及脚本 ID 的弹出窗口
- 接下来将生成一个语法,询问您可以从 google 应用程序脚本项目中找到的脚本 ID。为此,在 google App Script 项目上,单击“文件”>“项目属性”,最后将打开一个涉及脚本 ID 的弹出窗口
- 在PlayGround中输入脚本ID,然后点击"Enter Request Body"按钮设置请求Body。了解请求体参数,参考文档https://developers.google.com/apps-script/api/reference/rest/v1/scripts/run
- 现在点击"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:
- 访问https://console.developers.google.com并创建一个新项目
并打开 App Script 项目。在当前情况下,项目是 "Test Google Form API Personal"
接下来,通过单击三点选项菜单然后 select "Cloud Project"
打开项目 "Cloud Project"现在 Google 控制台屏幕将打开。创建已打开项目的 OAuth 凭据。