2014-09-12 305 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