oauth2.0 从应用脚本调用Google Cloud函数

pepwfjgg  于 2022-12-22  发布在  Go
关注(0)|答案(2)|浏览(150)

我是相当新的GCP世界,我在这里问只是有一些其他信息对我的问题。
我想创建一个HTTP谷歌云功能,执行一些特定项目的操作。
同样,我需要从外部服务调用这个函数(比如说从Gsheet调用,拥有这个函数的SA可以编辑它)。
我看到有GoogleAppScripts,特别是URLFetchApp服务,我的想法是从那个服务调用那个函数。
为了进行身份验证,我看到需要库OAuth2,在这种情况下,是否需要为管理函数的帐户创建ClientID和ClientSecret?如果是这样,AppScript如何创建相关服务?
先谢谢你。

zengzsys

zengzsys1#

你可以通过google apps脚本查询身份令牌,然后用它来调用gcloud函数。
我们要做的第一件事是拥有一个cloud函数,并确保您拥有调用它的权限(尝试使用其他方法执行它)。
然后,转到您的Apps Script项目清单并设置至少2个特定范围:

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

openid允许我们获取一个标识令牌来调用函数,.../script.external_request允许我们使用fetch。
然后可以添加代码:

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

// use response

如参考文献中所述,ScriptApp.getIdentityToken()返回我们需要的OpenID令牌。

参考文献

sd2nnvve

sd2nnvve2#

这和@Martí的回答一样有效,但我花了一天时间,因为我错过了一个微小但至关重要的步骤:**您需要在制作应用程序脚本后重新部署云函数,否则将无法验证客户端ID!**当您将应用程序脚本与同一GCP项目关联时,将为其分配此ID,因此请在此之后重新部署函数。

相关问题