我想在我的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进行身份验证吗?
答案 0 :(得分:1)
不直接。
Websockets不是HTTP,因此它们不会执行HTTP AUTH,发送cookie等操作。
对于我们的websocket连接,我们将cookie作为请求URL上的参数传递。我们正在使用socket.io,它提供了一种类似于HTTP服务器中间件的身份验证功能。
您应该可以使用Websocket-node中的#accept
方法执行类似的操作。检查进入的数据,如果未经授权,请拒绝连接。