【问题标题】:Limit accepted cross-platform authenticators WebAuthn API限制接受的跨平台身份验证器 WebAuthn API
【发布时间】:2022-07-19 00:28:44
【问题描述】:

我目前正在为 WebAuthentication 创建 POC,并且正在研究可以将跨平台身份验证器用作 2FA 方法的场景。所以本质上是:用户在网站上登录他们的帐户,然后继续注册一个身份验证器以供以后使用。

我想知道是否有某种方法可以限制用户可以使用的身份验证器类型?例如,如果我只希望他们能够通过 BLT(蓝牙)进行身份验证?或者如果我只希望他们能够使用 Android 密码?如果有办法,有人可以指出我在规范中的文档(可能会错过它)或其他地方,或者在这里解释一下吗?

我们可能想要这样做的原因是为最终用户简化事情,这样他们就不会得到一堆与他们无关的选项。这将帮助很多不太懂技术的用户实际使用它,因为这个过程会更简单,我们可能会更好地一步一步地引导他们。此外,安全性可能希望禁止某些类型的跨平台身份验证器。

注意:我们现在只关注注册,而不是身份验证。

如果某些事情听起来可疑或没有意义,请告诉我,我会尽力澄清。

【问题讨论】:

    标签: frontend webauthn fido fido-u2f


    【解决方案1】:

    在注册 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

    本节的主要内容 - 您可以通过品牌/型号限制身份验证器,但请确保您了解它如何影响用户体验。

    希望这可以帮助。如果您有其他问题,请随时发表评论。

    【讨论】:

    • 谢谢,这很有帮助。现在我知道我没有误读规范中的某些内容。 :)
    猜你喜欢
    • 1970-01-01
    • 2012-04-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-02
    • 2019-12-23
    • 1970-01-01
    • 2022-12-20
    相关资源
    最近更新 更多