我目前正在使用window.u2f
API在我的网站上实现U2F双因素身份验证。它们在Firefox中(当启用about:config标志时(以及通过带有u2f-api.js库的Chromium本机可用。
我的实现在密钥设置期间使用window.u2f.register(...)
,在登录期间使用window.u2f.sign(...)
。
我读到新的Web验证API是向后兼容的,并且也支持FIDO U2F,但是,我找不到任何关于如何实现它的信息。所有的示例似乎都只是演示FIDO2无密码登录,这不是我想要做的。
如何使用Web身份验证API实现具有等效window.u2f.register
和window.u2f.sign
函数的FIDO U2F?
好问题。在Yubico的Github账户中可以找到一些令人难以置信的U2F实现示例。更具体地说,如果您想要一个在客户端注册密钥并使用javascript对其进行身份验证的工作示例,在后端使用Flask API实现加密,则该示例位于此处。它同时支持FIDO2和传统U2F。此外,如果您想要一段某人逐步完成实现工作原理示例的视频,请访问此处。我希望这能有所帮助:(
您可以阅读本文来理解它们所说的向后兼容性的含义
需要为您突出显示的内容
CTAP1/U2F验证器返回命令错误或不正确格式化的CBOR响应。对于任何故障,平台可能会回退到CTAP1/U2F协议。
WebAuthn通过CBOR消息与验证器通信。如果验证器不支持FIDO2,验证器将返回错误代码,那么WebAuthn将通过U2F原始消息与验证器进行对话。
你可以像你读到的一样实现WebAuthn。Web身份验证API
您可以将其用于实现
@kspearrin,这是我得到的解决方案。
我有使用U2F(U2F-api.js(注册的用户。转到WebAuthn实际上很简单。所有新注册都将使用WebAuthn,所有验证都将使用带有扩展参数的WebAuthn。
U2F
Registration - window.u2f.register
Verification - window.u2f.sign
WebAuthn
Registration - navigator.credentials.create
Verification - navigator.credentials.get
U2F注册用户的兼容性:
使用navigator.certificate.get((时,请确保将extensions.appid设置为U2F appid参数。在我的例子中,我使用origins.json URL。
https://developer.mozilla.org/en-US/docs/Web/API/PublicKeyCredentialRequestOptions/extensions
最后,您需要在客户端和服务器端实现WebAuthn功能。根据您的平台,有许多可用的库。WebAuthn的响应包含ArrayBuffer格式的数据。我唯一要做的就是在客户端和服务器之间正确地传输ArrayBuffer数据。我必须将它们转换为base64,然后才能将其发布到服务器并返回。基本上,您必须调整数据格式才能使其工作。