Google云运行end-user认证

Google Cloud Run end-user authentication

我正在使用 Google 云 运行 作为一个简单的 POC 网络应用程序。我希望暂时依靠 GCP IAM 来处理身份验证,类似于 Identity-Aware 代理 (IAP) 可以与 App Engine 或 GKE 结合使用。

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

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

运行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 客户端)。

受@mike 方法的启发,我在 Terraform 配置中创建了云 运行 身份感知代理的托管版本。

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

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

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

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

看来 Identity Aware Proxy (IAP) 现在可用于 Cloud 运行...

(作为预览版)

如果您想进行调整,这里有一个示例显示如何自定义登录页面:

注意:我还没有尝试过这些(但期待它作为即将到来的周末项目)!