将多个公钥与webauthn用户关联

问题描述

我正在将webauthn用作概念证明。

我希望我的用户能够使用几个不同的“平台”身份验证器登录。例如,台式计算机上的Windows Hello和iPhone上的Face ID。每个身份验证器都有自己的公钥,它将发送给我将存储在数据库中的RP。

当需要用户登录调用navigator.credentials.get())时,我怎么知道服务器(RP)上要使用什么公钥?还是我应该全部尝试?

根据https://www.w3.org/TR/webauthn/#usecase-new-device-registration,单个用户拥有多个设备似乎是受支持的方案,所以我猜想有某种官方或最佳实践的方法可以实现此目的。

因此,如果用户有多个与之关联的公钥,那么在验证登录/断言签名时如何知道要使用哪个公钥?

解决方法

当用户需要登录(调用navigator.credentials.get())时,我如何在服务器(RP)上知道要使用什么公钥?还是我应该全部尝试?

您做对了,应该同时尝试所有方法。这就是allowCredentials是列表的原因,您可以包括多个ID。响应将告诉您选择了哪一个。

,

在authData结构中,有一个“经验证的凭证数据”字段。嵌套在该字段中的是“凭证ID”字段。您应该将其与从相同结构解析的公钥一起保存。

Attestation Object (图复制自https://www.w3.org/TR/webauthn/#attestation-object

稍后,登录时,您将从id中获得一个rawId字段(和navigator.credentials.get())。此ID将与之前的“凭据ID”相匹配,因此可用于查找要使用的正确公钥。