2012-11-06 35 views
6

Vì vậy, tôi hiện đang chạy node.js, đã cài đặt ldapjs. Mục tiêu của tôi là có một hệ thống sử dụng ldapjs để cho phép người dùng đăng nhập bằng tên người dùng và mật khẩu.xác thực ldapjs (thiết lập đăng nhập của người dùng)

Tôi đã đọc qua tài liệu http://ldapjs.org một lúc nhưng tôi đang cố gắng hiểu toàn bộ ý tưởng về việc triển khai ldap và ldapjs của nó.

Tôi hiện có này từ tài liệu

var ldap = require('ldapjs'); 

var server = ldap.createServer(); 

server.bind('cn=root', function(req, res, next) { 
    if (req.dn.toString() !== 'cn=root' || req.credentials !== 'secret') 
    return next(new ldap.InvalidCredentialsError()); 

    res.end(); 
    return next(); 
}); 

server.listen(1389, function() { 
    console.log('LDAP server up at: %s', server.url); 
}); 

nào cho phép tôi để chạy dưới đây và thành công liên kết với máy chủ.

ldapsearch -H ldap://localhost:1389 -x -D cn=root -w secret -LLL -b "o=myhost" objectclass=* 

Nhưng tôi thực sự chắc chắn về nơi để đi từ đây hoặc thậm chí nếu điều này là cách tiếp cận đúng ...

Các thiết lập lý tưởng sẽ có một loạt các người dùng và mật khẩu, và trên một kết nối ldap thành công xác nhận các chi tiết là chính xác và trả lời đúng hoặc sai nếu tên người dùng/mật khẩu không chính xác.

Có ai biết về bất kỳ tài nguyên tốt nào để tìm hiểu thêm về điều này hay không nhưng có thể đề xuất một số mã phía máy khách/máy chủ cơ bản để cho tôi ý tưởng đi đâu tiếp theo!

Mọi thư trả lời sẽ thực sự được đánh giá cao.

Nhiều Cảm ơn

Trả lời

17

tôi không bao giờ sử dụng ldapjs, nhưng dựa trên những gì tôi chỉ nhanh chóng đọc trong tài liệu dường như không đầy đủ của nó, nó có thể được sử dụng để thực hiện một máy chủ LDAP hoặc một ứng dụng LDAP, mà dường như là những gì bạn' đang cố gắng thực hiện (ví dụ: tôi giả sử bạn muốn xác thực người dùng trong ứng dụng của mình dựa trên máy chủ LDAP hiện tại). Hầu hết các ví dụ trong tài liệu của nó tập trung vào việc tạo ra một máy chủ LDAP lắng nghe trên một cổng nhất định và tương tác với một cơ sở dữ liệu phía sau. Nếu bạn không cố gắng đặt giao diện dựa trên LDAP giữa cơ sở dữ liệu phía sau của bạn hoặc lưu trữ người dùng và mật khẩu, thì có thể bạn không cần API máy chủ. Nếu bạn đã có máy chủ LDAP đang chạy, thì bạn sẽ cần phải sử dụng API ứng dụng khách của nó để thực hiện một việc như sau:

1. Kết nối ẩn danh với máy chủ LDAP cung cấp dịch vụ thư mục bao gồm dịch vụ xác thực. Dường như bạn chỉ có thể làm điều này với:

var ldap = require('ldapjs'); 
var client = ldap.createClient({ 
    url: 'ldap://my.ldap.server' 
}); 

2.Search bởi tên người dùng (ví dụ như địa chỉ, e-mail) cho DN các mục tương ứng của

var opts = { 
    filter: '(mail=USERNAME)', 
    scope: 'sub' 
}; 

client.search('ou=users,o=acme.com', opts, function(err, res) { 
    assert.ifError(err); 

    res.on('searchEntry', function(entry) { 
    console.log('entry: ' + JSON.stringify(entry.object)); 
    }); 
    res.on('searchReference', function(referral) { 
    console.log('referral: ' + referral.uris.join()); 
    }); 
    res.on('error', function(err) { 
    console.error('error: ' + err.message); 
    }); 
    res.on('end', function(result) { 
    console.log('status: ' + result.status); 
    }); 
}); 

3.Grab DN của mục trả lại (entry.object). Tài liệu của thư viện này không nói nhiều về cách các đối tượng này có thể được sử dụng (ví dụ: phương thức, thuộc tính, v.v. của chúng). Vì vậy, bạn sẽ phải tìm ra cách để thực sự nhận được DN hoặc chuỗi đại diện của DN của mục bạn vừa truy xuất từ ​​máy chủ thư mục.

4.Rebind đến máy chủ sử dụng mà DN:

client.bind(DN_RETRIEVED, PASSWORD_USER_ENTERED, function(err) { 
    assert.ifError(err); 
}); 

5.The kết quả của sự ràng buộc trên là những gì bạn sẽ cần phải sử dụng để xác định có hay không xác thực đã thành công.

Nếu bạn đang cố gắng triển khai máy chủ LDAP trước kho lưu trữ dữ liệu người dùng/mật khẩu để xác thực dựa trên LDAP, thì bạn sẽ cần phải làm theo các ví dụ máy chủ của họ. Cá nhân tôi nghĩ rằng đây là quá mức cần thiết và có thể có vấn đề về an ninh.

+4

DN được lưu trữ bên trong entry.object. Để truy cập nó gọi đối tượng là 'entry.object.dn' (A' console.log (entry.object.dn) 'có thể hữu ích khi thấy rằng đó là trường đúng). Sau đó, entry.object.dn này chuyển nó tới client.bind 'client.bind (entry.object.dn, mật khẩu, hàm (err) {...' –

Các vấn đề liên quan