HTTP-сервер NodeJS - Как проверить IP-адрес и логин клиента? - PullRequest
10 голосов
/ 17 июня 2011

Если я решу использовать модуль http для своего сервера, то какие модули / методы мне нужно сделать следующим образом?

  • Чтобы проверить исходный IP-адрес подключающегося клиента?
  • Если серверу требуется URL-адрес, например http://username:password@exmaple.com/method1,, как мне настроить Http-сервер NodeJS для принятия такой аутентификации и как проверить учетные данные, предоставленные клиентским подключением?

Спасибо.

Ответы [ 3 ]

19 голосов
/ 17 июня 2011

Когда клиент подключается к вашему HTTP-серверу, генерируется событие 'connection', а аргументом для обратного вызова является поток типа net.Socket, который имеет атрибут с именем 'remoteAddress'.Точно так же каждый HTTP-запрос, передаваемый вашему прослушивателю запросов, также имеет ссылку на объект подключения:

var http = require('http');
var server = http.createServer(function (req, res) {
  res.writeHead(200, {'Content-Type': 'text/plain'});
  res.end('Hello ' + req.connection.remoteAddress + '!');
  // Client address in request -----^
});
server.on('connection', function(sock) {
  console.log('Client connected from ' + sock.remoteAddress);
  // Client address at time of connection ----^
});
server.listen(9797);

Что касается аутентификации с использованием встроенных учетных данных в URL-адресе, я не думаю, что эта форма является надежной, поскольку некоторые веб-браузеры не передают информацию в запросе HTTP (по крайней мере, IE и Chrome).Вам лучше реализовать схему аутентификации, основанную на стандартах HTTP, такую ​​как Базовый аутентификатор доступа или Аутентификация доступа к дайджесту .

3 голосов
/ 30 сентября 2011

Для HTTP Basic / Digest аутентификации вы можете использовать http-auth module

// Authentication module.
var auth = require('http-auth');
var basic = auth.basic({
    realm: "Simon Area.",
    file: __dirname + "/../data/users.htpasswd" // gevorg:gpass, Sarah:testpass ...
});

// Creating new HTTP server.
http.createServer(basic, function(req, res) {
    res.end("Welcome to private area - " + req.user + "!");
}).listen(1337);
2 голосов
/ 17 июня 2011
  1. Не полагайтесь на IP-адреса.Они легко подделываются.
  2. Для базового использования используйте Connect с http://senchalabs.github.com/connect/middleware-basicAuth.html
...