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