密钥依赖方服务器实施问题

问题描述 投票:0回答:1

我读了很多关于移动设备和自己的依赖方服务器之间的密钥实现的文章,但仍然有一些悬而未决的问题:

  1. 当客户端在注册期间请求挑战时,我们从服务器发送一个 json,其中包含下面的用户子模型。文档说ID有16个字节就足够了(所有示例都使用16个字节的随机字符串),这是UUID的大小,所以问题:我们是否可以使用UUID,它可以作为与其他不相关实体的外键吗?验证本身但作为用户 ID?

{ “rp”:{...}, “用户”:{ "id": "NWRjZTkzZjAtNmY2NC00MDdlLTllMjYtNDU4N2EwNGQzNTNj", “姓名”:“[email protected]”, “显示名称”:“[email protected]” }, 挑战: ”...”, pubKeyCredParams:[...] }

  1. 也没有找到任何有关name和displayName的信息,是否有可能更改\稍后更新它们?

  2. 服务器在注册过程中创建挑战后,是否不清楚我们要保存到数据库中的内容?看来我们应该保存用户实体和挑战字符串,但不保存挑战模型的其余部分 (json)。

  3. 当我们在注册期间请求挑战时(我将使用电子邮件作为用户),我们是否需要检查用户是否已经存在(我的猜测是 - 不,只是想仔细检查。因为我们不应该暴露给此信息发错人了)?

  4. 由于移动设备是可信来源,我们是否应该使用基本身份验证来请求挑战以及我们还有哪些其他选项?

  5. 似乎无法在 Android 上测试 Passkey,例如在本地完成。您是否需要部署一些依赖方服务器而不是“本地主机”?

registration fido-u2f passkey
1个回答
0
投票
  1. 我们可以使用 UUID [...] 作为用户 ID 吗?

基本上,用户 ID(也称为“用户句柄”)可能会在未经 USB 安全密钥进行用户验证的情况下暴露。这是一种匿名化的隐私措施(请参阅https://github.com/w3c/webauthn/issues/1763

  1. 也没有找到任何有关name和displayName的信息,是否有可能更改\稍后更新它们?

如果您使用相同的用户 ID 重新创建凭证,则应将其覆盖。这可用于更新名称/显示名称。

  1. 服务器在注册过程中创建挑战后,是否不清楚我们要保留到数据库中的内容?看来我们应该保存用户实体和挑战字符串,但不保存挑战模型的其余部分 (json)。

我发现这个问题不清楚。这可能会带来一些启发:https://passwordless.id/protocols/webauthn/2_registration

  1. 当我们在注册期间请求挑战时(我将使用电子邮件作为用户),我们是否需要检查用户是否已经存在(我的猜测是 - 不,只是想仔细检查。因为我们不应该暴露给此信息有误)?

我再次发现这个问题不清楚。由您决定是否允许每个用户注册多个设备/凭据,还是仅注册一个设备/凭据,并依靠平台的同步功能来避免因设备丢失而导致的任何锁定。

  1. 由于移动设备是可信来源,我们是否应该使用基本身份验证来请求挑战以及我们还有哪些其他选项?

挑战是随机数,以避免重放攻击。每次用户注册/登录时,情况总是不同的。它不是“受保护资源”。

  1. 似乎无法在 Android 上测试 Passkey,例如在本地完成。您是否需要部署一些依赖方服务器而不是“本地主机”?

不知道。

© www.soinside.com 2019 - 2024. All rights reserved.