Google Cloud Run身份验证

时间:2019-05-10 01:24:54

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

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

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

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

2 个答案:

答案 0 :(得分:5)

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

答案 1 :(得分:1)

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

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