展开本页目录
开始前准备什么
- 下载本题完整练习包,区分待实现 starter 与作者完成 reference。
- 按README准备本题原生依赖;所有输入均为原创或明确标注的本地fixture。
- 本地练习不需要付费模型Key;真实模型调用未执行,MiniLM题另有明确实际推理说明。
- 启用练习认证器
- 注册真实凭据
- 请求新Challenge
- 验证签名登录
- 拒绝重放响应
- 拒绝错误Origin
- 区分虚拟与硬件
原创输入、待完成starter、作者reference及实际运行产物,依README本地准备依赖。
环境要求、具体操作、产物核对与未运行范围。
1. 启用练习认证器
只创建 Chromium CDP 虚拟认证器,用户为 [email protected],不触碰个人设备已有Passkey。服务器使用成熟 fido2 库,本机 origin 与 rpId 明确对应。
2. 注册真实凭据
浏览器调用 navigator.credentials.create 完成真实 WebAuthn 注册,服务器 register_complete 解析并保存公钥凭据。按钮变化不是注册成功的验收依据。
本地启动与复现
cd reference
python3 server.py --port 87873. 请求新Challenge
每次登录重新 authenticate_begin,生成一次性challenge。浏览器从JSON解析请求参数,再通过 navigator.credentials.get 产生认证响应。
4. 验证签名登录
服务器 authenticate_complete 用保存的公钥、challenge和origin验证签名。正常登录真实返回200;下载结果记录的是本地软件认证器,不是硬件测试。
5. 拒绝重放响应
把已经成功使用的同一响应再提交一次,服务器因challenge状态已消费返回400。只比对credential ID而不消费challenge会遗漏这个问题。
6. 拒绝错误Origin
再生成一次新挑战,故意篡改响应clientData中的origin,验证服务器拒绝。修改JSON必须真的到达原生验证器,不能由前端自己显示“已拦截”。
7. 区分虚拟与硬件
阅读注册、登录、重放与错origin四种真实HTTP结果。虚拟认证器不证明生物识别、跨设备同步或手机硬件兼容;Cursor账号生成会话和生产登录系统未运行。
怎样确认已经完成
- 真实注册和签名登录经过fido2服务端验证。
- 同一成功响应重放被拒,篡改origin的新挑战也被拒。
- 挑战一次性消费,只用虚拟认证器和虚构练习账户。
常见问题
AI生成的免密码登录页面,怎么确认真的验证了Passkey?
浏览器必须调用credentials.create/get,服务器再用公钥、challenge、origin实际验证签名。本题使用真实fido2和虚拟认证器完成。
同一条登录响应重放一遍,服务端会不会照样放行?
不会。本题成功登录后消费一次性challenge,同一响应重放真实返回400;只比credential ID是不够的。
哪些部分实际运行,哪些需要独立验证?
原生WebAuthn与Python fido2完成注册、签名登录、重放拒绝和错origin拒绝;使用Chromium虚拟认证器,未碰个人Passkey。 目标AI助手账号生成、云平台部署和生产环境不在本次执行范围。




