google-oauth - 使 Cloud Run 服务成为 Apps 脚本项目的目标的困难——受众和范围
问题描述
我无法创建 OpenID Connect 身份令牌以作为承载令牌发送给云运行请求。从应用程序脚本中,我无法使用 (ScriptApp.getIdentityToken()) 制作令牌,该令牌具有 Google 前端将允许通过的受众。当我安排脚本发送一个令牌而不是我用gcloud print-identity-token
--除了观众之外的相同--调用成功时。
注意我相信这可能与此处看到的问题相同:Securely call a Google Cloud Function via a Google Apps Script。
一种解决方法建议重组 GCP/Apps 脚本项目。其他人大多使用服务帐户,并使用服务帐户密钥。我相信可以使用 IAM 和使用 google auth 来生成可用的 SA 身份令牌(短期服务帐户凭证),但我无法证明它。
我目前正在解决这个问题,但我想了解基本问题。我认为这与云运行服务的托管项目的 Oauth 同意屏幕有关,并且无法将关联的 Web 应用程序客户端 ID 添加为范围。
解决方案
在 Cloud Run 文档中,有一节介绍了从 GCP 之外的其他服务对 Cloud Run 执行经过身份验证的调用。该过程如下:
自签名服务帐户 JWT,并将 target_audience 声明设置为接收服务的 URL。
将自签名的 JWT 交换为 Google 签名的 ID 令牌,该令牌应将 aud 声明设置为上述 URL。
在对服务的请求中将 ID 令牌包含在 Authorization: Bearer ID_TOKEN 标头中。
步骤 1 可以按照此处所述执行,同时将 aud 声明设置为接收服务的 URL。我相信 ScriptApp.getIdentityToken() 没有为 JWT 设置正确的受众
对于第 2 步,我相信您应该使用POST
适当https://oauth2.googleapis.com/token
的参数grant_type
和assertion
. 这在此处的“发出访问令牌请求”部分中进行了说明
生成的令牌应在步骤 3 中使用
推荐阅读
- java - 计算基线 y 以在 Android 中的画布上绘制文本
- flutter-test - Flutter 联合插件:如何在每次集成测试后销毁插件
- c# - 如何让 FileSystemWatcher 更可靠
- visual-studio - 视觉工作室代码终端zbash没有发现问题
- typescript - Vue 组件在 VsCodium 上没有显示错误或警告
- velo - 购买计划后特定页面上的直接用户使用 velo 代码
- python - BeautifulSoup 如何用于从网站中提取“href”链接?
- python - 使用就地重命名 Pandas 列
- browser - Identity Server 4 - Windows 客户端 - 浏览器弹出窗口
- java - 为什么拉消息没有google pubsub?