4. 用户管理服务边界
在IAM平台中,用户管理是认证与授权的基础数据源。如果用户管理内部职责不清,会导致数据冗余、权限扩散、生命周期失控。本章将用户管理拆分为三个独立的子服务:用户生命周期管理、用户属性管理、用户组管理,并明确各自的边界与协作关系。
4.1 三大子服务的核心职责
| 子服务 | 核心职责 | 关键操作 | 数据主权 |
|---|---|---|---|
| 用户生命周期管理 | 负责用户账号从创建到注销的全流程状态机 | 注册、激活、锁定、解锁、归档、删除 | 用户状态、账号有效期、注册来源 |
| 用户属性管理 | 负责用户身份属性的增删改查与结构定义 | 属性定义、属性赋值、属性校验、属性同步 | 用户属性Schema、属性值、元数据 |
| 用户组管理 | 负责用户分组的创建、成员维护与组层级 | 组创建、成员加入/退出、组嵌套、组属性 | 组结构、组成员关系、组属性 |
设计原则:每个子服务拥有独立的数据存储与API端点,通过事件总线(Event Bus)进行状态变更通知,避免服务间直接数据库耦合。
4.2 用户生命周期管理:状态机驱动
用户生命周期管理是用户管理的主控制器。它维护一个严格的状态机,确保用户账号在不同阶段的行为可追溯、可管控。
- 状态定义:注册中 → 已激活 → 正常使用 → 锁定(临时/永久) → 归档 → 已删除
- 状态转换规则:只有生命周期服务有权修改用户状态,其他服务只能读取状态。
- 事件发布:每次状态变更(如用户锁定)必须发布事件,供属性管理、组管理、授权服务订阅处理。
常见陷阱:不要将“用户状态”作为属性存储在属性管理服务中。状态是生命周期服务的核心数据,属性服务只应存储描述性信息(如姓名、邮箱、部门)。
4.3 用户属性管理:灵活扩展
用户属性管理负责管理用户的描述性数据。它需要支持动态Schema,以适应不同业务场景的属性需求。
- 基础属性:用户名、邮箱、手机号、显示名称(由系统预定义,不可删除)
- 扩展属性:部门、职位、工号、入职日期、成本中心(支持自定义添加)
- 属性校验规则:必填、唯一、正则表达式、枚举值、关联校验
- 属性来源标记:手动录入、HR同步、LDAP导入、SSO断言
关键设计:属性管理服务不关心用户是否“活着”,它只负责存储和校验属性值。当生命周期服务删除用户时,属性服务通过订阅事件来清理关联属性数据。
4.4 用户组管理:权限聚合单元
用户组管理是授权模块的前置聚合层。它将用户按业务维度分组,为后续的RBAC/ABAC授权提供主体集合。
- 组类型:静态组(管理员手动添加)、动态组(基于属性规则自动计算成员)
- 组层级:支持父子组嵌套,子组自动继承父组权限
- 组成员同步:当用户属性变更时(如部门从A变为B),动态组自动重新计算成员资格
4.5 服务边界协作流程(SVG)
下图展示了用户管理内部三个子服务之间的协作关系,以及它们与外部认证、授权服务的交互边界:
4.6 职责划分的典型场景
以下通过一个“员工入职-转岗-离职”的完整流程,说明三个子服务如何各司其职:
| 阶段 | 生命周期管理 | 属性管理 | 组管理 |
|---|---|---|---|
| 入职 | 创建账号,状态=注册中;HR确认后状态=已激活 | 写入姓名、邮箱、部门、工号等属性 | 根据部门属性自动加入“研发部”动态组 |
| 转岗 | 状态不变(仍为正常) | 更新部门属性从“研发”改为“市场” | 动态组自动重新计算:退出研发组,加入市场组 |
| 离职 | 状态=归档;30天后自动变为已删除 | 订阅归档事件,保留属性快照用于审计 | 订阅删除事件,移除所有组成员关系 |
4.7 服务边界拆分收益
- 独立扩展:属性管理需要频繁扩展Schema,生命周期管理需要高可用状态机,拆分后可以独立部署和扩缩容。
- 故障隔离:属性管理服务宕机不影响用户登录(生命周期服务仍可验证用户状态),仅影响属性查询和修改。
- 职责单一:每个服务只关注自己的数据主权,避免“上帝服务”导致代码臃肿、权限混乱。
总结:用户管理拆分为生命周期、属性、组管理三个子服务,是IAM平台实现高内聚低耦合的关键一步。生命周期管“生死”,属性管“描述”,组管“聚合”,三者通过事件总线协作,为上层认证与授权提供清晰、可靠的用户数据基础。