如何使用Webauthn API实现FIDO U2F?

时间:2018-12-05 20:41:44

标签: fido-u2f webauthn

我目前正在使用window.u2f API来对我的网站实施U2F两因素身份验证。这些在Firefox(启用about:config标志时)和带有u2f-api.js库的Chromium中是本地可用的。

我的实现在密钥设置过程中使用window.u2f.register(...),在登录过程中使用window.u2f.sign(...)

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

如何使用Web身份验证API使用等效的window.u2f.registerwindow.u2f.sign函数实现FIDO U2F?

3 个答案:

答案 0 :(得分:0)

很好的问题。在Yubico's Github Account中可以找到一些U2F实现的令人难以置信的示例。更具体地说,如果您想要一个在客户端使用javascript注册密钥并进行身份验证的可行示例,请使用Flask API在后端实现加密,例如is located here。它同时支持FIDO2和旧版U2F。此外,如果您想观看某人的视频,逐步了解实施工作原理的示例,that is located here.希望对您有所帮助:)

答案 1 :(得分:0)

您可以阅读this来了解它们对向后兼容性的含义

要突出显示的内容

  

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

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

您可以按照已阅读的内容实施WebAuthn。 Web Authentication API

您可以参考this来实现

答案 2 :(得分:0)

@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.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,然后再将其发布到服务器并返回。基本上,您必须调整数据格式才能使其正常工作。