2014-09-12 3 views
2

내 nodejs websocket 응용 프로그램에 http 기본 인증을 구현하고 싶습니다. 여기에 코드를 내 조각이다 :nodejs websocket 및 http basic auth

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에서 http를 통해 인증 할 수 있습니까?

답변

2

직접적으로.

WebSocket을하지 HTTP입니다 그래서 그들은 등, 우리가 요청 URL에 매개 변수로 쿠키를 전달 우리의 웹 소켓 연결의

을, HTTP AUTH 등의 작업을 수행 쿠키를 전송하지 않습니다. 그러나 우리는 HTTP 서버의 미들웨어와 유사한 인증 기능을 설정하는 조항이있는 socket.io를 사용하고 있습니다.

Websocket-node의 #accept 메서드와 비슷한 기능을 수행 할 수 있어야합니다. 들어오는 데이터를 검사하고 권한이없는 경우 연결을 거부하십시오.

+0

감사합니다. 그러나 RFC https://tools.ietf.org/html/rfc6455#page-53에 따르면 http 서버가 websocket 프로토콜로 업그레이드하기 전에 http 인증을 수행 할 수 있어야합니다. –

+0

먼저 HTTP를 통해 업그레이드를 협상하고 있습니까? – tkone

+0

예, 확신합니다. 따라서 httpServer도 WebSocketServer 객체에 전달됩니다. –