Web 应用程序中的无密码身份验证 - 它有多安全?

信息安全 验证 密码
2021-08-13 23:42:38

我很久以前读过这篇关于如何使用无密码身份验证系统的文章,这对我来说听起来是个好主意。我什至将它构建在一个有趣的小应用程序中以获得乐趣。

引用这篇文章,它是这样工作的:

以下是无密码身份验证更详细的工作方式:

  1. 当用户尝试登录您的应用程序或网站时,不要询问他们的密码,而只需询问他们的用户名(或电子邮件或手机号码)。

  2. 在后端服务器上创建一个临时授权码并将其存储在您的数据库中。

  3. 向用户发送带有包含代码的链接的电子邮件或短信。

  4. 用户单击打开您的应用程序或网站的链接并将授权代码发送到您的服务器。

  5. 在您的后端服务器上,验证代码是否有效并将其交换为一个长期存在的令牌,该令牌存储在您的数据库中并发送回以存储在客户端设备上。

  6. 用户现在已登录,并且不必再次重复此过程,直到他们的令牌过期或他们想要在新设备上进行身份验证。

那你们怎么看?这真的是基于密码的身份验证的现实替代方案吗?

编辑:

如前所述,如果手机被盗,可能会访问您的电子邮件和短信,这会危及该系统。但基于密码的系统也是如此,您可以在其中单击“忘记密码”链接以接收更改密码的电子邮件,并且还可以安装 Google Authenticator。因此,在我看来,手机被盗密码和无密码系统的弱点。

也许问题应该是:

无密码身份验证是否会增加基于密码的身份验证系统中不存在的风险场景?

2个回答

与往常一样,身份验证方案的选择主要取决于您需要保护的内容以及您将收到的公众类型。

评论中提到的“我忘记了密码”链接就是一个很好的例子。过去,对于某些不重要的网站,我系统地使用此类链接来打开会话:

  1. 点击“我忘记密码”链接
  2. 获取允许重置密码的电子邮件,
  3. 如果确实需要,请将密码重置为一些长的随机字符串。

通过这种方式,访问该站点的安全性取决于我邮箱的安全性。我没有要记住的密码,而且这个网站数据库中记录的密码是唯一的。

此过程似乎是您在问题中提出的过程的肮脏版本。

关于安全性,只要:

  • 身份验证源(电子邮件、电话……)没有受到损害,
  • 长期存在的令牌不会受到损害。

对于一个不重要的网站,当这样的认证方案正确实施时,它可能比允许用户使用已经在其他十几个网站上使用的一些愚蠢的密码更安全。

对于处理敏感数据的网站,用户必须有能力证明自己的身份。因此,为了进行正常的身份验证,似乎必须使用只有用户知道的秘密密码。作为密码重置程序或第二因素身份验证,电子邮件/短信的使用应保持例外。

关于可用性,最好将此类身份验证方案保留为可选,因为某些用户可能更喜欢使用密码保险箱或其他类型的密码生成器来处理他们的密码,并且无法像他们那样使用您的身份验证方案(链接提供的只是此类软件的示例)。

无密码系统和密码系统+忘记密码之间的一个区别是会话超时。许多系统作为安全措施会在 X 分钟后自动将您注销。虽然您当然可以在无密码系统中执行此操作,但对用户来说会很烦人。无密码系统的可用性通常取决于长时间运行的会话(即每隔几个月而不是每天登录一次),而基于密码的系统通常不是什么大问题。