Node.js 从单独的设备进行节点无密码登录

Node.js 从单独的设备进行节点无密码登录,node.js,cookies,passwords,Node.js,Cookies,Passwords,我正在使用nodejspasswordless()库进行无密码登录。其中一个功能是电子邮件中发送的链接,可在浏览器中打开登录页面。效果很好。 我想做的是,如果在一台设备上点击链接,并且用户输入电子邮件的页面在另一台设备上打开,那么该页面也会使用cookie或其他东西登录 这样做的原因是为了给无密码登录的概念增加更多的便利——通过点击手机上的链接,你不必转到电脑浏览器中的其他选项卡 对于让无密码登录尽可能无缝,人们还有其他想法吗?你所要求的是不可能的,因为它“回避了身份验证要回答的问题”。即,“此

我正在使用nodejspasswordless()库进行无密码登录。其中一个功能是电子邮件中发送的链接,可在浏览器中打开登录页面。效果很好。 我想做的是,如果在一台设备上点击链接,并且用户输入电子邮件的页面在另一台设备上打开,那么该页面也会使用cookie或其他东西登录

这样做的原因是为了给无密码登录的概念增加更多的便利——通过点击手机上的链接,你不必转到电脑浏览器中的其他选项卡


对于让无密码登录尽可能无缝,人们还有其他想法吗?

你所要求的是不可能的,因为它“回避了身份验证要回答的问题”。即,“此客户端应用程序是否代表注册到此服务的用户运行?”

让我们来看看:

设备1

  • 用户首次访问您的网站
  • 该服务使用您网站(或应用程序)上新的唯一会话的id设置cookie
  • 用户以表单形式提交其电子邮件
  • 用户收到带有URL+令牌的电子邮件,令牌由Passwordless提供
  • 用户单击URL
  • 服务再次通过无密码验证令牌,并将设备1的会话标记为已验证
  • 此工作流(特别是步骤3-5)的作用是让您推断出一条重要信息:与此网站联系的任何人都可以控制提供的电子邮件地址。现在让我们看看另一个设备

    设备2

  • 有些用户第一次访问您的网站
  • 该服务在您的网站上设置具有新的唯一会话id的cookie
  • 我们有一个设备,有一个cookie,但是现在呢?实际上,世界上任何人都可以将一个web浏览器或应用程序指向您的站点。我们需要更多的信息。因此,我们可以要求提供电子邮件地址:

  • 用户以表单形式提交其电子邮件
  • 现在我们有一封来自设备2的电子邮件。但我们不知道这是否是合法的用户谁控制这个电子邮件地址。它可能很容易成为攻击者、服务后的某个人、该用户,或者可能只是一些机器人的垃圾邮件发送者


    直到我们进入原始工作流程中的步骤6,我们才有足够的信息来了解此设备是否由与设备1相同的用户使用。但一旦我们做到了这一点,用户就刚刚登录到设备2!此时,不需要从设备1“自动登录”,因为他们只是在设备2上对自己进行身份验证。

    您所要求的是不可能的,因为它“回避了身份验证旨在回答的问题”。即,“此客户端应用程序是否代表注册到此服务的用户运行?”

    让我们来看看:

    设备1

  • 用户首次访问您的网站
  • 该服务使用您网站(或应用程序)上新的唯一会话的id设置cookie
  • 用户以表单形式提交其电子邮件
  • 用户收到带有URL+令牌的电子邮件,令牌由Passwordless提供
  • 用户单击URL
  • 服务再次通过无密码验证令牌,并将设备1的会话标记为已验证
  • 此工作流(特别是步骤3-5)的作用是让您推断出一条重要信息:与此网站联系的任何人都可以控制提供的电子邮件地址。现在让我们看看另一个设备

    设备2

  • 有些用户第一次访问您的网站
  • 该服务在您的网站上设置具有新的唯一会话id的cookie
  • 我们有一个设备,有一个cookie,但是现在呢?实际上,世界上任何人都可以将一个web浏览器或应用程序指向您的站点。我们需要更多的信息。因此,我们可以要求提供电子邮件地址:

  • 用户以表单形式提交其电子邮件
  • 现在我们有一封来自设备2的电子邮件。但我们不知道这是否是合法的用户谁控制这个电子邮件地址。它可能很容易成为攻击者、服务后的某个人、该用户,或者可能只是一些机器人的垃圾邮件发送者


    直到我们进入原始工作流程中的步骤6,我们才有足够的信息来了解此设备是否由与设备1相同的用户使用。但一旦我们做到了这一点,用户就刚刚登录到设备2!此时,不需要从设备1“自动登录”,因为他们只是在设备2上进行身份验证。

    我认为这是可能的

    我没有现成的食谱,但您的探索方向可能是:

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

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

      • 更可靠的建议是使用套接字跟踪连接的客户端。你可能想看看邮局

      • 我发现了一篇很棒的文章,可以在socket.io和express之间共享和同步会话。检查


    请尽可能分享你的探索。我也在考虑使用套接字。

    我认为这是可能的

    我没有现成的食谱,但您的探索方向可能是:

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

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

      • 更可靠的建议是使用套接字跟踪连接的客户端。您可能需要查看采购订单