自适应 MFA:按风险触发

一刀切的代价

如果 MFA 每次登录都触发,用户会崩溃——尤其对高频使用场景,多一步验证就多一分流失。但完全不触发,安全又无从谈起。

答案是把验证强度跟随风险,这就是自适应 MFA(Adaptive / Risk-based MFA)。

触发原则

低风险场景少打扰,高风险场景强验证。下面是我实际使用的触发矩阵:

自适应认证

验证强度跟随风险,而不是一刀切

常用设备、常用地域登录账号 + 密码即可,不额外打扰
低风险直接放行
新设备首次登录邮箱 / 短信验证码,确认设备归属
中风险验证码确认
异地登录 / IP 突变要求 TOTP / WebAuthn 或手机确认
中风险MFA 二次验证
修改密码、邮箱、手机号身份信息变更前必须强验证
高风险MFA + 重新认证
提现、删除数据、生成 API Key高风险操作先升级信任,必要时暂缓
高风险MFA + 风险阻断
通过 MFA 后给会话记录 assurance_level = high, 在有效期内执行敏感操作不必重复验证;超过有效期或风险变化后再要求重新验证。

自适应 MFA 的组成

一个可落地的自适应 MFA 需要三块:

1. 风险信号采集

登录 / 操作时收集信号:

  • 设备指纹(是否新设备、是否常用设备)。
  • 地理位置(是否常用地域、IP 是否异常)。
  • 行为特征(时段、频率、是否代理)。
  • 操作敏感度(读操作 vs 提现)。

2. 风险决策

把信号综合成一个风险等级(low / medium / high),决定要不要升级验证、升到哪一级。可以规则简单起步,再逐步上风控模型。

3. 会话信任等级

验证通过后,把结果记到会话上:

session.assurance_level = high
mfa_verified_at = now

这样接下来一段时间内,用户执行敏感操作不必重复验证;超过有效期或风险变化后,再要求重新验证。

体验与安全的平衡点

自适应 MFA 不是「越严格越好」,而是:

  • 常用设备、常用地域:尽量顺滑,别打扰。
  • 第一次新设备:验证码确认即可。
  • 异地 / 高风险操作:升级到 TOTP / WebAuthn。
  • 确凿异常:阻断并通知。

一个常见的坑

自适应 MFA 依赖风险信号,但如果信号太少(比如只按 IP),会误伤或漏判。信号要多样化,并且要有降级策略:风控系统不可用时,宁可临时提高验证门槛,也不要全部放行。

小结

  • 自适应 MFA = 风险信号 + 决策 + 会话信任等级。
  • 把额外摩擦放在风险最高的地方。
  • 通过 MFA 后给会话记录 assurance_level,避免重复打扰。
  • 风控不可用时要有降级兜底。

下一节看 MFA 的最后一环:用户丢了手机怎么办——恢复机制。