gpt4 book ai didi

google-chrome - 如何使用 FIDO U2F 允许用户通过我的网站进行身份验证?

转载 作者:行者123 更新时间:2023-12-03 08:17:40 26 4
gpt4 key购买 nike

随着最近围绕 FIDO U2F 规范的所有讨论,我想在测试平台上实现 FIDO U2F 测试,为即将推出的最终规范做好准备。

到目前为止,我有一个 Yubico 生产的 FIDO U2F 安全 key 和安装在 Chrome 中的 FIDO U2F(通用 2nd Factor)扩展。我还设法设置了安全 key 以使用我的 Google 登录。

现在,我不确定如何将这些东西用于我自己的网站。我浏览了 Google 的 Github 页面以了解 U2F 项目,并查看了他们的 web app front-end .它看起来非常简单(仅限 JavaScript)。
那么使用 FIDO 实现第二因素身份验证就像实现几个 JavaScript 调用一样简单吗?示例中的注册似乎发生的所有事情都是这样的:

      var registerRequest = {
appId: enrollData.appId,
challenge: enrollData.challenge,
version: enrollData.version
};

u2f.register([registerRequest], [], function (result) {
if (result.errorCode) {
document.getElementById('status')
.innerHTML = "Failed. Error code: " + result.errorCode;
return;
}
document.location = "/enrollFinish"
+ "?browserData=" + result.clientData
+ "&enrollData=" + result.registrationData
+ "&challenge=" + enrollData.challenge
+ "&sessionId=" + enrollData.sessionId;
});

但是我如何自己使用它来实现呢?我可以使用此方法调用的回调进行用户注册吗?

最佳答案

您要做的是实现所谓的“依赖方”,这意味着您的 Web 服务将依赖 FIDO U2F token 提供的身份断言。

您需要了解 U2F specifications要做到这一点。尤其是挑战-响应范式是如何实现的,以及应用程序 id 和 facet 是如何工作的。这在规范中有详细描述。

你是对的:从应用程序的前端使用 FIDO U2F 所需的实际代码几乎是微不足道的(也就是说,如果你使用“高级”JavaScript API 而不是“低级”MessagePort API) .但是,您的应用程序将需要使用 token 生成的消息并对其进行验证。这不是微不足道的。

为了说明如何实现依赖方站点,我将给出一些代码示例,取自 Virtual FIDO U2F Token Extension我最近出于学术原因编写的程序。您可以查看完整示例代码的页面。

在您的用户可以使用他们的 FIDO U2F token 进行身份验证之前,他们需要 注册 和你一起。
为了让他们这样做,您需要调用 window.u2f.register在他们的浏览器中。为此,您需要提供一些参数(同样;请阅读规范了解详细信息)。
其中一个挑战和你的应用程序的 id。对于 Web 应用,此 id 必须是触发 FIDO 操作的网页的 Web 来源。假设它是 example.org :

window.u2f.register([
{
version : "U2F_V2",
challenge : "YXJlIHlvdSBib3JlZD8gOy0p",
appId : "http://example.org",
sessionId : "26"
}
], [], function (data) {

});

一旦用户执行“用户存在测试”(例如通过触摸 token ),您将收到一个响应,这是一个 JSON 对象(有关详细信息,请参阅规范)

dictionary RegisterResponse {
DOMString registrationData;
DOMString clientData;
};

此数据包含您的应用程序需要使用的几个元素。

Register Map of a FIDO U2F Registration Response Message
  • 生成的 key 对的公钥——您需要存储它以备将来验证使用。
  • 生成的 key 对的 key 句柄——您还需要存储它以备将来使用。
  • 证书 -- 您需要检查您是否信任此证书和 CA。
  • 签名——您需要检查签名是否有效(即确认与证书一起存储的 key )以及签名的数据是否是预期的数据。

  • 我准备了 rough implementation draft用于 Java 中的依赖方服务器,该服务器显示了最近如何提取和验证此信息。

    一旦注册完成并且您以某种方式存储了生成 key 的详细信息,您可以 签到要求。

    正如您所说,这可以通过高级 JavaScript API 简短而甜蜜地启动:

    window.u2f.sign([{
    version : "U2F_V2",
    challenge : "c3RpbGwgYm9yZWQ/IQ",
    app_id : "http://example.org",
    sessionId : "42",
    keyHandle: "ZHVtbXlfa2V5X2hhbmRsZQ"
    }], function (data) {

    });

    在这里,您需要提供您在注册时获得的 key 句柄。
    再一次,在用户执行“用户存在测试”(例如通过触摸 token )之后,您将收到一个响应,它是一个 JSON 对象(再次,请参阅规范以获取更多详细信息)

    dictionary SignResponse {
    DOMString keyHandle;
    DOMString signatureData;
    DOMString clientData;
    };

    您需要验证此处包含的签名数据。

    Register Map of a FIDO U2F Authentication Response Message
  • 您需要确保签名与您之前获得的公钥匹配。
  • 您还需要验证签名的字符串是否合适。

  • 执行这些验证后,您可以认为用户已通过身份验证。我的 server example 中也包含了一个简短的服务器端代码实现示例。 .

    关于google-chrome - 如何使用 FIDO U2F 允许用户通过我的网站进行身份验证?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26637660/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com