是否可以将 HTTP 标头添加到 Socket.io 握手中?

Cla*_*dio 5 authentication session node.js socket.io

我正在尝试保护 socket.io 客户端和 node.js 端之间的通道。主 Web 应用程序在 Drupal 中,因此如果 node.js 在另一台主机上,我无法将 cookie 传递给 node.js。我想向 Socket.io HTTP 握手(如 PHP 会话)添加一些自定义标头。你知道这是否可能?使用 Socket.io 0.7

Alf*_*red 2

PS:我只是在这里集思广益。我喜欢这个问题,并且会更多地思考这个问题。我只从node.js同一域考虑过它......

Github问题

我不知道(不这么认为)是否可以添加标题。 PS:我认为您还应该尝试在https://github.com/LearnBoost/socket.io/issues上填写问题。github 的好处是,当有人发布问题时,作者会收到一封电子邮件。而且 learnboost 的人都非常友善,愿意为你提供帮助。

代理人

代理您的所有请求,以便请求来自同一域。

推荐人

引用者已被传递,因此您可以从中传递信息。这也可以被欺骗,所以你最好创建一些可以从 Drupal 验证(仅一次)的东西。我想这很容易实现......

仅在验证后才允许消息流动。

我知道你可以做的是通过断开套接字socket.disconnect()。打开连接并检索 socket.io 的 id,但仅在身份获得批准后才接受消息。我将通过 Express 提供一条路线,Drupal 可以将postsocket.io 的 id 卷曲到(保持路线私有)。因为您位于 Drupal 的域内,所以您可以访问 Drupal 的会话信息。

// v0.7.x
var sid = socket.id;
Run Code Online (Sandbox Code Playgroud)

为了确保安全,唯一的选择是使用 SSL(无论如何,这是确保任何通信链接安全的唯一方法)。如果您信任这两个域的 SSL 可能并不是真正必要的。然后,如果允许 socket.io 的 id,您将允许消息流,否则我将断开连接。

推送应用程序

另一种选择是实施/克隆 Pusherapp 身份验证 => http://pusher.com/docs/client_api_guide/client_channels#subscribe-private-channels

验证

PS:我稍后会尝试上传一个示例,但现在我该睡觉了。希望这有意义:)...