Google Cloud Endpoints 中对外部客户端的授权
Authorization in Google Cloud Endpoints for external clients
我们正在开发一个 API,旨在供不在 Google 云中的外部客户使用。
Google Cloud Endpoints 似乎很适合这种情况。
我们需要什么:
- 客户端能够在我们的“开发者门户”中注册以获得必要的凭据。
- 跟踪我们的客户(查看特定客户的请求数量,撤销他对 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 方法来验证用户:
- 我们使用 firebase 通过电子邮件实现了用户身份验证(如我的问题所述)。
- 添加了一种方式,让用户可以将他们的 public 证书上传到我们的“门户”。
2.1.这是使用 Google 云函数完成的。基本上,我们创建了两个端点:
2.1.1.使用 firebase 令牌上传 public 证书。
2.1.2.以某些 url 显示 JWKS 格式的所有 public 证书(这样 google 能够验证用户 JWT 签名)
- 为用户发布了关于如何形成 JWT 以使用我们的 API 的说明(此时每个用户都必须拥有与其之前上传的 public 密钥相关联的私钥)。
- 现在我们 API 的用户可以使用提供的 JWT 令牌进行 API 调用。
我们的技术堆栈如下所示:
- 云功能(用于证书处理)。
- Firestore(用于身份验证、存储证书等)。
- 具有 ESPv2
的云端点
- Google App Engine 标准环境
我们正在开发一个 API,旨在供不在 Google 云中的外部客户使用。
Google Cloud Endpoints 似乎很适合这种情况。
我们需要什么:
- 客户端能够在我们的“开发者门户”中注册以获得必要的凭据。
- 跟踪我们的客户(查看特定客户的请求数量,撤销他对 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 方法来验证用户:
- 我们使用 firebase 通过电子邮件实现了用户身份验证(如我的问题所述)。
- 添加了一种方式,让用户可以将他们的 public 证书上传到我们的“门户”。
2.1.这是使用 Google 云函数完成的。基本上,我们创建了两个端点:
2.1.1.使用 firebase 令牌上传 public 证书。
2.1.2.以某些 url 显示 JWKS 格式的所有 public 证书(这样 google 能够验证用户 JWT 签名) - 为用户发布了关于如何形成 JWT 以使用我们的 API 的说明(此时每个用户都必须拥有与其之前上传的 public 密钥相关联的私钥)。
- 现在我们 API 的用户可以使用提供的 JWT 令牌进行 API 调用。
我们的技术堆栈如下所示:
- 云功能(用于证书处理)。
- Firestore(用于身份验证、存储证书等)。
- 具有 ESPv2 的云端点
- Google App Engine 标准环境