node.js – 保护Socket.io

我正在使用基于Node.js的https服务器,该服务器使用HTTP Basic进行身份验证(这很好,因为数据是通过SSL加密连接发送的).

现在我想提供一个应该是的Socket.io连接

>加密和
>仅限经过身份验证的用户.

问题是如何做到这一点.我已经发现在连接到套接字时我需要在客户端JavaScript代码中指定{secure:true},但是如何在服务器端强制只能通过SSL运行套接字连接,并且它只能工作对于经过身份验证的用

我想SSL的事情很简单,因为Socket.io服务器只绑定到https服务器,因此它应该只使用SSL运行,并且不应该在(另外)运行的http服务器上运行它,对?

关于另一件事我对如何确保只有在用户使用HTTP Basic成功验证后才能建立套接字连接没有任何想法.

有任何想法吗?

解决方法

编辑:当然OP在其他答案中是正确的;更重要的是,使用socket.io> 1.0,您可能会使用 socket.io-express-session.

原始答案:

Socket.io通过io.set(‘authorization’,callback)机制支持授权.请参阅相关文档:Authorizing.这是一个简单的示例(使用基于cookie的会话和连接/快速会话存储进行身份验证 – 如果您需要其他内容,则只需实现另一个’授权’处理程序):

var utils = require('connect').utils;

// Set up a session store of some kind
var sessionId = 'some id';
var sessionStore = new MemoryStore();
// Make express app use the session store
app.use(express.session({store: sessionStore,key: sessionId});

io.configure(function () {
    io.set('authorization',function (handshakeData,callback) {
        var cookie = utils.parseCookie(handshakeData.headers.cookie);

        if(!(sessionId in cookie)) {
            return callback(null,false);
        }

        sessionStore.get(cookie[sessionId],function (err,session) {
            if(err) {
                return callback(err);
            }

            if(!('user' in session)) {
                return callback(null,false);
            }

            // This is an authenticated user!
            // Store the session on handshakeData,it will be available in connection handler
            handshakeData.session = session;

            callback(null,true);
        });
    });
});

相关文章

这篇文章主要介绍“基于nodejs的ssh2怎么实现自动化部署”的...
本文小编为大家详细介绍“nodejs怎么实现目录不存在自动创建...
这篇“如何把nodejs数据传到前端”文章的知识点大部分人都不...
本文小编为大家详细介绍“nodejs如何实现定时删除文件”,内...
这篇文章主要讲解了“nodejs安装模块卡住不动怎么解决”,文...
今天小编给大家分享一下如何检测nodejs有没有安装成功的相关...