2011-06-17 44 views
9

Nếu tôi quyết định sử dụng mô-đun http cho máy chủ của mình, mô-đun/phương pháp nào tôi cần phải làm như sau?Máy chủ HTTP NodeJS - Cách xác minh địa chỉ IP và thông tin đăng nhập của khách hàng?

  • Để xác minh địa chỉ IP nguồn của ứng dụng khách kết nối?
  • Nếu máy chủ yêu cầu URL như http://username:[email protected]/method1, làm cách nào để tôi thiết lập máy chủ Http của NodeJS để chấp nhận xác thực như vậy và làm cách nào để xác minh thông tin xác thực được cung cấp từ kết nối của máy khách?

Cảm ơn.

Trả lời

17

Khi client kết nối đến máy chủ HTTP của bạn 'connection' Sự kiện này được phát ra và đối số cung cấp cho gọi lại là một dòng của loại net.Socket trong đó có một thuộc tính gọi là ' remoteAddress '. Tương tự, mỗi yêu cầu HTTP thông qua yêu cầu của người nghe của bạn cũng có một tham chiếu đến đối tượng kết nối:

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

Như để xác thực thông qua chứng chỉ nhúng trong URL, tôi không nghĩ rằng hình thức này là đáng tin cậy như some web browsers do not pass on the information trong HTTP yêu cầu (ít nhất là IE và Chrome). Bạn nên triển khai thực hiện chương trình xác thực dựa trên tiêu chuẩn HTTP như Basic access auth hoặc Digest access auth.

3

Đối với HTTP Basic/chứng thực Digest bạn có thể sử dụng mô-đun 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); 
Các vấn đề liên quan