2026 年的 Passkeys:实用工程指南
密码已经过时了。它们依赖于共享密钥。如果服务器存储了密码,你的攻击面就会翻倍。
数据表明,这种风险是巨大的。凭据被盗是导致大多数数据泄露的原因。信息窃取类恶意软件每年都会窃取数百万个密码。即使是 2FA 也存在缺陷。短信验证码面临 SIM 卡交换攻击。TOTP 令牌面临实时网络钓鱼。
Passkeys 改变了这一切。它们通过 WebAuthn 和 FIDO2 使用公钥密码学。
工作原理: • 你的设备会创建一个公私钥对。 • 私钥保存在你的硬件中。 • 服务器只获取公钥。 • 在登录过程中,你的设备会对一个随机挑战进行签名。 • 没有秘密信息在网络上传输。
这可以防止网络钓鱼,因为 Passkeys 与你的特定域名绑定。你网站的 Passkey 在虚假网站上无法使用。
如何实现: 不要编写原始的 WebAuthn 代码。这很容易出错。请在 TypeScript 和 Node.js 环境中使用 SimpleWebAuthn。它会为你处理复杂的数学运算。
安装:
npm install @simplewebauthn/server @simplewebauthn/browser
应避免的常见错误: • 重用挑战值。挑战值必须是单次使用的,并且由服务器生成。 • 忽略计数器。务必更新凭据计数器,以检测克隆密钥。 • 忘记恢复机制。如果用户丢失了设备,他们就会丢失账号。请务必先构建恢复路径。 • 用户体验(UX)不佳。跨设备流程通常完成率较低。在迁移期间请保留备选方案。
迁移策略:
- 第一阶段:在密码登录后,提供 Passkeys 作为可选方案。
- 第二阶段:一旦大多数用户采用,就将 Passkeys 作为主要验证方式。
- 第三阶段:要求所有新注册用户使用 Passkeys。
行业已经做出了改变。Google 报告称,使用 Passkeys 后,账号被盗的比例大幅降低。Amazon 和 TikTok 等主流平台都在使用它们。如果你还不支持,你就落后了。
Source: https://dev.to/moksh/passkeys-in-2026-a-practical-engineering-guide-to-passwordless-auth-15pj