0

我有一个位于 IAP(身份感知代理)后面的 AppEngine 应用程序,因此它接收经过身份验证并包含 JWT 令牌的请求。我想从 AppEngine 应用程序向 Google Sheets API 发出请求。这也需要经过身份验证的连接,但鉴于我希望在通过 IAP 访问应用程序的同一用户下建立连接,是否有人知道如何从 AppEngine 应用程序内部创建一个请求,该请求会将令牌转发到 Google Sheets ? 找不到有关该主题的任何信息...我正在使用 Java,因此任何 Java 指针都将不胜感激,但一般/其他语言帮助也很好在此处输入图像描述...

4

1 回答 1

1

我将描述评论中提出的两种方法

  1. 第一个,重用 IAP 代理令牌来访问 Google Sheet 是不可能的,而且很危险。
  • 不可能,因为您从 IAP 收到身份令牌(至少请求者/浏览器向 IAP 发送身份令牌)并且您需要访问令牌来请求工作表 API。
  • 很危险,因为如果您能够重用 IAP 令牌来请求 Google 表格,这意味着用户有权访问 Google 表格。而且我确信您构建了一个应用程序来防止对 Google 表格的任何直接访问/修改。
  1. 第二种是使用技术帐户(通常是服务帐户)并生成访问令牌来访问 Sheet API。

第二种方法是最好的方法(不要忘记在 AppEngine 应用程序中正确记录用户请求和后续工作表 API 调用,以实现端到端的可追溯性)。但是,正是因为您问这个问题,App Engine 默认服务帐户是不可能的。

事实上,要访问 Sheet API,您需要使用 Sheet API 限定访问令牌的范围。遗憾的是,您无法使用 App Engine 执行此操作。您可以使用 Cloud Run、Cloud Functions、Compute Engine 执行此操作(无需默认服务帐户,否则您需要额外的配置才能使用 Compute Engine 默认服务帐户实现此目的)。但不适用于 App Engine。

因此,您有 2 个解决方案:

  1. 要么您使用另一个托管平台(例如 Cloud Run),但您失去了 IAP 容量(目前)
  2. 您继续使用 App Engine,但需要向另一个服务帐户请求访问令牌(不需要服务帐户密钥文件)。您可以为此使用服务帐户凭据 API。我写了一篇关于这个 API的文章

注意:2021 年晚些时候,App Engine 应该能够接受自定义服务帐户,因此问题应该得到解决

于 2021-02-20T19:29:20.950 回答