3. 身份基础设施工程

零信任的第一原则是“永不信任、持续验证”,而验证的前提是系统必须知道“你是谁”。身份基础设施就是回答这个问题的底座:它由身份提供者(IdP)、身份目录、生命周期管理流程和权限模型四部分咬合而成。任何一环设计不当,都会让后续的策略引擎、访问代理和审计系统失去可靠输入。本节从工程落地角度,把这四部分拆开讲清楚“选什么、怎么建、怎么管、怎么判权”。

一、身份提供者(IdP)选型

IdP 负责认证并签发断言,是零信任控制平面的事实入口。选型时不能只看“支持 SSO”,而要围绕协议能力、部署形态、扩展性和治理接口四个维度评估。

  • 协议能力:必须支持 OIDC 或 SAML 2.0 作为主认证协议,SCIM 2.0 用于用户与组的自动同步。若存在大量遗留系统,还需评估对 WS-Fed、CAS 的兼容能力。
  • 部署形态:SaaS 型(如 Okta、Entra ID、Authing)运维成本低、开箱即用;自建型(如 Keycloak、Authentik)数据主权可控、可深度定制。混合场景常见做法是“SaaS 做外部身份、自建做内部员工身份”。
  • 扩展性:是否支持自定义认证器(WebAuthn、TOTP、短信)、条件访问策略、风险信号接入(IP 信誉、设备指纹)。
  • 治理接口:是否提供 SCIM、审计日志导出、管理 API,这直接决定生命周期自动化能否落地。

一个可操作的判断方法是:先列出所有需要接入的应用及其协议,再对照 IdP 的能力矩阵打分。例如某企业有 40 个应用,其中 30 个支持 OIDC、8 个仅支持 SAML、2 个仅支持 LDAP,那么 IdP 必须同时具备 OIDC、SAML 和 LDAP 桥接能力,否则就要额外引入身份网关。

二、身份目录设计

目录是身份的“唯一事实来源”。设计核心是确定目录的层级结构、属性模型和同步方向。常见做法是以 IdP 或 HR 系统为主目录,其他系统为从目录,通过 SCIM 或 LDAP 同步。

属性模型要提前规划。以员工为例,至少需要:employeeId(稳定唯一标识)、username、email、department、manager、status(active/suspended/disabled)、groups。其中 employeeId 必须与 HR 系统一致,作为跨系统关联的锚点;status 是生命周期自动化的触发字段。

同步方向建议采用“HR → 主目录 → 各应用”的单向流,避免多源写入导致冲突。同步频率上,增量同步建议 5~15 分钟一次,全量对账每天一次。下面这张图展示了从 HR 到应用的身份数据流与权限判定链路。

身份数据流与权限判定链路 HR 系统 员工入职/离职/调岗 主身份目录 employeeId / status / groups IdP 认证 + 签发断言 业务应用 OIDC / SAML SCIM 同步 断言 权限模型:从角色到关系 RBAC 用户 → 角色 → 权限 适合岗位稳定的内部系统 ABAC 属性 + 环境条件判定 适合动态、细粒度场景 ReBAC 基于实体关系图判定 适合文档协作、多租户 用户生命周期状态机 入职 Active 调岗 Update 离职 Disabled 归档 Archived 调岗 离职 保留期

三、用户生命周期管理

生命周期管理的目标是让“入职即开通、调岗即调整、离职即回收”成为自动流程,而不是依赖人工工单。工程上通常用状态机来建模,核心状态包括 Active、Suspended、Disabled、Archived。

以入职为例,HR 系统创建员工记录后,通过 SCIM 推送到主目录,主目录根据 department 和 jobTitle 自动匹配角色组,IdP 在用户首次登录时触发 MFA 注册。离职时,HR 将 status 置为 terminated,主目录在 5 分钟内同步该状态,IdP 立即撤销所有会话令牌,下游应用通过 SCIM 收到禁用事件后回收本地权限。这里的关键是“撤销令牌”和“回收权限”必须同时发生,否则会出现“账号已禁用但会话仍有效”的窗口期。

调岗场景更复杂:员工从财务部转到研发部,旧权限必须回收、新权限必须授予。建议采用“先加后减”策略——先授予新角色,确认新权限可用后,再回收旧角色,避免调岗期间业务中断。同时要保留 30 天的权限变更审计日志,便于追溯。

四、身份治理与权限模型

权限模型决定“谁能对什么做什么”。RBAC、ABAC、ReBAC 不是互斥的,实际系统往往组合使用。

RBAC 适合岗位边界清晰的内部系统。例如“财务审批员”角色拥有“查看报销单”和“审批报销单”权限,用户通过加入角色组获得权限。它的优点是易理解、易审计,缺点是角色爆炸——当权限需要按部门、项目、地域细分时,角色数量会急剧膨胀。

ABAC 用属性表达式替代静态角色。例如策略“允许 department == "研发" 且 resource.classification == "internal" 且 request.time 在工作时间内”访问。ABAC 灵活,但策略编写和测试成本高,容易出现规则冲突。

ReBAC 基于实体关系图判定,典型如 Google Zanzibar 模型。例如“文档的编辑者可以邀请协作者”,权限由 document#editor@user 这样的关系元组推导。它非常适合文档协作、多租户 SaaS 等关系密集场景。

工程落地建议:以 RBAC 为基线覆盖 80% 的常规权限,用 ABAC 处理动态条件(时间、IP、设备合规状态),用 ReBAC 处理资源级共享关系。三者统一由策略决策点(PDP)评估,策略执行点(PEP)在网关或应用侧拦截。

实践提示:权限模型上线前,先用“最小权限矩阵”做一次回归测试——列出 10 个典型用户和 10 个典型资源,逐一验证允许/拒绝结果是否符合预期。这一步能提前发现 60% 以上的策略配置错误。

五、关键设计原则

  • 单一事实来源:员工身份以 HR 为准,客户身份以 CRM 为准,避免多源写入。
  • 标识稳定:employeeId 一旦分配不可变更,邮箱、用户名可变但仅作展示。
  • 默认拒绝:权限模型未显式允许的一律拒绝,新增应用默认不授予任何角色。
  • 可审计:每次权限变更记录操作者、时间、变更前后值,保留期不少于 180 天。
  • 自动化优先:能用 SCIM 同步的,不手工创建;能用策略判定的,不硬编码在应用里。

身份基础设施不是一次性项目,而是持续运营的能力。IdP 选型决定入口的可靠性,目录设计决定数据的准确性,生命周期管理决定权限的时效性,权限模型决定判权的精细度。四者协同,才能让零信任的“持续验证”有据可依。