为什么不是?

下面我从架构、规模、演进、团队、生态、安全、性能、合规等维度,系统性回答:

为什么企业级 IAM 不应该做成 all-in-one,而必须拆成多个子系统。

我会结合你目前已有的模块(UMS、Permission、SSO、Passport)给出专业级论证。


1. 单体 all-in-one 的核心问题:边界违背职责单一原则

IAM 不是单一能力,而是至少包含 6 大独立能力:

  • 身份(User Identity)
  • 凭证(Credentials)
  • 会话 & Token(Session/Token Service)
  • 认证(Authentication / MFA / SSO)
  • 授权(Authorization)
  • 应用生态(App / Client Management)
  • 审计 & 安全 & 风控(Audit/Risk)

这些能力来自完全不同的安全域(Security Domains)。 把它们塞进一个系统,会导致:

  • 模块间强耦合,难以隔离边界
  • 一个模块的变更影响所有模块
  • 无法独立扩展能力(例如你要升级 MFA,会影响 Permission?)
  • 不同安全域的责任交叉,产生安全隐患(权限服务能读用户密码?)

安全系统第一原则: 能力边界必须清晰,不可以混写。


2. 单体无法满足企业级 IAM 的扩展性需求

IAM 是全企业入口,未来必然需要:

  • 支持成百上千个业务系统
  • 对接 SAML、OIDC、OAuth2、企业 AD、LDAP
  • 大规模的用户(10w+)
  • 每秒数千次 Token 校验
  • 高频鉴权(每个 API 都要鉴权)

如果你 all-in-one,EVERYTHING 都耦合到一个进程:

  • 认证压力来了?整个系统扩容
  • 权限校验压力来了?整个系统扩容
  • 业务系统调用变多?整个 IAM 整体要扩容
  • 日志写入激增?整个 IAM 变慢

拆分后:

  • SSO 单独扩容
  • Token Service 单独扩容
  • Permission 单独扩容
  • Audit 单独部署到大吞吐架构(ELK/ClickHouse)

扩展成本完全不同。


3. 安全架构必须分域(Zero Trust 原则)

安全系统不能 all-in-one 的最核心原因:

权限服务不能访问密码,认证服务不能读取策略,审计日志不能干预授权

举几个实际安全风险:

  • 如果 Permission 系统能读取用户凭证(密码、MFA)→ 严重合规违规
  • 如果 UMS 和 Permission 在同一进程内 → 任意命令执行漏洞影响两者
  • Token 服务与权限服务耦合 → 一处越权漏洞即可伪造 Token
  • 审计与业务耦合 → 攻击者删除日志会写入攻击痕迹

企业级 IAM(Okta、Auth0、AzureAD、AWS IAM)全部都是严格系统分域


4. 单体无法支持多团队并行开发

IAM 是跨公司级别的系统,要支持的场景非常多,包括:

  • 业务应用团队
  • 安全团队
  • 运维团队
  • 企业架构师
  • 审计与合规团队
  • 外部系统对接团队

单体 → 所有人压到一个仓库,任何人改代码都会影响整个 IAM 拆分 → 每个域独立

  • UMS(用户管理)由架构/用户团队维护
  • Permission(授权)由安全团队维护
  • App Manager 由平台团队维护
  • 审计由运维/安全团队维护
  • Token Service 由基础架构团队维护
  • SSO/Passport 由认证团队维护

可独立迭代、独立 API、独立 SLA。


5. 单体开发会使架构恶化(IAM 会变成垃圾桶系统)

现实中的反模式:

摆在一起的系统(用户、权限、认证)→ 很多人把各种逻辑塞进去。

你会逐步看到:

  • 密码规则、用户资料、登陆 UI、组织架构、权限管理、菜单管理、应用管理、审计日志、风险策略、第三方登录策略 全部混写在一个项目里。

最后 IAM 成了一个超级大杂烩,任何更新都风险巨大。

拆分是为了:

  • 强制性边界
  • 强制模块职责明确
  • 防止系统“随便加东西”变得肿胀不可维护

6. 单体在高吞吐鉴权场景直接崩溃

企业 IAM 最典型的场景:

  • API Gateway 每秒几十万次鉴权
  • 每次都要问 Permission:此用户是否可访问此资源?
  • 每次都要问 Token Service:Token 是否有效?是否过期?

all-in-one 会产生:

  • 认证流程阻塞鉴权流程
  • 权限查询阻塞 Token 校验
  • 审计写入阻塞 SSO 登录
  • 第三方登录阻塞用户管理

拆分后:

  • Token 校验走 Redis 或本地缓存 → 毫秒级并发
  • Permission 的策略引擎可以水平扩展
  • SSO 登录不会影响业务调用
  • Audit 写入异步,不影响主链路

性能直接提升几十倍。


7. 单体无法支持企业 IAM 的生态化能力

企业 IAM 是一个生态平台,而不是单应用。

你未来会有:

  • 应用商店
  • 应用下发
  • 应用授权
  • SSO 集成
  • 业务系统自动登录
  • 第三方系统接入
  • 外部 OIDC/SAML 集成
  • SCIM 自动化用户同步
  • 组织架构同步
  • API 权限网关

这些独立能力在一套 all-in-one 中维护,会导致:

  • 业务越来越复杂
  • 模块相互影响
  • 重构成本极高
  • 生态系统难以扩展

拆分后,每个子系统都是一个产品组件,可以独立对外提供 SDK 或 API。


8. 单体不符合现代 IAM(Identity Fabric)的架构理念

国际上对 IAM 的标准架构叫做:

Identity Fabric(身份织网)

核心原则:

  • 小而专、解耦、可替换
  • 每个能力可独立部署、扩展、自治
  • 模块通过标准协议联通(OIDC、OAuth2、SCIM)

all-in-one 会直接违背 Identity Fabric 的原则。


9. 单体对合规性来说不可能通过审计

例如:

  • SOX
  • ISO 27001
  • GDPR
  • 金融合规(PCI DSS)
  • 国企审计(等保)

所有合规要求:

  • 权限不可越权访问密码
  • 密码管理必须与授权分离
  • Token 必须可单独审计、隔离
  • 审计日志必须不可被业务修改
  • 身份源必须独立于授权模块

all-in-one 无法满足合规。


10. 那为什么小公司都做 all-in-one?

因为他们没有 IAM,他们做的是一个:

  • 小型 RBAC
  • 简易登录系统
  • 简单用户管理
  • 一体化管理后台

而你要做的是:

企业级 IAM 平台(类似于 Okta + AzureAD + Auth0 的组合)

这是完全不同的复杂度。


结论(核心)

企业级 IAM 系统 必须拆分为多个子系统,原因包括:

  • 安全域必须隔离
  • 模块职责必须清晰
  • 扩展性与性能需求巨大
  • 支持全企业生态化接入
  • 满足合规与审计要求
  • 支撑大规模 Token/权限鉴权
  • 支持多团队并行开发
  • 防止架构长期恶化

all-in-one 只能满足公司的登录页面需求,但无法支撑企业级中心化身份体系