在注册 WebAuthn 凭据时,您对最终用户显示的模式有一定程度的控制。这将取决于您“限制用户可以使用的身份验证器类型”的确切含义。我们可以从两个角度来探讨。
身份验证器附件
我们可以看到的第一种方法是跨平台与平台身份验证器。您在上面为蓝牙和 Android 密码提供了两个很好的示例。蓝牙体验属于跨平台(以及安全密钥)的范畴。 Android 密钥将属于平台身份验证器的范畴。
您可以限制 WebAuthn 浏览器模式以显式显示跨平台或平台选项,同时排除其他选项。这意味着用户可以单击“Register Android Passkey”按钮,他们将立即被提示输入 Android 体验。反之亦然,您可以提示跨平台,并且只获得跨平台选项。请记住,模态将显示安全密钥和 BLE 的选项(这是您失去对模态上显示内容的一些控制的地方)。
您可以在注册新凭证时使用PublicKeyCreationOptions 中的身份验证器附件属性触发此操作。
这是一个例子
{
"publicKey": {
"rp": {
"name": "Example Inc",
"id": "example.com/"
},
"user": {
"name": "user",
"displayName": "user",
"id": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
},
"challenge": "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
"pubKeyCredParams": [***],
"excludeCredentials": [***],
"authenticatorSelection": {
"authenticatorAttachment": "platform",
"residentKey": "preferred",
"userVerification": "preferred"
},
"attestation": "direct",
"extensions": {}
}
}
注意authenticatorSelection 中的authenticatorAttachment 字段。对于上述体验,您的选择是跨平台和平台的。排除该属性将允许两种身份验证器类型。
您可以在 WebAuthn 规范的authenticator attachment enum section 中找到更多信息
本节的主要内容——这主要是为了帮助用户体验,而不是让用户有很多选择。
允许/拒绝列表
限制可以在您的应用程序中使用的身份验证器的另一种方法是使用注册期间凭据发送的 FIDO MDS 和 Attestation。我在 Yubico 开发者网站上有一些 guidance。
简而言之,如果您从注册仪式中获取认证声明,您可以将结果与 MDS 中的项目进行比较,以确定认证器的具体品牌/型号。如果品牌/型号不在您的“允许的验证器”列表中,那么您可以拒绝注册。
一些注意事项:
- 最好是高度宽容的,特别是如果您有一个面向消费者的应用程序。您不希望您的用户对他们无法注册的原因感到困惑
- 您提到密码 - Google 已表示可复制密码不会向您的依赖方发送证明声明,因此 MDS 不是限制密码的好选择
- 这要求用户始终选择发送证明声明。确保您有指导,以便您的用户知道在浏览器模式中出现提示时允许将证明发送到 RP
本节的主要内容 - 您可以通过品牌/型号限制身份验证器,但请确保您了解它如何影响用户体验。
希望这可以帮助。如果您有其他问题,请随时发表评论。