【问题标题】:Call Google Cloud Functions from App Scripts从应用脚本调用 Google Cloud Functions
【发布时间】:2021-03-09 08:11:38
【问题描述】:

我对 GCP 世界还很陌生,在这里我只是想了解一些关于我的问题的其他信息。

我想创建一个 HTTP Google Cloud Function 来对某个项目执行一些操作。

同样,我需要从外部服务调用此函数(比如说从拥有该函数的 SA 可以对其进行编辑的 Gsheet)。

我看到有 GoogleAppScripts,尤其是 URLFetchApp 服务。 我的想法是从该服务调用该函数。

为了进行身份验证,我看到需要 OAuth2 库,在这种情况下,是否有必要为管理该功能的帐户创建 ClientID 和 ClientSecret?如果是这种情况,AppScript 是如何创建相关服务的?

提前谢谢你。

【问题讨论】:

    标签: google-apps-script google-cloud-platform oauth-2.0 google-cloud-functions


    【解决方案1】:

    您可以通过谷歌应用脚​​本查询身份令牌,然后使用它来调用gcloud函数。

    我们要做的第一件事是拥有一个云函数并确保您有权调用它(尝试使用其他方法执行它)。

    之后,转到您的 Apps 脚本项目清单和 set at least 2 specific scopes

    {
      ...
      "oauthScopes": [
        "openid",
        "https://www.googleapis.com/auth/script.external_request"
      ],
     ...
    }
    

    openid 允许我们获取身份令牌来调用函数,.../script.external_request 允许我们使用提取。

    然后就可以添加代码了:

    const response = UrlFetchApp.fetch(
      'https://gcloud-function-url',
      {
        muteHttpExceptions: true,
        headers: {
          'Authorization': `Bearer ${ScriptApp.getIdentityToken()}`
        }
      }
    )
    
    // use response
    

    作为documented in the referenceScriptApp.getIdentityToken()返回我们需要的OpenID令牌。

    参考文献

    【讨论】:

    • 感谢您的回复。如果此工作表由另一个无权访问 GCP 项目的用户管理,是否仍然能够调用所需的函数?
    • 这取决于您的设置。它使用有效用户的身份验证令牌 (see reference)。如果它是已安装的触发器,它将具有创建该触发器的权限。在大多数其他情况下,其他用户。另一种方法是允许匿名调用该函数。在这种情况下,不需要 Authorization 标头。
    • @traveller 真的有效吗?我虽然 getOAuthToken 回复了一个访问令牌,并且要访问您需要一个身份令牌的功能!
    • @guillaumeblaquiere 你是对的。这也意味着您需要手动添加身份令牌,因此它不会影响谁调用该函数。
    • @Martí,如果您知道如何正确安全地实现这一目标,那将非常有价值。在 Google Cloud 和 Workspace(应用脚本、应用表)世界之间可能存在的联系之间,Google Cloud 文档中有一个“黑洞”!!
    猜你喜欢
    • 1970-01-01
    • 2020-03-07
    • 2020-06-29
    • 2014-04-30
    • 1970-01-01
    • 2019-07-25
    • 2021-06-30
    • 1970-01-01
    • 2023-04-07
    相关资源
    最近更新 更多