【问题标题】:Google Idenity Aware Proxy Authenticate with API on SPAGoogle Identity Aware Proxy 在 SPA 上使用 API 进行身份验证
【发布时间】:2018-05-22 20:52:57
【问题描述】:

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

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

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

我了解到我可以在 the documentation 中进行编程身份验证,但我不确定我的特定用例是否适合编程身份验证,或者它是否安全。

那么,我必须实现客户端编程身份验证工作流程才能访问我的 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]

【问题讨论】:

    标签: google-iap


    【解决方案1】:

    让我确定我理解你想要做什么。听起来您想从 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,Google Cloud IAP 工程

    【讨论】:

    • API和SPA在同一个域但不同的子域。所以:dev.blah.com 和 api-dev.blah.com
    • 好的,在这种情况下,您的选择是: 1. 提交功能请求,以便能够配置 IAP 以将 cookie 的范围限定为 blah.com 而不是 dev.blah.com。 2. 尝试“来自 JavaScript 的 Google OAuth”。 3.让用户点击一个链接,例如api-dev.blah.com/login 在该域上建立会话。 4. 重新配置应用程序,以便 dev 和 api-dev 从同一个域提供服务。 (这可以做到,GCLB 允许根据路径控制将请求路由到哪个后端服务。
    • 关于#4 的注意事项:除非您将 IAP 重新配置为对两种服务使用相同的客户端 ID,否则您会遇到问题。路线图上有解决此问题的方法,但现在cloud.google.com/sdk/gcloud/reference/compute/backend-services/… 将允许您调整客户端 ID 和密码。
    • @MatthewSachs 我面临与 OP 相同的问题。除非我弄错了,否则您的 oauth 方法会在每个请求的 Authorization 标头中使用 id 令牌。它对我不起作用,因为浏览器发出的初始 CORS 预检请求不包括包含 id 令牌的授权标头,并且在 IAP 处被阻止。
    猜你喜欢
    • 2020-10-28
    • 2017-06-02
    • 2021-10-29
    • 2014-07-23
    • 2021-06-28
    • 2019-03-02
    • 2021-07-12
    • 1970-01-01
    • 2018-12-29
    相关资源
    最近更新 更多