如何从另一个脚本触发 Web App?

How to trigger a Web App from another script?

我部署了一个 Google Apps Script Web App,它使用服务帐户访问 Google 目录。我部署了它,每个人都可以访问该应用程序,并且该应用程序在执行它的用户下运行。

我想通过从属于 Google 表单的另一个应用程序脚本调用 POST 触发器来触发此 Web 应用程序。像这样:

function onPost(){
var data = {
'name': 'Bob Smith',
'age': 35,
'pets': ['fido', 'fluffy']
};
var options = {
 'method' : 'post',
 'contentType': 'application/json',.
 'payload' : JSON.stringify(data)
};
var resp = UrlFetchApp.fetch('https://script.google.com/a/my.domain.com/m.../exec', options);

}

不过,我回来了:

Exception: Request failed for https://script.google.com returned code 401.

当我尝试将 GET 触发器与某些查询参数一起使用时,返回的响应看起来像 google 登录页面。

如何从同一域中的另一个应用程序脚本触发我的网络应用程序?


使用令牌更新代码:

function onPost(){
var token = ScriptApp.getOAuthToken();
var data = {
'name': 'Bob Smith',
'age': 35,
'pets': ['fido', 'fluffy']
};
var options = {
 'headers':'Bearer '+token,
 'method' : 'post',
 'contentType': 'application/json',.
 'payload' : JSON.stringify(data)
};
var resp = UrlFetchApp.fetch('https://script.google.com/a/my.domain.com/m.../exec', options);

}

返回的响应看起来像 Google sign-in 页面

这是因为您收到的 401 Unauthorized HTTP status code prompting you that the request should contain valid user credentials. Since Google primarily uses OAuth 2.0, you will need to include an Authorization header 设置为 Bearer YourTokenHere

最近,OAuth 令牌可以通过 getOAuthToken(), which will contain a claim in its payload that will match scopes 授予发出请求的应用程序(自动或显式)获得。

您也可以使用官方 OAuth 2.0 library if you need more fine-grained control over token management, or build from scratch if you feel like it, the Utilities class 拥有生成自定义 JWT 所需的一切。

我部署它每个人都可以访问该应用程序并且该应用程序在执行它的用户下运行

Web 应用程序在两个权限设置中有几个 deployment modes

  1. “执行应用程序”
    • 用户访问网络应用程序
  2. “谁有权访问该应用程序”
    • 只有我自己
    • 任何人
    • 任何人,甚至匿名

Google 不会让你只是剥离安全性并暴露一个 public API(这是一件好事),所以如果你希望每个人都能够访问您的 Web 应用程序 未经授权,您将必须自己授权脚本并让您的用户在您的授权下访问该应用程序

只有一种选项组合允许您这样做:

Execute as me, access to anyone, even anonymous