javascript - 如何从 Javascript 安全地调用 Google Cloud Run 服务?

标签 javascript authentication google-cloud-platform google-cloud-run

我们计划为我们的项目构建一个 Web 客户端 (Angular)。我们的后端将是很多谷歌云运行服务。我们怎样才能确保这些服务只能被这个 web 应用程序调用呢? 我知道有服务帐户,我可以使用它来限制对 Cloud Run 服务的访问,但是我如何在纯 JavaScript 应用程序中并且没有登录用户的情况下执行此操作。我只想验证应用程序而不是用户。 有什么建议或 sample 吗?

最佳答案

TL;DR:应用程序身份验证和授权级别由服务帐户管理。但是将服务帐户 key 文件放入您的 Javascript 应用程序(因此任何用户都可以在其浏览器中查看)是没有用的,因为您的 secret 已公开!


使用 Cloud Run,您有 2 种模式:私有(private)和公共(public)

如果是公开的,没有安全性,所有请求都会转到您的 Cloud Run 服务

如果是私有(private)的,Google Front End 会检查请求者的身份以及他们是否具有 run.invoker 权限。如果是,则请求通过,否则将被阻止。

今天,为了进行身份验证,您需要一个服务帐户。如果您不在 Google Cloud Platform 上(例如,在用户的浏览器中),您需要一个服务帐户 key 文件。但是,如果您将它放在您的网站上,它就不安全,因为任何人都可以在您的网站之外使用它。

所以,今天,您不能这样做:您的 Cloud Run 是公开的,没有任何检查,或者是经过身份验证(和 IAM 授权)的私有(private)

但是,很快,我希望至少在 2020 年,您应该能够在 Cloud Run 前面放置一个负载均衡器并在其上激活 IAP。因此,用户将通过其 Google 帐户身份验证 cookie (SSO) 进行身份验证。但是,在浏览器的私有(private)模式下,用户在访问该网站之前将被要求进行身份验证。它不是免费的身份验证,它只是不由您自己管理的身份验证。

关于javascript - 如何从 Javascript 安全地调用 Google Cloud Run 服务?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61865660/

相关文章:

authentication - 在 MVC5/ASP.Net Identity 2 中支持个人用户帐户和组织帐户

linux - 在Linux服务器上设置git

google-cloud-platform - GKE : How to alert on memory request/allocatable ratio?

javascript - document.getElementById().innerHTML 未在 ReactJS 中获取文本

javascript - 将数组转换为对象?

authentication - 如何在 Openssl 中自定义 TLS 握手过程?

java - 如何从 java 删除 Google Cloud Platform 中的存储桶?

kubernetes - 如何为 StatefulSet 静态配置卷?

javascript - 更新指定属性而不重新传递整个对象mongodb

javascript - 使用在一个 javascript 文件中创建的变量在节点文件和另一个 Angular 文件中使用