信赖方 (RP) 可以通过检查关联的公钥凭据的 AAGUID 来确定通行密钥是由哪个通行密钥提供方创建的。
通行密钥管理方面的挑战
使用通行密钥的好处之一是,用户可以为一个账号创建多个通行密钥。凭借这种灵活性以及通行密钥的可靠性,即使用户因丢失某个通行密钥而被锁定在账号之外,他们仍然可以使用其他通行密钥登录信赖方。
对于在 RP 上管理多个通行密钥的用户来说,当他们需要修改或删除特定通行密钥时,如何从众多通行密钥中找到正确的通行密钥是一项挑战。一个很好的例子是,当用户想要移除未使用的通行密钥时。建议 RP 在通行密钥列表中附加有关通行密钥的信息,例如创建日期和上次使用日期。这有助于用户找到特定的通行密钥。
RP 还可以允许用户在创建通行密钥时或稍后为其命名,但许多用户不会这样做。理想情况下,通行密钥会自动命名,以反映从客户端发送的信号或公钥凭据中包含的信息。
浏览器提供了一个用户代理字符串,信赖方可使用该字符串来命名通行密钥,但 Android、iOS 或具有扩展程序功能的桌面浏览器等平台允许第三方密码管理工具创建通行密钥,并且用户代理字符串不一定代表实际的通行密钥提供方。
借助通行密钥注册时返回的公钥凭据中包含的身份验证器证明全局唯一标识符 (AAGUID),RP 可以确定通行密钥提供方,并帮助用户找到合适的通行密钥。
通过 AAGUID 确定通行密钥提供方
AAGUID 是用于标识身份验证器型号(而非身份验证器的特定实例)的唯一编号。AAGUID 可在公钥凭据的身份验证器数据中找到。

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

为了将 AAGUID 映射到通行密钥提供方,RP 可以使用社区来源的 AAGUID 代码库。通过在列表中查找 AAGUID,可以找到通行密钥提供方名称及其图标 SVG 数据文本。
检索 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 映射到通行密钥提供方。