2014-09-12 300 views
2

我想在我的nodejs websocket应用中实现http basic认证。这里是我的一段代码: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进行身份验证?

回答

2

不是直接。

的WebSockets不是HTTP这样他们就不会做这样的事情HTTP AUTH,送饼干等

因为我们在cookie作为请求URL的参数传递我们的WebSocket连接。然而,我们使用socket.io,它提供了一种设置类似于HTTP服务器中间件的认证功能类型。

您应该可以通过Websocket节点上的#accept方法做类似的事情。检查进入的数据,如果没有授权,则拒绝连接。

+0

感谢,但根据RFC https://tools.ietf.org/html/rfc6455#page-53它看起来像我应该能够在http服务器升级到websocket协议之前做http身份验证。 – 2014-09-12 11:38:33

+0

你确定你正在通过HTTP协商升级吗? – tkone 2014-09-12 13:48:38

+0

是的,我确定,因此httpServer也传递给WebSocketServer对象。 – 2014-09-16 11:04:55