nodejs websocket和http basic auth

时间:2014-09-12 10:53:25

标签: node.js http websocket http-basic-authentication

我想在我的nodejs websocket应用程序中实现http基本身份验证。这是我的代码:

var http = require('http');
var auth = require('http-auth');
var express = require('express');

var app = express();

//....

basic = auth.basic({
    realm: "websocket auth",
    file: __dirname + "/users.htpasswd"
});

var server = http.createServer(basic);
app.listen = function() {
    return server.listen.apply(server, arguments);
};

// WEBSOCKET
var WebSocketServer = require('websocket').server;
var wss = new WebSocketServer({
    httpServer: server
});

wss.on('request', function(request) {
    var connection = request.accept();

    connection.sendUTF('Server: message ws auth');
});

对于标准的http访问身份验证,它工作正常,但我无法在websocket上工作,当我通过websocket连接时,我立即得到响应。甚至可以通过websocket上的http进行身份验证吗?

1 个答案:

答案 0 :(得分:1)

不直接。

Websockets不是HTTP,因此它们不会执行HTTP AUTH,发送cookie等操作。

对于我们的websocket连接,我们将cookie作为请求URL上的参数传递。我们正在使用socket.io,它提供了一种类似于HTTP服务器中间件的身份验证功能。

您应该可以使用Websocket-node中的#accept方法执行类似的操作。检查进入的数据,如果未经授权,请拒绝连接。