最近登录一些网站发现可以直接用指纹或者刷脸登录了,这还蛮方便的,看了一下叫做Passkey,基本的原理其实就是非对称加密,和我们的SSH秘钥登录是同一个东西,只是把这东西推广了,作为未来的一个方向。我觉得这个结合了硬件加密,也做了多端同步,比现在的2FA验证方便,应该会是将来的主要登录方式。
基本流程

整个流程只有公钥在网络中传输,私钥则保存在客户端本地(例如TPM),并在使用时要求使用面容或指纹解锁,极大地提高了安全性。
Demo
https://passkeys-demo.appspot.com/
细节
首次注册还是使用了账号密码,证明我是我。不过我觉得这个其实也可以在注册的时候直接用Passkey。
在https://github.com/GoogleChromeLabs/passkeys-demo代码中,最重要的是两个文件auth.mjs和client.js ,分别对应后端和前端的逻辑。
[用户输入用户名]
↓
POST /username -> 创建/查询用户 -> session.username
[用户触发注册]
↓
POST /registerRequest -> 生成注册 options (带 challenge)
↓
navigator.credentials.create({ publicKey: options })
↓
设备生物认证 -> 生成 passkey -> 返回 credential
↓
POST /registerResponse -> 验证 credential -> 存公钥
[用户触发登录]
↓
POST /signinRequest -> 生成登录 options (带 challenge)
↓
navigator.credentials.get({ publicKey: options })
↓
设备生物认证 -> 生成 assertion -> 返回 assertion
↓
POST /signinResponse -> 验证 assertion -> 登录成功
商业转载请联系站长获得授权,非商业转载请注明本文出处及文章链接,您可以自由地在任何媒体以任何形式复制和分发作品,也可以修改和创作,但是分发衍生作品时必须采用相同的许可协议。