我正在尝试保护我的 socket.io 客户端和 node.js 端之间的 channel 。主要的 Web 应用程序在 Drupal 中,所以如果 node.js 在另一台主机上,我无法将 cookie 传递给 node.js。我想向他的 Socket.io HTTP 握手(如 PHP session )添加一些自定义 header 。 你知道这是否可能吗? 使用 Socket.io 0.7
最佳答案
P.S:我只是在这里集思广益。我喜欢这个问题,并且会对此进行更多思考。我只是从 node.js 的相同域中考虑过它......
Github 问题
我不知道(不这么认为)是否可以添加标题。 P.S:我认为您还应该尝试在 https://github.com/LearnBoost/socket.io/issues 处填写问题. github 的好处是,当有人发布问题时,作者会收到一封电子邮件。 learnboost 的人也非常友善,愿意为您提供帮助。
代理
代理您的所有请求,以便请求来自同一域。
推荐人
refererer 已传递,因此您可以从中传递信息。这也可以被欺骗,因此您最好创建一些可以从 Drupal 验证(仅一次)的东西。我想这很容易实现...
仅在验证后允许消息流。
我知道您可以通过 socket.disconnect()
断开套接字。打开连接并检索 socket.io 的 ID,但仅在身份被批准后才接受消息。我会通过 express 提供一条路线,Drupal 可以将 post
socket.io 的 id curl 到(保持路线私有(private))。因为您在 Drupal 的域内,所以您可以访问 Drupal 的 session 信息。
// v0.7.x
var sid = socket.id;
要确保此安全,唯一的选择是使用 SSL(无论如何,这是确保任何通信链接安全的唯一方法)。如果您信任这两个域的 SSL 可能并不是真正必要的。然后,如果允许使用 socket.io 的 ID,您将允许消息流动,否则我将断开连接。
推送应用
另一种选择是实现/克隆 pusherapp 身份验证 => http://pusher.com/docs/client_api_guide/client_channels#subscribe-private-channels
P.S:稍后我会尝试上传示例,但现在是我 sleep 的时间了。希望这有意义 :)...
关于session - 是否可以将 HTTP header 添加到 Socket.io 握手中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6563905/