我尝试创建一个基本的webauthn实现,使用"Web身份验证api";使用用户的生物识别。
有一件事我不明白,我没有在网上找到答案,那就是:为什么我得到一个格式设置为'包装的证明'默认为而不是'fido-u2f"?我做错了什么?
这是"挑战"。当用户要求注册时,我返回给他:
{
challenge: randomBase64URLBuffer(32),
rp: {
name: "Fido"
},
user: {
id: id,
name: username,
displayName: displayName
},
attestation: 'direct',
pubKeyCredParams: [
{ type: "public-key", alg: -7 },
{ type: "public-key", alg: -257 }
]
}
然后在格式化响应客户端后,我将其作为publicKey传递给navigator.credentials.create({ publicKey })
。
一旦它被发送回api确认注册,我解码它与cbor.decodeAllSync(myAttestationBuffer)
,但我得到的是一个凭据响应与fmt
设置为packed
。
我是这个问题的初学者,所以请随时纠正我:)是否有办法指定我想要的证明格式?我可能错过了什么…
谢谢你的帮助!
认证格式由您的浏览器和验证器支持的格式决定-您不能请求特定的格式。
在撰写本文时,Firefox 101.0.1在与我的fido2兼容的Yubikey一起使用时返回fido-u2f
认证,因为它使用较旧的U2F协议进行通信。Firefox使用https://github.com/mozilla/authenticator-rs来实现这个功能。相同的密钥返回Chrome 102.0.5005.115较新的packed
证明格式。