多因素认证 MFA

密码可能泄露,Token 可能被盗,设备可能被共享。MFA 的目标是在高风险场景中增加第二层证明,让攻击者即使拿到密码,也不一定能完成登录或敏感操作。

MFA 因子

常见认证因子分三类:

类型示例
你知道的密码、PIN
你拥有的手机、硬件密钥、TOTP 应用
你本人的指纹、人脸

MFA 至少组合两类不同因子。密码 + 短信验证码是常见方案,但短信会受到 SIM 卡攻击和短信劫持影响;TOTP、WebAuthn 或硬件密钥安全性更高。

触发策略

MFA 不一定每次登录都触发,否则用户体验会很差。更合理的是基于风险触发:

  • 新设备登录。
  • 异地登录。
  • 修改密码、邮箱、手机号。
  • 提现、删除数据、生成 API Key 等高风险操作。
  • 风控模型判断当前会话异常。

这叫自适应 MFA:低风险场景少打扰,高风险场景强验证。

恢复机制

MFA 设计必须考虑用户丢失手机或验证器的情况。常见恢复方式包括:

  • 备用恢复码。
  • 已登录设备确认。
  • 人工审核。
  • 企业管理员重置。

恢复流程本身也是攻击入口,不能比 MFA 更弱。人工审核要记录材料、审核人和处理结果。

安全实现

MFA 验证要注意:

  • 验证码短期有效,限制重试次数。
  • TOTP 要允许少量时间偏移,但不能过宽。
  • 备用码只能使用一次,并加密存储。
  • 通过 MFA 后可以给会话提升信任等级,但要设置有效期。

MFA 不是为了让所有操作更麻烦,而是把额外摩擦放在风险最高的地方。

与会话联动

完成 MFA 后,系统可以记录:

session.assurance_level = high
mfa_verified_at = now

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

下一章我们把账号密码、Token、会话、SSO、OAuth 和 MFA 合并成完整身份认证架构。