在基于微服务的系统中处理复杂的身份验证场景

问题描述 投票:0回答:1

我正在构建我的第一个基于微服务的系统,但有一些事情我无法理解。在此之前,我先简单介绍一下该应用程序,以便为大家提供一些背景信息。

系统说明

系统分为很多模块,例如我们有一个Project模块,用于管理项目、任务、子任务等。另一个模块是Library模块,用于处理文件、文件夹、上传文件、下载文件等。

我们还有另一个重要的模块来处理系统中的用户。此外,该模块还负责处理部门。简而言之,该模块处理用户的增删改查、部门的增删改查以及用户与部门的关联(例如,将用户 A 添加到部门 B 或让用户 B 成为部门 c 的经理)。值得一提的是,部门是有层级的;即,一个部门可以有一个父部门。

微服务架构

我们计划将其设置为基于微服务的系统的方式如下:

  • 我们将有一个Gateway微服务;这个微服务将是 唯一可公开访问的微服务,并且可以访问任何 内部微服务必须经过网关微服务。
  • 我们将拥有一个Identity微服务;微服务将处理 用户的 CRUD、部门的 CRUD、用户-部门关联,以及 使用 JWT 生成对用户进行身份验证。
  • 认证和授权将由每个微服务管理 基于 JWT 令牌。
  • 每个其他模块(例如项目模块)将是其自己的 微服务。

挑战

我们遇到的问题与复杂的授权场景有关。简单的授权(例如用户 A 必须拥有权限 B)很简单,因为我们将在 JWT 令牌中包含用户的所有权限。然而,更复杂的有点棘手。

对于上下文,这里有一个示例:假设在项目微服务中,用户创建项目 A。假设项目 A 分配给部门 B。我们还假设要使项目处于活动状态,它必须需经过以下一系列审批:

  1. 第1步:项目A必须得到B部门经理的批准。
  2. 第2步:项目A必须得到B部门上级的批准 部门(C 部门)经理。
  3. 第3步:项目A必须得到C部门母公司的批准 部门经理。
  4. 第4步:项目A必须得到具有权限D的用户的批准才能 活跃起来。

值得注意的是,对于步骤1,如果B部门没有经理,系统应该上一级检查是否有经理,并将请求转发给他们。类似地,在步骤 2 和 3 中,如果没有直接上级部门,则系统应查找层次结构,直到找到最接近经理的部门并将请求转发给他们。如果没有找到经理,则请求应立即转到步骤 4。

现在,这个逻辑很容易在整体系统中实现(我们之前已经这样做过)。然而,这里的挑战是项目微服务没有必要的信息(基本上是用户部门关联)来弄清楚这个流程(它需要的信息托管在身份微服务中)。

我在这里能想到的唯一解决方案是将用户/部门/用户部门关联复制到所有其他微服务中(项目微服务并不是唯一存在此问题的微服务)。此外,我们不想在微服务之间引入任何同步通信来减少它们之间的耦合。这是一个健全的解决方案吗?或者还有其他更好的方法来处理这个问题吗?

authentication authorization microservices
1个回答
0
投票

我们遇到的问题与复杂的授权场景有关。简单的授权(例如用户 A 必须拥有权限 B)很简单,因为我们将在 JWT 令牌中包含用户的所有权限。然而,更复杂的有点棘手。

基于此,您的问题看起来像是 ReBAC 的完美候选者。这个想法是返回授权决策的中央微服务。

市场上有几种实现这种方法的解决方案,包括开源的和商业的。

免责声明:我目前是正在构建此类解决方案的团队的一员。

© www.soinside.com 2019 - 2024. All rights reserved.