Google cloud platform 谷歌云运行最终用户认证

Google cloud platform 谷歌云运行最终用户认证,google-cloud-platform,google-cloud-run,Google Cloud Platform,Google Cloud Run,我正在使用谷歌云运行一个简单的POC网络应用程序。我的希望是依靠GCP IAM暂时处理身份验证,类似于身份识别代理(IAP)如何与App Engine或GKE结合使用 当我将Cloud Run Invoker角色授予用户时,我希望身份验证的工作方式与IAP类似(登录重定向身份验证流),但我得到的是403错误。我可以设置授权标题 是否需要在应用程序中为面向用户的web应用程序实施身份验证?我希望依靠IAM做一个快速的原型。如果需要,为简单原型实现OAuth2身份验证的推荐方法是什么 在这里运行PM

我正在使用谷歌云运行一个简单的POC网络应用程序。我的希望是依靠GCP IAM暂时处理身份验证,类似于身份识别代理(IAP)如何与App Engine或GKE结合使用

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

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

在这里运行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>

谷歌登录+运行


试验 var-id_令牌; 函数onSignIn(谷歌用户){ id\u token=googleUser.getAuthResponse().id\u token; } $(文档).ready(函数(){ $('#test')。在('click',函数(){ var serviceURL=https://...'; var xhr=new XMLHttpRequest(); xhr.open('GET',functionURL); xhr.setRequestHeader('Authorization','bearer'+id_token); xhr.onreadystatechange=函数(){ if(this.readyState==4&&this.status==200){ $(“#返回文本”).text(xhr.responseText); } }; xhr.send(); }); });
请注意,CORS在这里是不可靠的,我们建议在同一来源上托管以消除这种情况(例如,使用)


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

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


这里记录了这一点:您需要授权您自己的Google OAuth令牌,然后将其添加到HTTP头中。当前的云运行授权设计不适用于网站。想想服务到服务授权(API),事实上,这就是我所发现的。我想我真正的问题是:云运行实际上是为web应用程序设计的,还是仅仅是“后端”服务?看起来更像是后者。我本以为IAP会有类似的行为,特别是因为角色管理有着非常相似的外观和感觉。Web应用程序需要澄清,因为云运行有HTTP运行时间限制(超时)。对于普通的HTTP请求/响应设计,我印象深刻。我认为授权功能可能已经匆忙进入测试阶段。我有一种感觉,在生产状态到来之前,谷歌将在这一领域投入更多的工作。提供反馈可能会帮助他们决定什么是关键的。