2011-06-17 15 views
9

Si decido usar el módulo http para mi servidor, ¿qué módulo/método (s) debo hacer lo siguiente?Servidor HTTP NodeJS - ¿Cómo verificar la IP del cliente y el inicio de sesión?

  • Para verificar la dirección IP de origen del cliente que se conecta?
  • Si el servidor requiere la URL como http://username:[email protected]/method1, ¿cómo configuro el servidor Http de NodeJS para aceptar dicha autenticación y cómo verifico las credenciales proporcionadas desde la conexión del cliente?

Gracias.

Respuesta

17

Cuando un cliente se conecta al servidor HTTP del 'connection' evento se emite y el argumento proporcionado a la devolución de llamada es una corriente de tipo net.Socket que tiene un atributo llamado ' remoteAddress '. Del mismo modo, cada solicitud HTTP pasado a su solicitud oyente también tiene una referencia al objeto de conexión:

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); 

En cuanto a la autenticación a través de credenciales incrustadas en la URL, no creo que esta forma es fiable como some web browsers do not pass on the information en el HTTP solicitud (IE y Chrome al menos). Es mejor implementar un esquema de autenticación basado en estándares HTTP como Basic access auth o Digest access auth.

3

Para la autenticación básica HTTP/Digesto puede utilizar http-auth módulo

// 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); 
Cuestiones relacionadas