密码正在死亡 —— 从 MFA 到无密码登录(2020–2026)

上一章我们聊了单点登录(SSO)在前端的落地形态:从 Cookie 域共享到基于 OIDC + Refresh Token 的集中式认证,再到微前端下的同步挑战。但无论 Token 再怎么优化、SSO 再怎么无缝,密码 这个人类最古老的数字身份载体,始终是整个体系最脆弱的一环:易忘、易猜、易钓鱼、易泄露、易重用。

从 2020 年开始,行业集体意识到:最好的密码,就是没有密码 。这一篇,我们聚焦密码的"死亡过程"------从传统 MFA 的普及,到 TOTP/HOTP 的辅助,再到 WebAuthn/FIDO2 的崛起,最终到 2025--2026 年 Passkey(通行密钥)成为主流的无密码方案。前端工程师的角色,也从"表单 + 验证码校验"进化到"调用 navigator.credentials API + 处理跨设备同步"。

1. 2020--2022:MFA 成为标配,但密码仍是"根"

2020 年疫情加速数字化,远程办公 + 电商爆发,钓鱼攻击激增。密码 + 短信/邮箱 OTP 的组合被大规模强制。

典型前端实现(2020--2022):

  • 登录页:用户名 + 密码 + "发送验证码"按钮
  • 后端发短信/邮件 → 前端输入 6 位码
  • 框架:React/Vue + axios 轮询 / 长连接 polling

但问题很快暴露:

  • 短信劫持(SIM swapping)泛滥
  • 钓鱼网站实时中转 OTP
  • 用户疲劳 → 关闭 MFA 或用弱密码

统计:2021--2022 年,短信 OTP 仍是主流,但 FIDO Alliance 开始大力推 FIDO2(WebAuthn + CTAP)作为 phishing-resistant MFA。

前端接入 WebAuthn(早期):

js 复制代码
// 注册(navigator.credentials.create)
async function register() {
  const publicKey = await fetch('/webauthn/register/challenge').then(r => r.json());
  const credential = await navigator.credentials.create({ publicKey });
  await fetch('/webauthn/register', {
    method: 'POST',
    body: JSON.stringify(credential)
  });
}

但 2020--2022 年,WebAuthn 普及慢:浏览器支持不全、用户教育成本高、设备兼容性差。

2. 2022--2024:Passkey 概念诞生 + 巨头推动(Apple/Google/Microsoft 三巨头联盟)

2022 年 5 月,Apple 在 WWDC 推出 iOS 16 的 Passkeys(基于 FIDO2 的同步凭证)。

核心卖点:

  • 私钥存设备 Secure Enclave / TPM
  • 公钥注册到服务端
  • 跨设备同步(iCloud Keychain / Google Password Manager / Microsoft 的实现)
  • 生物识别(指纹/面容)或 PIN 验证
  • Phishing-resistant(origin binding)

2023 年 Google 跟进:Chrome + Android 全面支持 Passkey,默认推动。

2024 年 Microsoft:新账户默认无密码 + Passkey。

前端变化:

  • 使用 @simplewebauthn/browser 或原生 navigator.credentials
  • 支持 autofill(浏览器自动提示 Passkey)
  • 条件 UI(conditional mediation):mediation: 'conditional' 让 Passkey 像密码一样自动填充

典型注册/认证代码(2024 现代写法):

js 复制代码
// 认证(登录)
async function authenticate() {
  const options = await fetch('/webauthn/auth/options').then(r => r.json());
  options.mediation = 'conditional';  // 自动提示
  const assertion = await navigator.credentials.get({ publicKey: options });
  const res = await fetch('/webauthn/auth', {
    method: 'POST',
    body: JSON.stringify(assertion)
  });
  if (res.ok) console.log('登录成功');
}

这一阶段,Passkey 从"实验"变成"可选默认"。

3. 2025--2026:Passkey 真正爆发 + 密码死亡的临界点(2026 年现状)

到 2026 年 2 月,数据已非常清晰:

  • 设备就绪率:96% 的设备支持 Passkey(state-of-passkeys.io 数据,桌面 +68%、移动 +3% 增长)
  • 用户拥有率:69% 用户至少有一个 Passkey(从 2023 年的 39% 认知率暴涨)
  • 顶级网站支持率:48% 的前 100 网站支持 Passkey(2022 年仅 20% 多)
  • 登录成功率:Passkey 93% vs 传统 63%
  • 企业部署:87% 组织已部署或正在部署 Passkey(HID/FIDO 数据)
  • 认证量:Dashlane 数据显示月认证量达 130 万(同比翻倍),Google 增长 352%、Roblox 856%

巨头强制默认:

  • Google:2023 年起默认 Passkey
  • Microsoft:2025 年 5 月新账户默认无密码
  • Amazon、PayPal、TikTok 等电商/社交平台大规模跟进

前端接入难度(2026 年):

  • 极低:成熟库(@simplewebauthn、@auth0/auth0-spa-js、Clerk、Supabase Auth)屏蔽细节
  • 跨设备同步:依赖平台(iCloud/Google/MS),前端只需调用 API
  • 回退机制:仍支持密码 + TOTP 作为备用(恢复码、邮箱魔法链接)
  • 一键登录融合:Passkey + Apple/Google 一键 + 本机号码识别

典型组合拳(ToC 高频场景):

  1. 首选:Passkey(生物/设备验证)
  2. 备用:魔法链接(邮箱点击)
  3. 恢复:一次性恢复码 + 手机号验证
  4. 高危操作:Passkey + 二次确认(金额/敏感数据)

4. 前端工程师的实际落地 Checklist(2026 版)

  • 使用 navigator.credentials + mediation: 'conditional' 实现 autofill
  • 支持跨平台 RP ID(related-origin-requests for 多域)
  • 处理 user verification:userVerification: 'preferred' | 'required'
  • 兼容旧浏览器:polyfill 或 fallback 到 TOTP
  • 测试场景:Incognito、无网络、设备切换
  • 隐私考虑:不存储敏感 claims,前端只管传输 raw credential

小结 & 过渡

2020--2026 年,密码从"必须" → "可选" → "即将灭绝"的过程,核心驱动力是:

  • 安全:phishing-resistant(FIDO2)
  • 体验:生物识别 + 跨设备同步
  • 经济:减少重置支持票(降 50--80%)

到 2026 年,Passkey 已不是"未来技术",而是消费者预期:用户开始问"为什么你们还不支持 Passkey?"

但密码完全死亡还需要时间:遗留系统、合规要求、低端设备、用户教育仍存阻力。

相关推荐
杨超越luckly1 小时前
HTML应用指南:利用GET请求获取中国邮政网点位置信息
前端·python·arcgis·html·php·数据可视化
牛奶1 小时前
你不知道的JS(中):类型与值
前端·javascript·电子书
慧一居士2 小时前
nuxtjs和nextjs区别对比
前端·vue.js
开开心心就好2 小时前
高效U盘容量检测工具,一键辨真假,防假货
linux·运维·服务器·线性代数·安全·抽象代数·1024程序员节
冰暮流星2 小时前
javascript之字符串索引数组
开发语言·前端·javascript·算法
御坂10101号2 小时前
Google Ads 转化凭空消失?问题藏在同意横幅的「时机」
前端·javascript·测试工具·网络安全·chrome devtools
麦德泽特2 小时前
设计一个安全的时效性遥控协议:对抗重放攻击
服务器·网络·安全
卓豪终端管理2 小时前
终端管理化繁为简:统一平台如何兼顾效率与安全?
安全
星火开发设计2 小时前
模板特化:为特定类型定制模板实现
java·开发语言·前端·c++·知识