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 运行...
(作为预览版)
如果您想进行调整,这里有一个示例显示如何自定义登录页面:
注意:我还没有尝试过这些(但期待它作为即将到来的周末项目)!
我正在使用 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 运行...
(作为预览版)如果您想进行调整,这里有一个示例显示如何自定义登录页面:
注意:我还没有尝试过这些(但期待它作为即将到来的周末项目)!