4

我目前正在使用window.u2fAPI 在我的网站上实现 U2F 两因素身份验证。这些在 Firefox(启用 about:config 标志时)和通过带有u2f-api.js库的 Chromium 原生可用。

我的实现window.u2f.register(...)在密钥设置和window.u2f.sign(...)登录期间使用。

我已经读到新的Web 身份验证 API是向后兼容的,并且也支持 FIDO U2F,但是,我找不到任何有关如何实现它的信息。所有示例似乎只演示了 FIDO2 无密码登录,这不是我想要做的。

如何使用 Web 身份验证 API 实现具有等效功能的window.u2f.registerFIDO U2F?window.u2f.sign

4

3 回答 3

1

您可以阅读本文以了解向后兼容性的含义

为您强调的事情

CTAP1/U2F 身份验证器返回命令错误或格式不正确的 CBOR 响应。对于任何故障,平台可能会退回到 CTAP1/U2F 协议。

WebAuthn 通过 CBOR 消息与验证器通信。如果验证器不支持 FIDO2,验证器将返回错误代码,然后 WebAuthn 将通过 U2F 原始消息与验证器对话。

你可以像你读过的那样实现 WebAuthn。网页认证 API

您可以参考this for your implementation

于 2019-05-27T12:19:42.457 回答
0

@kspearrin,这是我得到的解决方案。

我有使用 U2F (u2f-api.js) 注册的用户。转移到 WebAuthn 实际上很简单。所有新注册都将使用 WebAuthn,所有验证都将使用带有扩展参数的 WebAuthn。

U2F

Registration - window.u2f.register
Verification - window.u2f.sign

网络认证

Registration - navigator.credentials.create
Verification - navigator.credentials.get

U2F 注册用户的兼容性

使用 navigator.credentials.get() 时,请确保将 extensions.appid 设置为 U2F appId 参数。在我的例子中,我使用 origins.json URL。

https://developer.mozilla.org/en-US/docs/Web/API/PublicKeyCredentialRequestOptions/extensions

最后,您需要在客户端和服务器端实现 WebAuthn 功能。根据您的平台,有许多可用的库。WebAuthn 的响应包含 ArrayBuffer 格式的数据。我唯一需要弄清楚的是在客户端和服务器之间正确传输 ArrayBuffer 数据。在将它们发布到服务器并返回之前,我必须将它们转换为 base64。基本上,您必须修改数据格式才能使其正常工作。

于 2020-05-27T10:10:13.213 回答
0

好问题。可以从Yubico 的 Github 帐户中找到一些令人难以置信的 U2F 实施示例。更具体地说,如果您想要一个在客户端使用 javascript 注册密钥并对其进行身份验证的工作示例,使用 Flask API 在后端实现加密,该示例位于此处。它同时支持 FIDO2 和旧版 U2F。此外,如果您想要一段视频,让某人逐步了解实施方式的示例,请点击此处。我希望这有帮助 :)

于 2018-12-27T23:41:44.597 回答