【问题标题】:How do I use Google's Identify Platform to authenticate against Cloud Endpoints?如何使用 Google Identity Platform 对 Cloud Endpoints 进行身份验证?
【发布时间】:2019-11-06 16:58:37
【问题描述】:

在我们的组织中,我们使用 Google Kubernetes Engine (GKE) 来实施微服务架构。由于我们也是 G-Suite 用户,因此保证组织中的每个人都拥有 Google 帐户。因此,我们希望使用这些帐户来管理微服务的身份验证和授权。

我们使用angularfire2 客户端对登录进行原型化,以针对 Google 身份平台进行身份验证。我们还配置了 Google Cloud Endpoints 来控制对相关服务的访问。

我们缺少的部分是如何从 Google 中的身份获取我们可以在我们的服务上使用的访问令牌——使用 Firebase API 返回的访问令牌没有声明,documentation on custom claims 似乎清楚地表明这些都进入了身份令牌。

我的期望是拥有具有适当受众(我们的后端)的 JWT,其中包含足够的声明集以在服务中实施基于角色的访问控制。理想情况下,基础设施已经可以验证声明——我们的一些服务足够小,只需要一个角色,可以在服务之外强制执行。或者我们可以用所需的声明来注释我们的端点(Protobuf)。

在 GCP 环境中,创建用于访问 GKE 服务的访问令牌的标准流程是什么?有什么支持吗?

【问题讨论】:

    标签: firebase-authentication google-kubernetes-engine google-cloud-endpoints google-identity google-cloud-logging


    【解决方案1】:

    我们缺少的部分是如何从 Google 中的身份获取 我们可以在我们的服务上使用的访问令牌——即将到来的访问令牌 back using the Firebase API has no claim in it, and the documentation 关于自定义声明似乎很清楚这些进入 身份令牌。

    Google OAuth 访问令牌没有您想要使用的身份。身份存储在身份令牌中。在对用户进行身份验证时添加范围“电子邮件”。 Google 将返回一个 ID 令牌。对于某些框架,您可以为身份令牌请求自定义声明。

    在GCP环境下,创建的标准流程是什么 用于访问 GKE 服务的访问令牌?有没有什么 支持这个?

    除了 API 密钥等方法外,有两种访问类型。用户帐户和服务帐户。服务到服务通常使用服务帐户访问令牌 (RBAC) 或服务帐户身份令牌 (IBAC)。在您的情况下,您想使用身份平台,即用户帐户。

    如果我正在设计这个系统,我会使用用户帐户来对系统进行身份验证 - Firebase 非常适合此目的。我会从我的数据库(Firestore)中查找此身份支持/允许的角色,并创建一个具有 GCP 服务所需范围的服务帐户访问令牌。然后,我将使用此访问令牌进行 GCP 服务到服务授权。如果我自己的服务还需要自定义角色,我将使用我的自定义角色创建一个自定义身份令牌,并将其作为自定义 HTTP 标头包含在内,并将 Google 访问令牌包含在标准 HTTP“授权:承载”标头中。我将使用服务帐户私钥签署我的自定义身份令牌或使用 GCP IAM API 为我签名,以便另一端可以使用服务帐户的公钥进行验证。这种方法可以防止客户端的数据泄漏,不分发私钥,不公开范围/角色等。

    【讨论】:

    • 感谢您的详细回答,约翰——但我已经做到了。我们的服务不需要知道身份,他们只需要知道以受信任的方式分配了一个角色,这就是访问令牌的来源。这似乎与谷歌在其服务(例如云端硬盘)上所做的一致,但似乎不支持在 GKE 中执行此操作。现在我们使用自定义授权服务将 Firebase ID 令牌映射到我们的自定义访问令牌,现在探索用 Envoy 替换 ESP 以获得更多控制权。我希望得到 GCP 的更多支持。
    【解决方案2】:

    我建议您遵循doc 使用服务帐户文件在服务之间进行身份验证。

    【讨论】:

    • 嗨,韦恩。我们使用服务帐户进行服务到服务身份验证,但据我所知,其中没有任何内容对用户进行身份验证或授权。我错过了什么吗?我们需要知道哪个人在使用 Web 客户端。
    • 如果您的 Web 客户端可以生成带有 user_id 的 JWT 令牌,端点代理 (ESP) 将对其进行验证并将标头 x-endpoint-api-userinfo 中的 JWT 有效负载传递给您的应用程序以进行授权.
    • 我看不出我们如何在不泄露私钥的情况下在客户端生成 JWT。目前,我们使用自定义服务获取 Firebase ID 令牌,验证它的颁发者,然后生成我们自己的访问令牌,ESP 应该信任它(这是我明天的工作)。它仍然没有给我们 RBAC,但我们可以在服务中强制执行它。我希望能像 Istio 和 Keycloak 一样提供一些东西,这样可以减少工作量,减少可信任的自定义代码。
    猜你喜欢
    • 2018-12-29
    • 2020-10-25
    • 1970-01-01
    • 1970-01-01
    • 2023-03-08
    • 2017-08-30
    • 2014-10-11
    • 2022-01-28
    • 2017-09-23
    相关资源
    最近更新 更多