解析CBORattestationObject
后,我现在正在尝试解析authData
。
这包含:
https://w3c.github.io/webauthn/#authenticator-data
- 32 字节,
rpIdHash
- 1 字节,
flags
(包括AT
和ED
标志( - 4 字节,
signCount
- ? 字节,
attestedCredentialData
- ? 字节,
extensions
假设AT
标志为 true,则attestedCredentialData
从字节 37 开始,并包含:
https://w3c.github.io/webauthn/#sctn-attested-credential-data
- 16 字节,
aaguid
- 2 字节,
credentialIdLength
(字节 53 - 55,在许多实现中可见( - credentialIdLength bytes,
credentialId
- ? 字节,
credentialPublicKey
这意味着我可以获取credentialIdLength
,并提取credentialId
。
但是credentialPublicKey
有多长?
我可以读到authData
结尾;这就是他们在 https://webauthn.guide/上显示的内容:
const publicKeyBytes = authData.slice(55 + credentialIdLength);
但是,如果您回顾 authData,它可能会在此之后包含extensions
数据(如果ED
标志为 true(。
我发现证明概述图像对于其中大部分非常有用:
https://w3c.github.io/webauthn/#sctn-attestation
这个问题已经被提出并回答了: WebAuthn - "凭据公钥"的字节长度
简而言之:你无法知道长度。无论如何,解析它的一种方法是从 1(然后是 2、3,... 开始解析多个字节字节(,直到 CBOR 解析成功。