Node.js WebSocket和HTTP基本认证

4

我想在我的Node.js 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后我立即收到响应。是否可能通过HTTP在websocket上进行身份验证?

1个回答

1

不是直接的。

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

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

您应该能够使用Websocket-node的#accept方法做类似的事情。检查传入的数据,如果未经授权,则拒绝连接。


谢谢,但根据RFC https://tools.ietf.org/html/rfc6455#page-53,看起来我应该能够在HTTP服务器升级到WebSocket协议之前进行HTTP身份验证。 - Peter Krejci
你确定你是首先通过HTTP协议进行升级谈判吗? - tkone
是的,我确定,因此httpServer也会传递给WebSocketServer对象。 - Peter Krejci

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接