Google Cloud Endpoints 中对外部客户端的授权

Authorization in Google Cloud Endpoints for external clients

我们正在开发一个 API,旨在供不在 Google 云中的外部客户使用。
Google Cloud Endpoints 似乎很适合这种情况。

我们需要什么:

  1. 客户端能够在我们的“开发者门户”中注册以获得必要的凭据。
  2. 跟踪我们的客户(查看特定客户的请求数量,撤销他对 API 的访问权限等)

我不太清楚的部分是如果我们的客户不在 Google 云中,如何验证和识别他们。

我们已经在一部分或我们的应用程序中通过用户电子邮件使用 Firebase 身份验证。继续使用该身份验证会很方便,但我不太明白该怎么做。 Google docs 表示客户端应用程序必须发送 JWT 令牌。但是它必须使用什么私钥来签署 JWT?

我们考虑的第二种验证客户端的方法是使用custom method来验证用户。但我有同样的问题:客户端应用程序必须使用什么私钥来签署 JWT?

客户端是否打算生成自己的密钥对?

如果我们的用例有一些更好的选择,或者如果我遗漏了什么,请随时为我指出正确的方向。

你走对了!

  • 使用 firebase,JS 库允许您向正确的身份提供者进行身份验证,该库还允许您生成 JWT。这里不需要私钥!
  • 使用自定义方法,它是不同的。 Cloud Endpoint 需要验证 JWT 的签名。为此,Cloud Endpoint 需要知道用于签署 JWT 的私钥的 public 密钥。大多数情况下,它由您自己的 IdP 系统提供。

在您的上下文中,Firebase 身份验证(或 Cloud Identity Platform,如果您想在 Google 云上管理您的用户)是最适合您的解决方案。 对于多个客户,您无法注册他们所有的 public 密钥,唯一的解决方案是拥有自己的 IdP 并在其上注册所有客户。

我还有一个问题:你们打算如何计算每个客户的请求数?通过 Cloud Endpoint 还是您自己的数据库?

我们想出了一个解决方案,使用 custom 方法来验证用户:

  1. 我们使用 firebase 通过电子邮件实现了用户身份验证(如我的问题所述)。
  2. 添加了一种方式,让用户可以将他们的 public 证书上传到我们的“门户”。
    2.1.这是使用 Google 云函数完成的。基本上,我们创建了两个端点:
    2.1.1.使用 firebase 令牌上传 public 证书。
    2.1.2.以某些 url 显示 JWKS 格式的所有 public 证书(这样 google 能够验证用户 JWT 签名)
  3. 为用户发布了关于如何形成 JWT 以使用我们的 API 的说明(此时每个用户都必须拥有与其之前上传的 public 密钥相关联的私钥)。
  4. 现在我们 API 的用户可以使用提供的 JWT 令牌进行 API 调用。

我们的技术堆栈如下所示:

  1. 云功能(用于证书处理)。
  2. Firestore(用于身份验证、存储证书等)。
  3. 具有 ESPv2
  4. 的云端点
  5. Google App Engine 标准环境