14

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

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

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

4

3 回答 3

10

在这里运行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 托管集成)。

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

于 2019-05-10T16:59:18.063 回答
2

受@mike 方法的启发,我在 Terraform 配置中创建了 Identity Aware Proxy 的 Cloud Run 托管版本。

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

于 2020-05-11T18:47:47.943 回答
0

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

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

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

于 2021-12-30T15:30:46.440 回答