我正在将Google Cloud Run用于一个简单的POC网络应用程序。我的希望是暂时依靠GCP IAM来处理身份验证,类似于将身份识别代理与App Engine或GKE结合使用的方式。
当我将Cloud Run Invoker角色授予用户时,我期望身份验证的工作方式与IAP相似(登录重定向身份验证流程),但是却收到403错误。我可以通过设置Authorization
标头来卷曲它。
是否需要在面向用户的Web应用程序的应用程序中实现身份验证?我希望依靠IAM做一个快速的原型。如果需要,为简单的原型实施OAuth2身份验证的推荐方法是什么? Firebase Authentication?
答案 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