本技能用于在实现双因素认证(2FA)的设置与验证时参考。2FA 在用户输入密码后增加第二重验证,要求其提供“拥有”的东西(手机、安全密钥或身份验证器应用)来配合“知道”的密码,降低凭据被盗导致的未授权访问风险。该模式同时覆盖设置流程(注册第二因子)和验证流程(登录时输入验证码或使用设备)。
适用场景:需要额外验证层保护账户时,如金融、银行和支付平台;邮件与通信平台;管理后台和特权用户账户;含敏感数据的医疗与法律应用;可访问基础设施和代码仓库的开发者平台。不宜用于:低风险应用(2FA 成本高于安全收益)、面向技术水平有限用户的应用(可考虑基于风险的认证)、2FA 摩擦会显著降低采用率的消费产品(应设为可选)、以及基于设备因子的自助终端或共享设备环境。
实现流程:先确认模式与问题及约束匹配,再从 references/pattern.md 中的结构与示例出发选择最小可行变体,在叠加视觉打磨前应用可访问性、性能和交互护栏,并按测试指引验证键盘、屏幕阅读器、响应式及失败场景下的行为。
可访问性要求:验证码输入使用 inputmode="numeric",使用 autocomplete="one-time-code",为二维码图片提供说明用途的替代文本,无效验证码时用 role="alert" 播报错误,并提供二维码之外的文本替代方式(手动输入密钥)。不要将二维码作为设置 TOTP 的唯一方式,不要用时间压力惩罚需要更多时间输入验证码的用户,不要仅靠颜色传达成功或错误反馈。
性能目标:二维码生成服务端 < 200ms,验证码校验服务端 < 300ms,短信送达 < 10 秒,输入响应按键到显示 < 50ms,第 6 位数字到提交自动提交 < 100ms。可采用客户端二维码生成优化,例如 const qrDataUrl = await QRCode.toDataURL(totpUri);
常见错误与修复:缺少备用码恢复时,在设置阶段生成 8-10 个一次性备用码,提示用户保存并在验证界面提供备用码入口;仅依赖短信时,应以 TOTP 为主、短信为后备,高安全账户可支持安全密钥;时间偏移导致拒绝时,接受当前时间窗口及前后各一个窗口(±30 秒)内的验证码,这是标准 TOTP 容差。
相关模式包括账户设置、登录、密码重置和社交登录,完整实现细节、示例和测试说明见 references/pattern.md。