在 publicKeyCredentialCreationOptions 中传递用户对象的值(对于 webauthn)
Value in passing the user object in publicKeyCredentialCreationOptions (for webauthn)
通过 webauthn 注册后,我们会收到一个用于与该用户关联的凭据 ID(以及其他信息,例如后端的 public 密钥等)。在登录期间,我们创建 publicKeyCredentialRequestOptions,我们将其传递给 navigator.credentials.get,我们传递凭据 ID。
我的问题是,当我们调用 navigator.credentials.create 时,在 publicKeyCredentialCreationOptions(包含 id、name、displayName)中传递 'user' 键有什么价值?我(认为)用户信息可能作为断言响应的一部分返回(在 userHandle 字段中),但不确定该添加的值如何(因为我们可能已经在后端拥有该信息)。
首先可以通过browser/OSUI来呈现信息。例如。在 Windows 10 上,显示的对话框显示“设置您的安全密钥以作为 {username} 登录 {hostname}”
然而,真正的价值是在您请求常驻密钥时(通过 authenticatorSelection.requireResidentKey
)。这意味着帐户信息(与来源相关)存储在身份验证器本身上。这允许无用户名登录,因为身份验证器本身具有给定站点的帐户信息。然后通过 browser/OS UI 处理帐户选择,服务器不必透露有关用户的任何信息。要实现这一点,您所要做的就是保留 allowCredentials
未定义。
通过 webauthn 注册后,我们会收到一个用于与该用户关联的凭据 ID(以及其他信息,例如后端的 public 密钥等)。在登录期间,我们创建 publicKeyCredentialRequestOptions,我们将其传递给 navigator.credentials.get,我们传递凭据 ID。
我的问题是,当我们调用 navigator.credentials.create 时,在 publicKeyCredentialCreationOptions(包含 id、name、displayName)中传递 'user' 键有什么价值?我(认为)用户信息可能作为断言响应的一部分返回(在 userHandle 字段中),但不确定该添加的值如何(因为我们可能已经在后端拥有该信息)。
首先可以通过browser/OSUI来呈现信息。例如。在 Windows 10 上,显示的对话框显示“设置您的安全密钥以作为 {username} 登录 {hostname}”
然而,真正的价值是在您请求常驻密钥时(通过 authenticatorSelection.requireResidentKey
)。这意味着帐户信息(与来源相关)存储在身份验证器本身上。这允许无用户名登录,因为身份验证器本身具有给定站点的帐户信息。然后通过 browser/OS UI 处理帐户选择,服务器不必透露有关用户的任何信息。要实现这一点,您所要做的就是保留 allowCredentials
未定义。