3. 身份与访问管理(IAM):统一身份认证、单点登录(SSO)、多因素认证(MFA)实战配置

零信任的核心原则,说白了就是「永不信任,始终验证」。但验证谁?怎么验证?验证完怎么授权?这三个问题,就是 IAM 要解决的事。

我在不少项目里见过一种通病:公司上了零信任网络,但身份认证还停留在「用户名+静态密码」阶段。结果呢?攻击者只要搞到一组凭证,整个网络就形同虚设。所以,IAM 是零信任的第一道门,也是最后一道防线。

3.1 统一身份认证:把散落的用户源收拢

很多企业早期业务扩张快,每个系统都有自己的用户表。CRM 一套、ERP 一套、OA 又一套。员工离职了,OA 账号关了,但 CRM 的账号还活着。这就是身份孤岛。

统一身份认证要做的,就是把所有用户源收拢到一个中心。我习惯叫它 IdP(身份提供者)。

核心思路:所有应用不再自己管用户,而是把认证委托给 IdP。IdP 统一管理用户生命周期——入职、转岗、离职,都在一个地方操作。

实战中,常见的 IdP 方案有这些:

方案 适用场景 我踩过的坑
LDAP / OpenLDAP 传统企业、内部工具 树形结构设计不好,后期迁移很痛苦
Azure AD / Entra ID 微软生态、Office 365 用户 同步延迟问题,曾导致新员工半天登不上系统
Keycloak(开源) 自建、云原生、容器化 配置复杂,但灵活度最高
Okta / Auth0 SaaS 为主、全球化 成本偏高,小团队慎入

我个人建议,中小团队优先考虑 Keycloak。开源、社区活跃、支持标准协议(OIDC、SAML、LDAP)。我去年帮一家金融科技公司搭 IdP,就是用 Keycloak 对接了他们的 HR 系统,实现了自动入职/离职同步。

小技巧:IdP 的用户源不要只依赖一个。最好同时对接 HR 系统(权威源)和 AD(存量源),以 HR 数据为准,定期做 reconcile。

3.2 单点登录(SSO):一次登录,到处通行

统一了用户源,接下来就是 SSO。用户只需要登录一次,就能访问所有授权的应用。

嗯,这里要注意:SSO 不是把密码共享给所有应用。而是通过 Token 或 Ticket 来传递认证状态。

主流协议就两个:

  • OIDC(OpenID Connect):基于 OAuth 2.0,适合现代 Web 和移动端。返回的是 ID Token(JWT 格式)。
  • SAML 2.0:基于 XML,老牌协议,适合企业级 SaaS 和传统应用。

我曾经在一个项目里,非要让一个 2005 年开发的旧系统支持 OIDC。折腾了两周,最后发现它只支持 SAML。所以,不要跟协议较劲,兼容才是王道。

实战配置步骤(以 Keycloak + OIDC 为例):

  1. 创建 Realm:相当于一个租户或项目空间。
  2. 创建 Client:代表你的应用,配置回调 URL(Redirect URI)。
  3. 配置用户和角色:可以直接建用户,也可以对接 LDAP。
  4. 应用集成:在应用代码里引入 OIDC 客户端库(比如 Spring Security、Passport.js)。
  5. 测试 SSO 流程:登录一次,访问多个应用,确认 Token 刷新正常。

避坑指南:我曾经遇到过回调 URL 没配 HTTPS,导致浏览器拦截重定向。还有一次是 Token 过期时间设得太短(5 分钟),用户写个文档的功夫就被踢出去了。建议:Access Token 15-30 分钟,Refresh Token 8-24 小时。

3.3 多因素认证(MFA):密码不够,再加一把锁

密码泄露是常态。光靠密码,你挡不住撞库、钓鱼、暴力破解。MFA 就是在密码之外,再加一个验证因子。

常见的因子类型:

  • 知识因子:密码、PIN 码(你知道的)
  • 持有因子:手机、硬件 Key、TOTP 验证码(你拥有的)
  • 固有因子:指纹、人脸、声纹(你是什么)

零信任场景下,至少启用两种不同的因子。我个人习惯是「密码 + TOTP」作为标配,高权限操作再加硬件 Key(比如 YubiKey)。

实战配置 MFA(以 Keycloak 为例):

  1. 进入 Realm 设置 → Authentication → Flows。
  2. 复制默认的 Browser Flow,重命名为 Browser with MFA。
  3. 在 Browser Flow 里添加执行器:OTP Form。
  4. 配置 OTP 策略:算法(SHA1/SHA256)、位数(6位)、有效期(30秒)。
  5. 绑定 Flow 到应用的 Authentication Flow。
  6. 用户首次登录时,会被引导绑定 TOTP(扫码或手动输入密钥)。

关键点:MFA 不要一刀切。内部网络、低风险操作可以跳过 MFA;外部访问、敏感操作必须 MFA。这叫 自适应 MFA(Adaptive MFA)。

我曾经帮一家电商公司做 MFA 改造。一开始全员强制 MFA,结果客服部门炸了——他们每天要登录几十次,每次都要输验证码。后来改成「首次登录 + 敏感操作」才触发 MFA,投诉率直接降到零。

3.4 实战架构:IAM 在零信任中的位置

下面这张图,是我在项目中常用的 IAM 核心架构。它把身份认证、SSO、MFA 串在了一起。

零信任 IAM 核心架构图 零信任 IAM 核心架构 用户 策略执行点 (PEP) 身份提供者 (IdP) 策略决策点 (PDP) MFA 服务 用户目录 (LDAP) 请求访问 认证请求 触发 MFA 查询用户 请求决策 验证结果 流程说明: 用户请求 → PEP 拦截 → 重定向到 IdP 认证 → IdP 触发 MFA(如需)→ 查询用户目录 → 返回 Token → PEP 向 PDP 请求授权 → 放行或拒绝

你看,整个流程里,用户只跟 PEP 打交道。PEP 不自己做决策,它把认证丢给 IdP,把授权丢给 PDP。这样,身份和策略就解耦了。

3.5 配置清单与避坑总结

最后,我整理了一份实战配置清单。你照着这个清单做,基本不会漏掉关键点。

阶段 检查项 常见问题
统一身份 用户源是否唯一?是否支持 SCIM 自动同步? 多源冲突、同步延迟
SSO 回调 URL 是否 HTTPS?Token 过期策略是否合理? HTTP 重定向被拦截、Token 太短
MFA 是否区分风险等级?是否支持备用码? 全员强制导致体验差、备用码丢失无法恢复
日志审计 认证日志是否集中存储?是否关联用户行为? 日志分散、无法溯源

最后一条忠告:IAM 不是配完就完事的。你需要持续监控认证失败率、MFA 绑定率、异常登录行为。我曾经见过一个客户,MFA 配了半年,绑定率只有 30%——因为没人强制。所以,技术配好了,流程和制度也得跟上。