UX 设计师正在对我们的身份验证流程进行更新,理想情况下用密钥替换无密码电子邮件登录作为主要身份验证方法。
目前,我们的产品不区分signup(注册)和login(身份验证)。我相信这个理想。
深入研究密钥文档,似乎引用方必须对
navigator.credentials.create
(注册)或 navigator.credentials.get
(身份验证)进行 API 调用,才能通过用户的浏览器或操作系统启动密钥提示。
我是否正确地假设这意味着任何使用密钥作为主要身份验证方法的应用程序都必须分叉其用户体验以适应注册(注册)和登录(身份验证)的离散用户流程?
换句话说:有没有办法在不首先知道相关用户是新用户还是现有用户的情况下启动密钥身份验证流程?
我尝试了各种公开可用的密钥演示,所有这些:
navigator.credentials.get
并且不存在本地密码,则假设用户在他们希望使用的不同设备上拥有密码我相信更优雅的解决方案是允许对 API 进行通用凭据调用,浏览器/操作系统为用户提供以下选项:
您的用户名字段应使用密码自动填充 UI,它可以使用现有密码进行登录。
如果用户没有密码,他们可能会输入他们的用户名/电子邮件地址,为此您可能会检查后端以查看用户是否存在。如果不存在用户,您可以使用输入的用户名作为
user.name
来调用 WebAuthn 创建调用(并且您需要在后端作为查找的一部分或在前端生成 user.id
)。
组合流程是不可能的,因为创建调用将缺少必需的参数,例如
user.name
和 user.id
。