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

基本流程

passkey.png

整个流程只有公钥在网络中传输,私钥则保存在客户端本地(例如TPM),并在使用时要求使用面容或指纹解锁,极大地提高了安全性。

Demo

https://passkeys-demo.appspot.com/

细节

首次注册还是使用了账号密码,证明我是我。不过我觉得这个其实也可以在注册的时候直接用Passkey。

https://github.com/GoogleChromeLabs/passkeys-demo代码中,最重要的是两个文件auth.mjsclient.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 -> 登录成功

商业转载请联系站长获得授权,非商业转载请注明本文出处及文章链接,您可以自由地在任何媒体以任何形式复制和分发作品,也可以修改和创作,但是分发衍生作品时必须采用相同的许可协议。

本文采用CC BY-NC-SA 4.0 - 非商业性使用 - 相同方式共享 4.0 国际进行许可。