【问题标题】:Google Cloud Run end-user authenticationGoogle Cloud Run 最终用户身份验证
【发布时间】:2019-09-27 21:17:57
【问题描述】:

我将 Google Cloud Run 用于一个简单的 POC 网络应用。我希望暂时依靠 GCP IAM 来处理身份验证,类似于身份识别代理 (IAP) 可以与 App Engine 或 GKE 结合使用。

当我将 Cloud Run Invoker 角色授予用户时,我希望身份验证的工作方式类似于 IAP 的工作方式(登录重定向身份验证流程),但我却收到 403 错误。不过,我可以 curl 它设置 Authorization 标头。

是否需要在应用程序中为面向用户的 Web 应用程序实施身份验证?我希望依靠 IAM 做一个快速原型。如果需要,为简单原型实施 OAuth2 身份验证的推荐方法是什么? Firebase Authentication?

【问题讨论】:

  • 您需要授权自己的 Google OAuth 令牌,然后添加到 HTTP 标头。
  • 当前 Cloud Run 的授权设计不适合网站。考虑服务到服务授权 (API)。
  • 确实,这就是我所发现的。我想我的问题确实是:Cloud Run 实际上是针对 Web 应用程序还是只是“后端”服务?后者似乎更多。我本来期望与 IAP 类似的行为,特别是因为角色管理具有非常相似的外观和感觉。
  • Cloud Run 适用于网站。 Web 应用程序需要澄清,因为 Cloud Run 具有 HTTP 运行时间限制(超时)。对于普通的 HTTP 请求/响应设计,我印象深刻。我认为授权功能可能已经急于进入测试版。我有一种感觉,谷歌会在生产状态到来之前在这方面投入更多的工作。提供反馈可能会帮助他们决定什么是关键。

标签: google-cloud-platform google-cloud-run


【解决方案1】:

在这里运行 PM,

是的,现在您需要托管自己的 OAuth 客户端,例如:

<html>
  <head>
    <title>Google Sign-in + Run</title>
    <script src="https://apis.google.com/js/platform.js"></script>
    <script type='text/javascript' src='https://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js'></script>
    <meta name="google-signin-client_id" content="{OAUTH_CLIENT_ID}">
  </head>

  <body>
      <div class="g-signin2" data-onsuccess="onSignIn"></div></br>
    <div>
      <div id="returned-text"></div></br>
      <button id="test">Test</button>
    </div>
    <script>
    var id_token;

    function onSignIn(googleUser) {
      id_token = googleUser.getAuthResponse().id_token;
    }

    $(document).ready(function() {
      $('#test').on('click', function () {
        var serviceURL = 'https://...';

        var xhr = new XMLHttpRequest();
        xhr.open('GET', functionURL);
        xhr.setRequestHeader('Authorization', 'bearer ' + id_token);
        xhr.onreadystatechange = function() {
            if (this.readyState == 4 && this.status == 200) {
               $('#returned-text').text(xhr.responseText);
            }
        };
        xhr.send();
      });
    });
    </script>
  </body>
</html>

请注意,CORS 在这里会很不稳定,我们建议托管在同一来源上以摆脱这种情况(例如,使用 Firebase Hosting integration)。

未来,我们可能会提供 IAP(为您托管 OAuth 客户端)。

【讨论】:

    【解决方案2】:

    受@mike 方法的启发,我在 Terraform 配置中创建了身份识别代理的 Cloud Run 托管版本。

    https://futurice.com/blog/identity-aware-proxy-for-google-cloud-run

    【讨论】:

      【解决方案3】:

      您可以使用启用 IAP 的外部负载均衡器实现最终用户身份验证:

      • 使用“要求身份验证”选项设置创建 Cloud Run 服务 入口选项为“允许内部流量和来自 Cloud Load Balancing 的流量”
      • 使用启用 IAP 的外部负载均衡器公开服务
      • 为用户授予后端服务的“IAP-Secured Web App User”角色

      您可以按照本教程获取工作示例hodo.dev/posts/post-30-gcp-cloudrun-iap/

      【讨论】:

        猜你喜欢
        • 2021-10-15
        • 2019-12-31
        • 2022-01-27
        • 2020-05-29
        • 2020-07-22
        • 2020-02-29
        • 2014-10-11
        • 2020-01-24
        • 1970-01-01
        相关资源
        最近更新 更多