身份验证器数据

身份验证器数据结构包含来自身份验证器关于处理凭据创建或身份验证请求的信息 - 例如依赖方 ID 哈希 (rpIdHash)、签名计数器、用户存在测试、用户验证标志以及身份验证器处理的任何扩展。此页面解释了数据结构中包含的内容。

访问身份验证器数据

身份验证器数据作为 ArrayBuffer 提供给浏览器,并且可以通过多种方式访问。两种最方便的方法是

数据结构

身份验证器数据 ArrayBuffer 的长度至少为 37 字节,并包含以下字段

rpIdHash (32 字节)

凭据作用域的 依赖方 ID 的 SHA-256 哈希值。服务器将确保此哈希值与自身的依赖方 ID 的 SHA256 哈希值匹配,以防止网络钓鱼或其他中间人攻击。

flags (1 字节)

一个位字段,指示身份验证器断言的各种属性。位如下所示,其中位 0 是最低有效位,所有未在下面特别提及的位均“保留供将来使用”

  • 位 0,用户存在 (UP):如果设置(即设置为 1),则身份验证器通过某种用户存在测试 (TUP) 验证用户是否存在,例如触摸身份验证器上的按钮。
  • 位 2,用户验证 (UV):如果设置,则身份验证器通过生物识别、PIN 或其他方法验证了实际用户。
  • 位 3,备份资格 (BE):如果设置,则身份验证器用于生成断言的公钥凭据源具有备份资格。这意味着它可以通过某种方式进行备份(例如通过云或本地网络同步),因此可能出现在其生成身份验证器以外的身份验证器上。因此,备份资格凭据源也称为多设备凭据。
  • 位 4,备份状态 (BS):如果设置,则公钥凭据源当前已备份(有关上下文,请参阅位 3)。
  • 位 6,已证明的凭据数据 (AT):如果设置,则已证明的凭据数据将紧跟此 authenticatorData 的前 37 字节。
  • 位 7,扩展数据 (ED):如果设置,则存在扩展数据。如果存在已证明的凭据数据,则扩展数据将紧跟已证明的凭据数据;如果不存在已证明的凭据数据,则将紧跟 authenticatorData 的前 37 字节。
signCount (4 字节)

签名计数器(如果身份验证器支持,否则设置为 0)。服务器可以选择使用此计数器来检测身份验证器克隆。

attestedCredentialData (可变长度)

创建的凭据。这仅在 navigator.credentials.create() 调用期间出现。这是一个字节序列,格式如下

  • AAGUID (16 字节):身份验证器证明全局唯一标识符,一个唯一数字,用于标识身份验证器的型号(而不是身份验证器的特定实例)。依赖方可以使用它通过 FIDO 元数据服务 查询其元数据声明来了解身份验证器的特征。这在某些情况下相关,例如企业部署或监管要求规定使用某种类型的身份验证器;否则应忽略它。
  • credentialIdLength (2 字节):紧跟这些字节的凭据 ID 的长度。
  • credentialId (可变长度):此凭据的唯一标识符,以便可以请求进行将来的身份验证。凭据的长度为“credentialIdLength”字节。
  • credentialPublicKey (可变长度):COSE 编码的公钥。此公钥将存储在与用户帐户关联的服务器上,并用于将来的身份验证。依赖方可以通过 AuthenticatorAttestationResponse.getPublicKey() 方法检索其 DER 编码形式,而无需解析 COSE 编码的身份验证器数据。
extensions (可变长度)

一个可选的 CBOR 映射,其中包含身份验证器处理的扩展的响应输出

扩展是可选的,不同的浏览器可能识别不同的扩展。浏览器始终可以选择处理扩展:如果浏览器不识别给定的扩展,它将忽略它。有关使用扩展的信息以及哪些浏览器支持哪些扩展,请参阅 Web 身份验证扩展

注意:身份验证器数据仅包含身份验证器处理的扩展的结果。浏览器(客户端)处理的扩展的结果可以通过 PublicKeyCredential.getClientExtensionResults 访问。

另请参阅