1. 课程导入
在过去的二十多年里,密码几乎等同于“账号安全”。但现实是:弱密码、撞库、钓鱼、短信验证码劫持、OTP 中间人攻击,让“知道一个秘密”这种认证方式越来越难以支撑高价值业务。WebAuthn 与 Passkey 的出现,并不是简单地把密码换成一个更长的字符串,而是把认证的信任根从“共享秘密”迁移到“非对称密钥对 + 设备持有 + 用户生物识别或本地 PIN”。理解这一转变,是学习本课程的第一把钥匙。
一、核心定义:WebAuthn、Passkey 与 FIDO2 的关系
WebAuthn(Web Authentication)是 W3C 与 FIDO 联盟共同推动的 Web 标准 API,它让浏览器和操作系统能够以标准化方式调用认证器(Authenticator),完成基于公钥密码学的注册与登录。FIDO2 则是一个更大的技术集合,包含 WebAuthn 与 CTAP2(Client to Authenticator Protocol 2)。可以这样理解:FIDO2 是目标与协议框架,WebAuthn 是浏览器侧的 API 规范,CTAP2 是浏览器/系统与外部认证器之间的通信协议。
Passkey 是 WebAuthn 能力在产品和用户体验层面的落地形态。它通常指可同步的 FIDO 凭据(Synced Passkey),私钥由平台密钥链(如 iCloud Keychain、Google Password Manager、Windows Hello/微软账户)加密同步,用户可以在多台设备上使用同一 Passkey。与之相对的是设备绑定凭据(Device-bound Credential),私钥不出安全芯片,安全性更高但跨设备体验较弱。课程中我们会反复区分这两类凭据,因为它们的风险模型、恢复策略和合规要求完全不同。
一句话理解:WebAuthn 是“浏览器如何调用认证器”的标准;Passkey 是“用户如何无密码登录”的产品化凭据;FIDO2 是二者背后的整体协议体系。
二、发展背景:为什么现在必须学 WebAuthn
从时间线看,FIDO U2F 在 2014 年解决了“第二因素”问题,但注册和登录流程仍依赖密码。2019 年 WebAuthn 成为 W3C 正式推荐标准,2022 年 Apple、Google、Microsoft 联合推动 Passkey,2023 年后主流浏览器与操作系统全面支持。推动力来自三方面:一是钓鱼攻击规模化,传统 OTP 难以防御实时中继;二是移动设备普及,生物识别成为最自然的用户验证方式;三是监管与合规压力,如支付、金融、政务场景对“抗钓鱼认证”的要求不断提高。
对开发者而言,这意味着认证不再只是后端比对哈希。你需要理解挑战值(Challenge)、来源(Origin)、RP ID、用户句柄(User Handle)、认证器数据(Authenticator Data)、证明(Attestation)等概念,并能在注册、登录、恢复、注销全生命周期中做出正确决策。
三、学习目标与整体课程框架
本课程共 30 章,目标不是让你“会调一个 API”,而是让你具备设计、实现、审计和演进 Passkey 认证策略的能力。完成课程后,你应当能够:
- 解释 WebAuthn 注册与登录的完整密码学流程,并识别常见实现错误;
- 根据业务场景选择 Synced Passkey 或 Device-bound Credential,并设计降级与恢复策略;
- 在服务端正确生成 Challenge、校验 Origin/RP ID、验证签名与计数器;
- 设计多设备、多平台、多账号体系下的 Passkey 绑定与迁移方案;
- 识别并防御钓鱼、重放、中间人、凭据填充等攻击;
- 制定从密码 + OTP 到 Passkey 的渐进式迁移路线图。
课程整体分为六个模块:基础与标准(第 1–5 章)、注册与登录流程(第 6–11 章)、服务端实现与安全校验(第 12–17 章)、Passkey 产品化与恢复策略(第 18–22 章)、攻击面与防御实战(第 23–27 章)、企业落地与演进路线(第 28–30 章)。每一章都围绕“原理—流程—代码—案例—复盘”展开。
| 模块 | 核心问题 | 实战产出 |
|---|---|---|
| 基础与标准 | WebAuthn/Passkey/FIDO2 是什么,解决什么问题 | 术语表、信任模型图、选型清单 |
| 注册与登录流程 | Challenge、Attestation、Assertion 如何流转 | 可运行的注册/登录时序与接口设计 |
| 服务端实现与安全校验 | 如何正确校验签名、Origin、RP ID、计数器 | 服务端校验代码与测试用例 |
| 产品化与恢复策略 | 多设备、多平台、账号恢复如何设计 | Passkey 生命周期状态机与恢复流程 |
| 攻击面与防御 | 钓鱼、重放、MITM、降级攻击如何防 | 威胁模型与防御检查表 |
| 企业落地与演进 | 如何从密码迁移到 Passkey 并持续运营 | 迁移路线图与灰度发布方案 |
四、实战路线图:从零到可上线的 Passkey 认证
为了避免“学完标准却不知道从哪下手”,我们给出一条贯穿课程的实战路线。你可以把它当作项目里程碑:
- 环境准备:搭建支持 HTTPS 的本地开发环境,准备浏览器与认证器(平台认证器或安全密钥)。
- 最小注册闭环:实现
navigator.credentials.create()调用,服务端生成 Challenge 并保存公钥凭据。 - 最小登录闭环:实现
navigator.credentials.get()调用,服务端校验签名与 Challenge。 - 安全加固:校验 Origin、RP ID、UV/UP 标志、签名计数器,处理异常与重放。
- 产品化:支持多设备 Passkey、账号恢复、凭据管理、降级登录。
- 攻击演练:模拟钓鱼、重放、MITM、降级攻击,验证防御有效性。
- 灰度上线:设计 A/B 测试、监控指标、回滚策略与用户引导。
学习建议:每学完一个模块,回到这条路线图,确认自己能在代码或架构图中指出对应环节。不要只读不练,Passkey 的很多坑只有在真实浏览器与真实认证器上才会暴露。
五、常见误区与复盘
在正式进入技术细节前,先纠正几个高频误区,能帮你少走弯路:
- 误区一:Passkey 等于“无密码”。Passkey 可以替代密码,但很多系统仍保留密码作为降级或恢复手段。是否彻底移除密码,取决于业务风险与用户覆盖。
- 误区二:WebAuthn 只是前端 API。WebAuthn 的安全边界一半在前端,一半在服务端。Challenge 生成、Origin 校验、签名验证、凭据存储都在服务端,任何一环出错都会导致严重漏洞。
- 误区三:Synced Passkey 一定比 Device-bound 差。两者是权衡:Synced 提升可用性与跨设备体验,Device-bound 提升抗提取能力。正确做法是按场景分层,而不是一刀切。
- 误区四:接入 WebAuthn 就能防钓鱼。WebAuthn 天然抗钓鱼的前提是正确校验 Origin 与 RP ID。如果服务端忽略这些校验,钓鱼站点仍可能诱导用户完成认证。
复盘提醒:在后续章节中,每当你实现一个接口,都要问三个问题:Challenge 是否一次性且不可预测?Origin 与 RP ID 是否严格匹配?凭据与用户、设备的绑定关系是否清晰?这三问能挡住大多数低级但致命的错误。
现在,你已经掌握了本课程的坐标系:WebAuthn 是标准,Passkey 是产品形态,FIDO2 是协议体系;学习目标是具备设计、实现与审计能力;实战路线图从最小闭环走向安全加固与灰度上线。接下来,我们将从认证器的信任模型与密码学基础开始,逐步拆解每一个环节。