Gol*_*den 13 authentication ssl websocket node.js socket.io
我正在使用基于Node.js的https服务器,该服务器使用HTTP Basic进行身份验证(这很好,因为数据是通过SSL加密连接发送的).
现在我想提供一个应该是的Socket.io连接
问题是如何做到这一点.我已经发现我需要{ secure: true }在连接到套接字时在客户端JavaScript代码中指定,但是如何在服务器端强制只能通过SSL运行套接字连接,并且它只适用于经过身份验证的用户?
我想SSL的事情很简单,因为Socket.io服务器只绑定到https服务器,所以它应该只使用SSL运行,并且不应该在(另外)运行的http服务器上运行它, 对?
关于另一件事我对如何确保只有在用户使用HTTP Basic成功验证后才能建立套接字连接没有任何想法.
有任何想法吗?
Lin*_*iel 16
编辑:当然OP在其他答案中是正确的; 更重要的是,使用socket.io> 1.0,您可以使用socket.io-express-session.
原始答案:
Socket.io通过该io.set('authorization', callback)机制支持授权.请参阅相关文档:授权.这是一个简单的示例(使用基于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);
});
});
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
21191 次 |
| 最近记录: |