webAuthn真是个好东西
类似yubikey和mTLS, 用公私钥去验证客户端身份
客户端私钥(Passkey)由Authenticator管理, Chrome和mac都有可以作为管理Passkey的Authenticator
Authenticator可以跨设备同步, 所以不用怕单点故障; 有端对端加密, 不用怕泄露
登录流程
sequenceDiagram participant u as 用户 participant a as 验证器
(指纹/面部/硬件秘钥) participant c as 客户端
(浏览器) participant s as 服务端 u ->> c: 点击注册按钮 c ->> s: 请求challenge s -->> c: challenge c ->> a: 请求签名并获取公钥 a ->> u: 生物认证 u -->> a: 认证 a ->> a: 生成公私钥
使用私钥对challenge签名 a -->> c: 返回公钥,credentialId
和签名后的challenge c ->> s: 注册 s ->> s: 使用公钥验证challenge s ->> s: 保存公钥和credentialId s -->> c: cookie