3、身份与访问管理:统一身份认证、多因素认证(MFA)部署、单点登录(SSO)集成、身份生命周期管理

身份与访问管理(IAM),说白了就是零信任架构的「守门员」。你想想看,网络边界已经不存在了,那凭什么相信一个访问请求是合法的?凭的就是身份。我这些年做过的零信任项目,凡是落地顺利的,IAM 基础都打得非常扎实。反过来,那些上来就搞微隔离、搞动态授权的,最后都回来补 IAM 的课。

这一章,我把 IAM 拆成四个核心模块来讲:统一身份认证、多因素认证(MFA)、单点登录(SSO),以及身份生命周期管理。这四个东西不是孤立的,它们是一个有机整体。

核心观点: 在零信任体系里,身份不再是「你是谁」,而是「你能证明你是谁」以及「你被允许做什么」。身份是新的安全边界。

3.1 统一身份认证:打造唯一的身份源

很多企业的问题在于,身份散落在各个系统里。AD 一套、HR 系统一套、云上还有一套。结果就是一个人有七八个账号,密码记不住,权限也管不清。统一身份认证要做的,就是把这些零散的身份源整合成一个唯一的权威身份源。

我个人习惯把身份源分为两类:

  • 权威身份源: 通常是 HR 系统或企业目录(如 LDAP/AD)。它负责记录「这个人是不是公司员工」。
  • 消费身份源: 各种业务系统(OA、CRM、代码仓库等)。它们从权威身份源同步数据,但不直接修改核心身份属性。

我在项目中遇到过一家客户,他们的 HR 系统和 AD 是双向同步的,结果 HR 那边删了一个离职员工,AD 同步过去之后,又被某个定时任务从 AD 同步回了 HR…… 死循环了。嗯,这里要注意:权威身份源只能有一个,其他系统只能单向消费。

3.2 多因素认证(MFA)部署:别让密码成为唯一的锁

密码这东西,早就靠不住了。弱口令、撞库、钓鱼…… 你想想看,一个员工如果只用密码登录,那他的账号安全完全取决于他设密码时的「心情」。MFA 就是再加一把锁。

MFA 的三个要素:

  • 你知道的: 密码、PIN 码
  • 你拥有的: 手机(TOTP/推送)、硬件 Key(YubiKey)、智能卡
  • 你本身的: 指纹、人脸、虹膜

实际部署时,我建议按风险等级来配置 MFA 策略:

访问场景 风险等级 推荐 MFA 策略
内网访问内部办公系统 低 密码 + 可选 MFA
外网访问内部系统 中 密码 + TOTP/推送
访问核心生产系统 高 密码 + 硬件 Key
管理员操作 极高 密码 + 硬件 Key + 审批
避坑指南: 我曾经见过一个团队,把 MFA 的 TOTP 密钥明文存在数据库里。结果数据库被拖库,所有 MFA 形同虚设。记住,TOTP 密钥必须加密存储,且最好使用 HSM 或专用的密钥管理服务。

3.3 单点登录(SSO)集成:一次认证,到处通行

SSO 解决的是用户体验问题。没有 SSO 之前,员工每天要登录十几个系统,平均每天花 5-10 分钟在登录上。有了 SSO,一次认证,后续所有系统自动登录。

目前主流的 SSO 协议就三个:

  • SAML 2.0: 老牌协议,企业级应用支持最好。基于 XML 断言,适合 Web 应用。
  • OAuth 2.0 + OpenID Connect: 现代协议,轻量级,基于 JSON。适合移动端和单页应用。
  • CAS: 耶鲁大学出品的协议,国内高校用得比较多。

集成 SSO 时,我个人的经验是:优先用 OIDC,实在不行再考虑 SAML。为什么?因为 OIDC 更简单,Token 是 JWT 格式,解析方便,而且天然支持 API 授权。SAML 的 XML 签名验证,说实话,配置起来挺容易出错的。

下面是一个简单的 OIDC 授权码流程示例(伪代码):

// 1. 用户访问应用,未登录
// 2. 应用重定向到身份提供商(IDP)
GET /authorize?response_type=code&client_id=myapp&redirect_uri=https://myapp.com/callback&scope=openid+profile

// 3. 用户在 IDP 登录,授权后重定向回应用
// 4. 应用用授权码换取 Token
POST /token
  grant_type=authorization_code
  code=xxxxx
  redirect_uri=https://myapp.com/callback
  client_id=myapp
  client_secret=yyyyy

// 5. IDP 返回 Access Token 和 ID Token
{
  "access_token": "eyJhbGciOiJSUzI1NiIs...",
  "id_token": "eyJhbGciOiJSUzI1NiIs...",
  "token_type": "Bearer",
  "expires_in": 3600
}

// 6. 应用验证 ID Token 的签名,提取用户信息
// 7. 后续请求携带 Access Token 访问 API
小技巧: 集成 SSO 时,一定要处理好「会话超时」和「Token 刷新」的逻辑。我曾经见过一个系统,Access Token 过期了没有自动刷新,结果用户每 1 小时就要重新登录一次,体验极差。建议使用 Refresh Token 实现静默续期。

3.4 身份生命周期管理:从入职到离职,全程自动化

身份生命周期管理,说白了就是管好一个人从入职到离职的全过程。这个环节如果做不好,就会出现「离职员工账号还在活跃」这种重大安全隐患。

完整的生命周期包括四个阶段:

  1. 创建: 员工入职,HR 系统触发,自动在 IDP 中创建账号,并根据岗位模板分配基础权限。
  2. 变更: 员工转岗、晋升,自动调整权限组,回收旧权限,授予新权限。
  3. 暂停: 员工长期休假、涉密调查,账号临时禁用,但保留数据。
  4. 删除: 员工离职,HR 系统触发,自动禁用账号,回收所有权限,并触发审计流程。

我建议用一张图来理解这个流程:

身份生命周期管理流程 创建 变更 暂停 删除 HR 系统触发 自动创建/更新/删除账号 触发审计流程 关键原则 权威身份源唯一、变更可追溯、删除不可逆(保留审计日志)
特别注意: 账号删除不等于数据删除。员工离职后,他的邮件、文档、代码通常需要保留一段时间(比如 90 天),以便交接和审计。我建议采用「软删除」策略:先禁用账号,保留数据,等保留期过后再彻底清理。

3.5 四个模块的协同关系

统一身份认证是基础,MFA 是增强,SSO 是体验,生命周期管理是治理。这四个模块缺一不可。你想想看,如果没有统一身份认证,MFA 都不知道该对谁生效;如果没有生命周期管理,离职员工的 SSO 会话可能还在有效期内。

我个人习惯把这四个模块的集成关系画成一张架构图:

IAM 四大模块协同架构 统一身份认证 多因素认证 单点登录 身份生命周期管理 增强认证强度 提升用户体验 保障账号全生命周期安全