php和node.js之间的身份验证

php和node.js之间的身份验证,php,node.js,security,socket.io,Php,Node.js,Security,Socket.io,我有一个用php编写的web应用程序,并计划在其中添加聊天功能。我决定使用node.js,因为它似乎非常适合这项工作,而php在这方面有点糟糕 在某些时候,我需要确保对socket.io服务器的请求是合法的。我需要确保请求来自php生成的页面。为了保持简单,我想出了这个主意。好的,那么客户端/服务器进程将是: 客户端打开网页,php接收请求。Php创建某种类型的散列,并通过GET联系节点http服务器。这是我想简单地curl 127.0.0.1并传递hash,但不确定在apache已经运行的情况

我有一个用php编写的web应用程序,并计划在其中添加聊天功能。我决定使用node.js,因为它似乎非常适合这项工作,而php在这方面有点糟糕

在某些时候,我需要确保对socket.io服务器的请求是合法的。我需要确保请求来自php生成的页面。为了保持简单,我想出了这个主意。好的,那么客户端/服务器进程将是:

  • 客户端打开网页,php接收请求。Php创建某种类型的散列,并通过GET联系节点http服务器。这是我想简单地curl 127.0.0.1并传递hash,但不确定在apache已经运行的情况下,这是否会很容易

  • 节点将接收该has并将其作为属性存储在对象中,以便来自客户端的后续请求可以访问该has

  • 当curl返回时,php呈现页面并将此散列传递给客户端

  • 客户端向某个端口上的节点服务器发出请求,传递此哈希值,节点调用回调。现在,节点检查散列是否是我在步骤2中描述的对象的属性之一

  • 如果散列操作系统是其中一个属性,则处理请求,否则会发生一些不可靠的事情并忽略它

  • 这是总的想法,我想知道这是否有明显的缺陷,我应该在实施之前考虑。任何建议都将不胜感激

  • 标准方案。使用redis memcached RDMS在服务器端保存令牌

    • +快速
    • +您应该在一个地方实现令牌创建机制
    • -在某些情况下,所有代币可能会丢失
  • 签名cookies技术

  • 在php端创建令牌。像

    $token = some_special_hash_not_md5_not_sha1(
                     $userID . $server_side_super_safe_salt);
    
    通过cookies令牌和用户标识发送

    在节点端检查此令牌是否有效

    • +无分贝
    • -必须在节点和php上找到生成相同签名的函数
    • -如果你想创建安全的代码,你必须对加密有很多了解
    比如说。如果
    some_special_hash_not_md5_not_sha1()


    我建议将令牌存储在db表中(可能是用户表上的令牌列),然后将令牌发送给用户。现在,当用户连接到node.js时,令牌将被发送,node.js将使用users表验证它。设置中的一个问题是,如果节点服务器重新启动或诸如此类,用户令牌将丢失。将它们连接到nodeph like