【发布时间】:2020-05-13 17:48:37
【问题描述】:
如何通过 Google Apps 脚本安全地调用 Google Cloud Function?
✅我有一个 Google Cloud Function,我可以通过 https://MY_REGION-MY_PROJECT.cloudfunctions.net/MY_FUNCTION 访问它,并且我希望允许某些用户通过 Apps 脚本调用它。
✅ 为了保护 Cloud Function,我已将 Cloud Function Invoker 设置为仅包含已知电子邮件(例如 USER@COMPANY.com,这是一个有效的 Google 电子邮件)。
✅ 我可以通过 curl 成功调用 Cloud Function,同时使用此电子邮件登录 gcloud,方法是运行:curl https://MY_REGION-MY_PROJECT.cloudfunctions.net/MY_FUNCTION -H "Authorization: Bearer $(gcloud auth print-identity-token)"。
✅ 我已在我的 Apps 脚本清单中授予以下 oauthScopes:
"https://www.googleapis.com/auth/script.external_request""https://www.googleapis.com/auth/userinfo.email""https://www.googleapis.com/auth/cloud-platform"
⛔️ 但是,当我尝试通过 Google Apps 脚本调用 Cloud Function 时,在使用电子邮件 USER@COMPANY.com 登录时,我无法调用它,而是返回了 401。这是我尝试调用的方式云函数:
const token = ScriptApp.getIdentityToken();
const options = {
headers: {'Authorization': 'Bearer ' + token}
}
UrlFetchApp.fetch("https://MY_REGION-MY_PROJECT.cloudfunctions.net/MY_FUNCTION", options);
ℹ️我也尝试了以下方法:
- 使用
ScriptApp.getOAuthToken() - 添加额外的 oauthScopes,例如
openid。 - 创建一个 OAuth 客户端 ID,并将
https://script.google.com设置为授权的 Javascript 源。 - 部署 Apps 脚本。
- 彻底绝望地向天空呼喊
【问题讨论】:
-
您需要同步回答吗?您每 100 分钟的通话次数是否可能超过 16 个?
-
@guillaumeblaquiere - 我认为 HTTP 请求不可能有同步的答案,我也不需要;不,这个调用不可能每 100 分钟有超过 16 个调用。
标签: google-apps-script oauth oauth-2.0 google-cloud-functions google-oauth