安全流畅的通行密钥:部署核对清单

通行密钥旨在彻底改变登录体验,提供一种更简单、更快速、更安全的登录方式,可替代密码。此核对清单将引导您了解实现通行密钥的关键方面,以实现最佳用户体验 (UX) 成效。

如何使用此核对清单

此核对清单适用于在身份验证流程中实现通行密钥的开发者和产品团队。它可用于:

  • 验证您的实现是否遵循以下文章中所述的新型通行密钥用户体验最佳实践。
  • 确定有助于提升易用性、安全性和兼容性的必需元素和可选元素。
  • 在开发期间和部署前检查您的实现。
  • 遵循支持用户采用和系统互操作性的最佳实践。

这些功能有助于您为最终用户提供顺畅、安全的体验。

通行密钥注册

若要在您的网站上从密码平稳过渡到通行密钥,拥有完善的通行密钥注册功能至关重要。按照创建通行密钥以实现无密码登录中的说明,在您的网站上构建通行密钥注册功能。除了基本通行密钥注册功能之外,您还应检查以下事项:

✅ 将 "platform" 指定为身份验证器附件值,以便传递给 navigator.credentials.create() 以创建提升后的通行密钥。

  • 为以响应方式创建通行密钥的用户提供优化且顺畅的通行密钥创建流程。

✅ 在允许用户创建通行密钥之前,请先使用可用的最强身份验证方法对用户进行验证。

  • 这对于防止攻击者在被盗用的账号上创建通行密钥至关重要。

✅ 使用 excludeCredentials 防止为同一通行密钥提供程序创建重复的通行密钥。

  • 许多通行密钥提供程序仅支持为每个账号和 RP ID 创建一个通行密钥。避免创建重复内容。

使用 AAGUID 标识通行密钥提供程序并为用户命名凭据。

  • 将通行密钥与其通行密钥提供程序相关联是一种直观的方式,可在可能的情况下显示凭据。

✅ 如果尝试注册通行密钥失败,则使用 PublicKeyCredential.signalUnknownCredential() 发出信号。

  • 多余的通行密钥可能会造成混淆。告知通行密钥提供程序服务器是否未能注册通行密钥。

✅ 为用户的账号创建并注册通行密钥后,向用户发送通知

  • 请务必让用户知道系统正在创建通行密钥,尤其是在由其他人创建通行密钥时。

通行密钥身份验证

同时兼顾密码用户和通行密钥用户,并尽可能减少摩擦,这可能是一个挑战。按照通过表单自动填充功能实现通行密钥登录中的说明,在您的网站上构建通行密钥表单自动填充功能。除了基本通行密钥身份验证功能之外,您还应检查以下事项:

✅ 允许用户通过表单自动填充功能使用通行密钥登录

  • 如果您的网站正在从密码过渡到通行密钥,那么为了同时适应这两类用户,最好的方法是使用浏览器的表单自动填充功能。

✅ 使用 PublicKeyCredential.signalUnknownCredential() 在后端上未找到通行密钥的匹配凭据时发出信号。

  • 多余的通行密钥可能会造成混淆。告知通行密钥提供方哪个通行密钥无法使用,以便提供方将其删除。

✅ 如果用户在登录后尚未创建通行密钥,请提示用户手动创建通行密钥。

  • 如果用户尚未创建通行密钥,请鼓励他们创建一个。

✅ 在用户使用密码(和第二种因素)登录后,自动创建通行密钥(有条件创建)

  • 加快用户采用通行密钥的速度。

如果用户使用跨设备通行密钥登录,则提示创建本地通行密钥。

  • 创建本地通行密钥有助于用户在下次登录时无需扫描二维码。

✅ 在用户登录后,向提供方发送可用通行密钥的列表以及更新后的用户详细信息(用户名、显示名称)

  • 让服务器和通行密钥提供程序之间的通行密钥列表和用户详细信息保持同步,有助于改善用户体验。

通行密钥管理

让用户充分了解通行密钥有助于他们更好地了解相关情况并控制通行密钥。按照帮助用户有效管理通行密钥中所述的说明,在您的网站上构建通行密钥管理功能。您应检查以下事项:

✅ 允许用户在通行密钥管理页面中管理通行密钥。

  • 创建一个集中位置,供用户管理通行密钥。

✅ 支持注册多个通行密钥

  • 能够注册多个通行密钥有助于用户防止自己被锁定,而无需回退到安全性较低的身份验证方法。

✅ 允许用户在管理页面上添加灵活的新通行密钥类型

✅ 显示通行密钥名称

  • 根据 AAGUID 为通行密钥命名,并以直观的方式显示用户的通行密钥。

✅ 指明通行密钥是可同步还是不可同步

  • 当通行密钥未同步时,告知用户。

✅ 允许用户从服务器移除公钥

✅ 从服务器中移除关联的公钥时,向通行密钥列表发送信号。

  • 让服务器和通行密钥提供程序之间的通行密钥列表保持同步有助于改善用户体验。
显示最佳实践的通行密钥管理页面示例。
显示良好做法的通行密钥管理页面示例。

其他注意事项

✅ 在用户更新用户详细信息时,发出更新后的用户详细信息(用户名、显示名称)信号

当用户“忘记密码”时,创建通行密钥,而不是新密码

资源