从单独的设备节点无密码登录

时间:2015-12-08 11:35:52

标签: node.js cookies passwords

我使用nodejs无密码(https://passwordless.net/)库进行无密码登录。其中一项功能是在电子邮件中发送的链接,用于在浏览器中打开登录页面。效果很好。 我想要做的是,如果点击链接,在一台设备上,用户输入他们的电子邮件的页面在另一台设备上打开,那么该页面也会使用一些cookie或其他东西登录。

这样做的原因是为无密码登录的概念增加了更多便利 - 通过点击手机上的链接,您无需转到计算机浏览器中的另一个标签页。

人们对尽可能无缝地进行无密码登录有任何其他想法吗?

2 个答案:

答案 0 :(得分:0)

你要求的东西是不可能的,因为它会引发问题"认证旨在回答。即,"此客户端应用程序是否代表使用此服务注册的用户运行?"

让我们一起来看看:

设备1

  1. 用户第一次访问您的网站。
  2. 该服务会在您的网站(或应用)上设置一个包含新的唯一会话ID的Cookie。
  3. 用户以表格形式提交电子邮件。
  4. 用户会收到一封带有网址+令牌的电子邮件,标记为“无密码”。
  5. 用户点击了网址。
  6. 该服务再次通过无密码验证令牌,并将设备1的会话标记为已验证
  7. 此工作流程(特别是步骤3-5)的效果是让您推断出重要的信息:联系本网站的任何人都可以控制所提供的电子邮件地址。现在让我们看看另一台设备。

    设备2

    1. 有些用户第一次访问您的网站。
    2. 该服务会在您的网站上设置一个包含新的唯一会话ID的Cookie。
    3. 所以我们有一个带有cookie的设备,但现在是什么?从字面上看,世界上任何人都可以在您的网站上指向网络浏览器或应用。我们需要更多信息。所以我们可以要求提供一个电子邮件地址:

      1. 用户以表格形式提交电子邮件。
      2. 现在我们收到了来自Device 2的电子邮件。但我们不知道这是否合法地是控制此电子邮件地址的用户。它可能很容易成为攻击者,有人在你的服务之后,在这个用户之后,或者可能只是一个带有一些机器人的垃圾邮件发送者。

        直到我们在原始工作流程中进入第6步,我们才能获得足够的信息,以了解该设备是否与设备1上的同一用户一起使用。但是,一旦我们离开了用户刚刚登录设备2!在那时,没有必要自动将它们记录下来"来自设备1,因为他们只是在设备2上验证了自己。

答案 1 :(得分:0)

我认为这可能是可能的。

我没有熟食配方,但探索的方向可能是:

  • 您需要在设置令牌存储之前设置允许重用令牌。这可以通过allowTokenReuse:true完成。

  • 以某种方式确保前两个或更多设备获得相同的会话。这可以通过共享会话来完成。

    • 更可靠的建议是使用套接字来跟踪连接的客户端。您可以查看帖子here

    • 我发现了一篇很棒的文章来分享和同步socket.io和express之间的会话。查看here

请与您分享您的探索。我正在考虑使用套接字。

相关问题