通过UrlFetchApp统一调用Google Cloud Endpoint的不同电子表格中的客户ID

时间:2018-02-22 18:07:08

标签: google-apps-script google-cloud-endpoints

我有这种情况:

  • 使用基于Google App Engine标准应用程序的Google Cloud Endpoints提供数据的后端
  • 一个App脚本项目库,作为主脚本的“核心”,构建所有逻辑
  • Google电子表格中的有界脚本,它只是调用库进行处理,从工作表中提供值

使用UrlFetchApp

将从工作表中检索到的数据发送到Google Cloud Endpoints(进行处理)
var url = ... // url of Google Cloud Endpoints;
var options = {
  'headers': { 
    "Authorization": 'Bearer ' + ScriptApp.getOAuthToken()
  }
};
var fetch = UrlFetchApp.fetch(url, options);

端点处于OAuth身份验证之下,因此调用脚本的clientId(在创建AppsScript时,只要是云项目,就会自动生成)需要列入白名单。

每个不同的用户都需要拥有自己的电子表格,我现在正在创建电子表格的副本,我将其分享给每个用户。通过这种方式,有界脚本也会被复制,主要的处理代码仍保留在“核心”项目中,该项目在绑定脚本中作为库导入。

问题在于:每次复制电子表格时,都会生成一个新的clientId,因此我需要将Cloud Endnpoints值中的每个值列入白名单。

因为这种逻辑是不可持续的(我有大约100个用户),我正在寻找一种方法来使用库的clientId(在所有Spreadsheets之间共享)来执行http连接,因此后端配置是有限的只有一个值。

这种配置是否可行?

1 个答案:

答案 0 :(得分:1)

我不确定作为端点工程师的Apps脚本方面,因此我将介绍端点端解决方案,其中我可以想到两个。

  1. 在servlet init参数中,将clientIdWhitelistEnabled设置为false以允许任何客户端ID使用端点。
  2. 如果您想要一个动态白名单解决方案,您可以编写自己的com.google.api.server.spi.config.Authenticator类来检查数据库的客户端ID,而不是硬编码的注释。