WebAuthn,也就是Web Authentication的简称。通过这一新出炉的一组API,可以在网页使用用户的硬件设备进行公钥认证,例如指纹或者其他硬件秘钥设备(如Yubikey)。
这个东西今年三月份才进入标准,Chrome67+才支持,确实很新,几乎没有中文资料可以参考,于是这两天闲来无事给Eventing加了个利用WebAuthn登录的功能。
使用的后端语言是PHP(Laravel)。强烈推荐webauthn-framework这个库,文档很详细,只要注意一些问题。
文档很详细,里面写到 Public Key Credential Source Repository 这个东西需要自己实现,然而虽然给了 Interface 却没有给出每个方法具体要实现什么功能。
实际上这个东西就相当于把公钥内容持久化的一个东西,推荐参考
https://github.com/asbiin/laravel-webauthn/blob/e26999da8d3b18ecc96bcd7d331f91a94e8d0575/src/Services/Webauthn/CredentialRepository.php
这里的实现,你就秒懂了。
前端方面,如果想使用WebAuthn,首先有几个要求
- 必须是HTTPS连接
- 不能使用IP作为Host(Chrome不行,Firefox可以,按照标准应该是不允许的)
此外,Chrome的报错很弱智,在Console只会打印一个DOMException,要么手动捕获error打印error.message,要么换FireFox,错误信息会友好很多。
非技术的路过。