这是我参与更文挑战的第 9 天,活动详情查看:更文挑战
登录微软网站时,有这样一种方式:
当你选择用这种方式登录时,Windows 将打开一个新的安全窗口,并展示下图内容:
这依托于 Web Authentication API 技术。接下来让我们一起了解。
Web Authentication API(身份认证API)
简介
Web Authentication API(又称为 WebAuthn) 继承自 Credential Management API ,使用公钥密码学使得验证更强壮,不需要短信文本就能实现无密码验证和安全的双因素验证,解决了钓鱼、数据破坏、SMS 文本攻击、其它双因素验证等重大安全问题。
特点
- 使用非对称加密替代密码或短信在网站上注册、登录、双因素验证。
- 显著提高了易用性(因为用户不必管理许多越来越复杂的密码)。
API
Web Authentication API 有两个对应于注册和登录的基本方法:
navigator.credentials.create() - 注册
navigator.credentials.get() - 登录
以上两个方法需要在安全上下文使用。
安全上下文:比如说 https 连接或 localhost
实现过程
Microsoft Edge 中的 Web 身份验证 API 使 Web 应用程序能够使用 Windows Hello 和外部 FIDO2 设备进行用户身份验证,从而避免密码管理的所有问题和风险,包括密码猜测、网络钓鱼和密钥记录攻击。当前的 Microsoft Edge 实现基于 Web 身份验证规范的候选推荐。
使用 Web 身份验证,服务器向浏览器发送普通文本挑战。一旦 Microsoft Edge 能够通过 Windows Hello 或外部 FIDO2 设备验证用户,系统将使用之前为该用户准备的私钥签署挑战,并将签名发回服务器。如果服务器可以使用它为该用户使用的公钥验证签名并验证挑战是否正确,则可以安全地验证用户。在这样的不对称加密中,公钥本身毫无意义,私人密钥永远不会共享。此外,私人密钥永远无法从具有 TPM 支持硬件的安全元件或现代系统中移动。
详细介绍参考:MDN - Web_Authentication_API
浏览器兼容性
现代浏览器的支持度很好。可以考虑在项目中使用了。
示例
未完待续