session - 是否可以将 HTTP header 添加到 Socket.io 握手中?

标签 session authentication node.js socket.io

我正在尝试保护我的 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

authentication

P.S:稍后我会尝试上传示例,但现在是我 sleep 的时间了。希望这有意义 :)...

关于session - 是否可以将 HTTP header 添加到 Socket.io 握手中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6563905/

相关文章:

javascript - ASP.net MVC session 超时持续时间

Chrome 上未设置 Django-Rest-Framework sessionid 和 csrftoken

rest - 带有身份验证的 REST API 中的 CSRF token

node.js - Typescript Node 表示路由器和第二个参数。 Typescript-eslint/no-misused-promises

node.js - 从 node.js 发送数组并使用客户端

java - Spring 4和Hibernate 4 Session错误

php - session 超时后 laravel csrf token 不匹配异常

authentication - 将RequestFilter数据添加到Context(请求范围),在服务中检索

python - 使用 serviceusage API 和服务帐户启用 API

node.js - 你如何使用 node-irc 登录?