NodeJS HTTP Server - 如何验证客户端的IP和登录?

时间:2011-06-17 16:31:48

标签: node.js http-authentication

如果我决定将http模块用于我的服务器,我需要执行以下哪些模块/方法?

  • 验证连接客户端的源IP地址?
  • 如果服务器需要像http://username:password@exmaple.com/method1这样的URL,我如何设置NodeJS的Http服务器以接受此类身份验证,以及如何验证客户端连接提供的凭据?

感谢。

3 个答案:

答案 0 :(得分:19)

当客户端连接到您的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请求中至少是some web browsers do not pass on the information可靠(至少IE和Chrome)。您最好实施基于HTTP标准的身份验证方案,例如Basic access authDigest access auth

答案 1 :(得分:3)

对于HTTP Basic / Digest身份验证,您可以使用http-auth模块

// 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 :(得分:2)

  1. 不要依赖IP。他们很容易被欺骗。
  2. 使用基本身份验证时使用http://senchalabs.github.com/connect/middleware-basicAuth.html
  3. 连接