首页 > 解决方案 > 使 Cloud Run 服务成为 Apps 脚本项目的目标的困难——受众和范围

问题描述

我无法创建 OpenID Connect 身份令牌以作为承载令牌发送给云运行请求。从应用程序脚本中,我无法使用 (ScriptApp.getIdentityToken()) 制作令牌,该令牌具有 Google 前端将允许通过的受众。当我安排脚本发送一个令牌而不是我用gcloud print-identity-token--除了观众之外的相同--调用成功时。

注意我相信这可能与此处看到的问题相同:Securely call a Google Cloud Function via a Google Apps Script

通过 nodejs 使用不记名令牌进行谷歌云身份验证

一种解决方法建议重组 GCP/Apps 脚本项目。其他人大多使用服务帐户,并使用服务帐户密钥。我相信可以使用 IAM 和使用 google auth 来生成可用的 SA 身份令牌(短期服务帐户凭证),但我无法证明它。

我目前正在解决这个问题,但我想了解基本问题。我认为这与云运行服务的托管项目的 Oauth 同意屏幕有关,并且无法将关联的 Web 应用程序客户端 ID 添加为范围。

标签: google-oauthopenidgoogle-cloud-run

解决方案


在 Cloud Run 文档中,有一介绍了从 GCP 之外的其他服务对 Cloud Run 执行经过身份验证的调用。该过程如下:

  1. 自签名服务帐户 JWT,并将 target_audience 声明设置为接收服务的 URL。

  2. 将自签名的 JWT 交换为 Google 签名的 ID 令牌,该令牌应将 aud 声明设置为上述 URL。

  3. 在对服务的请求中将 ID 令牌包含在 Authorization: Bearer ID_TOKEN 标头中。

步骤 1 可以按照此处所述执行,同时将 aud 声明设置为接收服务的 URL。我相信 ScriptApp.getIdentityToken() 没有为 JWT 设置正确的受众

对于第 2 步,我相信您应该使用POST适当https://oauth2.googleapis.com/token的参数grant_typeassertion. 这在此处的“发出访问令牌请求”部分中进行了说明

生成的令牌应在步骤 3 中使用


推荐阅读