1

我很好奇针对受 Google IAP 保护的 restful-api 进行身份验证的“最佳实践”是什么。

请允许我逐步分解它以阐明我想要实现的目标:

  • 转到我的开发环境的 url: dev.blah.com。在这里,IAP 提示我登录。我登录。我现在可以访问我的 SPA。
  • 我正在浏览我的 SPA。但!我无法与我的 API 交谈,因为它也受 IAP 保护。

我已经读到我可以在文档中进行编程身份验证,但我不确定我的特定用例是否适合编程身份验证,或者它是否甚至是安全的。

那么,我是否正确,因为我必须实现客户端编程身份验证工作流程才能访问我的 API?

或者是否有另一种方式说“一旦我通过身份验证访问这个受 IAP 保护的资源,我也可以登录这些其他资源。” 我不能简单地复制令牌,因为它是http-only并且 cookie 仅限于我当前的域。

一些附加信息:

  • 我的服务在 Google Kubernetes Engine 集群中运行,并根据我声明的入口对象自动创建负载均衡器。
  • 每个受 IAP 保护的环境都有自己的 OAuth 凭据,我将负载均衡器配置为使用 IAP:gcloud compute backend-services update [backend-service] --global --iap=enabled,oauth2-client-id=[the_id],oauth2-client-secret=[the_secret]
4

1 回答 1

0

让我确保我理解你想要做什么。听起来您想从 Web 浏览器中的 JavaScript 调用您的 API,对吗?

如果是这样,并且:

  • 所有后端服务都配置为使用相同的 OAuth 客户端 ID。
  • API 和 SPA 服务于同一个域。

那么我认为一切都会奏效,因为 JavaScript 生成的 HTTP 请求将与 IAP 会话 cookie 一起发送。...这一定不是您的设置,否则事情会正常工作,而显然它们不是。:>

如果您无法安排您的 API 调用使用在您向 SPA 进行身份验证时生成的 IAP 会话 cookie,这将很棘手。您不想从浏览器使用服务帐户身份验证,因为这将使所有最终用户都可以访问服务帐户。

嗯,看起来有一种方法可以从 JavaScript 执行 Google OAuth:https ://developers.google.com/api-client-library/javascript/features/authentication - 我还没有尝试过,但如果你能够让它工作,你应该能够使用像https://cloud.google.com/iap/docs/authentication-howto#authenticating_from_a_desktop_app这样的流程。如果您想走这条路,请告诉我进展如何,我很乐意帮助您摆脱困境,然后将该方法添加到我们的文档中!

--Matthew,谷歌云 IAP 工程

于 2018-05-23T03:58:20.400 回答