【问题标题】:To authenticate the client that invokes Google cloud function in Java在 Java 中对调用谷歌云功能的客户端进行身份验证
【发布时间】:2021-01-18 21:25:02
【问题描述】:

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

但这并不安全。我看过一些文档说你应该传递一个令牌或客户端 ID,然后在服务器端验证它。

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

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

【问题讨论】:

    标签: google-cloud-functions


    【解决方案1】:

    您可以使用外部 OAuth 服务器,如 keycloack (https://github.com/keycloak/keycloak),或使用 Json Web Tokens -- https://jwt.io/ -- 适用于各种语言,适用于微服务。

    【讨论】:

      【解决方案2】:

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

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

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

      不建议使用最新的解决方案 API 密钥,尤其是对用户而言。但对于机器对机器来说,有时它是唯一的解决方案。但是,没有开箱即用的解决方案,为此我写了an article,它解释了如何创建一个Cloud Endpoint(或现在的Cloud API Gateway,这是带有ESPv2的Cloud Endpoint的无服务器解决方案)来接受API键。

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-11-25
        • 2021-10-17
        • 1970-01-01
        • 2021-02-11
        • 1970-01-01
        • 2021-12-20
        • 2021-10-14
        相关资源
        最近更新 更多