首页 > 解决方案 > 在 Java 中对调用谷歌云功能的客户端进行身份验证

问题描述

我在 Java 中有一个谷歌云功能。客户端将使用 HTTP 触发器 URL 调用该函数。

但这并不安全。我浏览了一些文档,说您应该传递令牌或客户端 ID,然后在服务器端进行验证。

谁能详细解释一下,如果有的话,请提供代码示例。

我的疑问是在客户端使用 Http 触发器调用函数时对其进行身份验证

标签: google-cloud-functions

解决方案


页面很好地解释了您必须在 Cloud Functions 上对请求者进行身份验证的所有能力。

如果您有用户,最好的方法是使用Firebase Auth(我们的Google Cloud Identity Platform,它只是比Firebase Auth 更先进的解决方案,具有更多功能

但是,您需要向所有用户授予 cloudfunction.invoker 角色,以允许他们调用 Cloud Functions。这可能很困难。您也可以在您身边执行检查,但在这种情况下,您删除了 google 的安全(过滤器)层,您必须自己检查所有流量(在计费和受到攻击的情况下,这并不安全)。

不推荐使用最新的解决方案 API 密钥,尤其是对于用户而言。但对于机器对机器来说,有时它是唯一的解决方案。但是,没有开箱即用的解决方案,为此我写了一篇文章,解释了如何创建云端点(或现在的云 API 网关,它是具有 ESPv2 的云端点的无服务器解决方案)来接受 API 密钥。

使用此最新解决方案,如果您更改安全定义,您还可以接受来自 Firebase Auth(或 Cloud Identity Platform)的 OAuth2 令牌,但是这一次,您无需授予 Cloud Functions IAM 角色上的所有用户。令牌只需有效,它是用于执行调用的 Cloud Endpoint 服务帐户(因此需要在 Cloud Functions 上进行授权)。

此外,因为您可以接受 OAuth2 令牌,您也可以接受非 Google 令牌,从而让您的用户处于任何符合 OAuth2 的 IDP(KeyCloak、Okta、...)


推荐阅读