了解 WebAuthn 凭据保护策略

2026-05-24 1 阅读 mooreds
了解 WebAuthn 凭据保护策略 本文假设您已经熟悉 WebAuthn 的基础知识。创建 WebAuthn 凭据时,您可以使用 residentKey 选项指定它是否可发现。 const credential = wait navigator.credentials.create({ publicKey: {authenticatorSelection: { residentKey: "required", // ... }, // ... }, });但是,依赖方无法控制何时或如何发现凭证。您可能希望仅在用户验证后才能发现它,并对窥探用户隐藏帐户的存在。这对于安全密钥尤其重要,与通常需要初始身份验证的设备或密码管理器不同,仅物理拥有通常足以泄露注册凭据。为了解决这个问题,CTAP 2.1 规范定义了一个新的凭据保护扩展,可通过 credentialProtectionPolicy 扩展输入使用。 CTAP 是定义平台(设备/浏览器)和漫游验证器(安全密钥)如何交互的规范。 const credential = wait navigator.credentials.create({ publicKey: { extensions: { credentialProtectionPolicy: "userVerificationRequired", enforceCredentialProtectionPolicy: true, }, // ... }, });如果使用默认值 userVerificationOptional,则无需用户验证即可发现并使用凭证。如果使用 userVerificationOptionalWithCredentialIDList,则在没有用户验证的情况下无法发现凭证,但如果凭证 ID 由依赖方提供,则在没有用户验证的情况下仍然可以发现和使用凭证。这与不可发现的凭证的安全性相匹配。最后,userVerificationRequired 指示在没有用户验证的情况下无法发现或使用凭证。需要强调的是,该扩展控制身份验证器内的凭证发现。如果需要,依赖方仍需验证该断言是否通过用户验证进行。相关的enforceCredentialProtectionPolicy扩展输入配置如果身份验证器不支持凭据保护策略应该发生的情况。如果设置为 true ,如果无法创建指定安全级别的凭据,操作将失败。请注意,如果您使用不支持 credentialProtectionPolicy 但浏览器支持的非漫游身份验证器,则请求将被拒绝。因此,只有当您想要允许漫游身份验证器时,才应将其设置为 true。至于浏览器对扩展输入的支持,Chrome 和 Firefox 支持它们,而 Safari 不支持,并且只会忽略它们。如果依赖方未指定默认值,浏览器也可以静默应用默认值,Chrome 中尤其如此。如果 residentKey 是首选或必需的,Chrome 会使用 userVerificationOptionalWithCredentialIDList 。如前所述,这有助于防止具有身份验证器物理访问权限的人查看在其上注册的帐户。如果需要 residentKey 并且首选 userVerification ,Chrome 将改用 userVerificationRequired 。令人困惑的是,这与凭证发现无关,而是作为强制用户验证的安全措施。 Chrome 假定凭证可能被用作单个身份验证步骤,因为首选甚至常用于密钥身份验证。但是,由于用户验证仍然是可选的,并且由依赖方来检查,因此如果服务器在身份验证过程中未正确强制执行用户验证,则某人可能会以只能物理访问身份验证器的用户身份登录。具体行为记录在 Chromium 文档中。