使用 AAGUID 确定通行密钥提供程序

依赖方 (RP) 可以通过检查关联公钥凭据的 AAGUID,确定通行密钥由哪个通行密钥提供方创建。

通行密钥管理方面的挑战

使用通行密钥的好处之一是,它们可让用户为一个账号创建多个通行密钥。有了这种灵活性和通行密钥的稳健性,即使用户因丢失某个通行密钥而无法访问账号,他们仍然可以使用备用通行密钥登录信赖方。

对于在 RP 上管理多个通行密钥的用户来说,一大挑战是,当需要修改或删除特定的通行密钥时,如何确定正确的通行密钥。一个很好的例子就是,用户想要移除未使用的通行密钥。建议 RP 在通行密钥列表中附加有关通行密钥的信息,例如创建日期和上次使用日期。这有助于用户找到特定的通行密钥。

RP 还可以允许用户在创建通行密钥后立即为通行密钥命名,但许多用户并不会这样做。理想情况下,通行密钥的命名会自动反映客户端发送的信号或公钥凭据中包含的信息。

浏览器会提供一个用户代理字符串,以供各方用来为通行密钥命名,但具有扩展功能的平台(例如 Android、iOS 或桌面浏览器)允许通过第三方密码管理器创建通行密钥,并且用户代理字符串不一定能代表实际的通行密钥提供程序。

借助身份验证器认证全局唯一标识符 (AAGUID)(包含在通行密钥注册时返回的公钥凭据中),RP 可以确定通行密钥提供程序,并使用它来让用户轻松找到正确的通行密钥。

使用 AAGUID 确定通行密钥提供程序

AAGUID 是用于标识身份验证器模型(而不是身份验证器的特定实例)的唯一编号。AAGUID 是公钥凭据的身份验证器数据的一部分。

<ph type="x-smartling-placeholder">
</ph> 说明所包含的身份验证器数据(包含经认证的凭据数据)和认证语句的证明对象布局。 <ph type="x-smartling-placeholder">
</ph> AAGUID 可以在身份验证器数据中找到。

RP 可以使用 AAGUID 来识别通行密钥提供程序。例如,如果用户使用 Google 密码管理工具在 Android 设备上创建通行密钥,RP 会收到 AAGUID "ea9b8d66-4d01-1d21-3ce4-b6b48cb575d4"。RP 可以为通行密钥列表中的通行密钥添加注释,以表明它是通过 Google 密码管理工具创建的。

<ph type="x-smartling-placeholder">
</ph> 安全设置页面中的通行密钥设置会显示有关每个通行密钥的详细信息。 <ph type="x-smartling-placeholder">
</ph> 通行密钥管理界面示例。

如需将 AAGUID 映射到通行密钥提供程序,RP 可以使用 AAGUID 的社区源代码库。通过在列表中查找 AAGUID,可以找到通行密钥提供程序名称及其图标 svg 数据文本。

<ph type="x-smartling-placeholder">

检索 AAGUID 是大多数 WebAuthn 库提供的功能。以下示例显示了使用 SimpleWebAuthn 的服务器端注册代码:

// Import a list of AAGUIDs from a JSON file
import aaguids from './aaguids.json' with { type: 'json' };

...

 // Use SimpleWebAuthn handy function to verify the registration request.
const { verified, registrationInfo } = await verifyRegistrationResponse({
  response: credential,
  expectedChallenge,
  expectedOrigin,
  expectedRPID,
  requireUserVerification: false,
});

...

const { aaguid } = registrationInfo;
const provider_name = aaguids[aaguid]?.name || 'Unknown';

总结

AAGUID 是一个唯一字符串,用于标识创建通行密钥的通行密钥提供程序。RP 可以使用 AAGUID 来让用户更轻松地管理其通行密钥。可以使用社区源代码的 AAGUID 仓库将 AAGUID 映射到通行密钥提供程序。