Webauthn - 如何使用 React + Node.js 验证/验证返回的注册身份验证数据

问题描述 投票:0回答:1

尝试按照官方 Webauthn 指南在 React/Node 应用程序中实现基本的 Webauthn 流程。我对 navigator.credentials.create() 的调用正在运行,并且我成功为给定用户生成了 PublicKeyCredential 对象;但是我不是身份验证专家,我不确定下一步该做什么以及应该如何“验证”返回的身份验证数据?

注册 API 成功后,我会返回 clientDataJSONattestationObject (以及其他数据)。我能够验证客户端数据中的

challenge
与初始请求中的原始挑战是否匹配。除此之外,我的解码证明对象如下所示:

{
  fmt: 'none',
  attStmt: {},
  authData: <Buffer 49 96 0d e5 88 0e 8c 68 74 34 17 0f 64 76 60 5b 8f e4 ae b9 a2 86 32 c7 99 5c f3 ba 83 1d 97 63 5d 00 00 00 00 fb fc 30 07 15 4e 4e cc 8c 0b 6e 02 05 ... 102 more bytes>
}

然后,指南展示了如何解析返回的身份验证数据,果然我可以解析公钥字节并获取对象,例如:

{
    1: 2,
    3: -7,
    -1: 1,
    -2: Uint8Array(32) ...
    -3: Uint8Array(32) ...
}

但是,现在我该怎么办?该指南说“如果验证过程成功,服务器会将 publicKeyBytes 和 credentialId 存储在数据库中......

如果验证过程成功”是什么意思,我是否需要使用公钥签署某些内容以验证其有效或进行其他加密检查? (抱歉,我是亲戚n00b)

reactjs node.js authentication public-key-encryption webauthn
1个回答
0
投票

https://webauthn.guide 是一个很棒的网站,但既然您已经做到了这一点,我的建议是阅读 WebAuthn 规范。这里详细介绍了 RP 应如何处理注册和身份验证响应:

https://w3c.github.io/webauthn/#sctn-registering-a-new-credential

在您的情况下,您正在执行第12步,它会内省

authData
中的各种标志。在第 21 步,您将开始根据
attStmt
的值评估
fmt
的值。在您的示例中,
fmt
的值是
"none"
,因此不会有很多事情要做。假设在后续步骤中证明验证“成功完成”,您就可以开始了。

...我需要使用公钥签署某些内容以验证其有效或进行其他加密检查吗??

有趣的事实:返回

"none"
证明时不存在签名,因此在这种特定情况下,您在注册期间不会使用公钥进行任何操作!

© www.soinside.com 2019 - 2024. All rights reserved.