2012-11-06 2 views
6

그래서 현재 ldapjs가 설치된 node.js를 실행하고 있습니다. 나의 목표는 ldapjs를 사용하여 사용자가 사용자 이름과 암호로 로그인 할 수있게하는 시스템을 갖추는 것입니다.ldapjs 인증 (사용자 로그인 설정)

나는 잠시 동안 http://ldapjs.org 문서를 읽고 있었지만, ldap 및 ldapjs의 구현에 대한 전체적인 생각을 이해하려고 애를 쓰고 있습니다.

나는 현재 내가 아래 실행하고 서버에 성공적으로 결합 할 수있는 문서

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

에서이 있습니다.

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

는하지만 당장하거나 올바른 접근 방식은 경우에도 ...

이상적인 설정은 사용자와 암호의 범위를 가지고, 그리고에서와 어디 정말 확실 해요 성공적인 LDAP 연결은 세부 사항이 올바른지 확인하고 true 또는 false로 사용자 이름/패스가 틀린 경우 응답합니다.

누구든지 이것에 대해 더 많은 것을 알기위한 좋은 자료를 알고 있거나, 나에게 다음 기본 정보를 제공 할 수있는 기본적인 클라이언트/서버 측 코드를 제안 할 수 있습니다!

모든 답변은 정말 감사하겠습니다.

많은 감사

답변

17

난 그냥 빨리 겉으로는 불완전한 문서에 무엇을 읽고,이 LDAP 서버 또는 것 같다 LDAP 클라이언트를 구현하는 데 사용할 수 있습니다에 내가 ldapjs를 사용하지 않지만 기반 결코 무엇을 ' (즉, 기존 LDAP 서버에 대해 응용 프로그램의 사용자를 인증하려고한다고 가정합니다.) 이 문서의 대부분의 예제는 특정 포트에서 수신 대기하고 백엔드 데이터베이스와 상호 작용하는 LDAP 서버를 만드는 데 중점을 둡니다. 백엔드 데이터베이스 또는 사용자 및 암호 저장소간에 LDAP 기반 인터페이스를 지정하지 않으려면 서버 API가 필요하지 않을 것입니다. LDAP 서버가 이미 실행 중이면 클라이언트 API를 사용하여 다음과 같은 작업을 수행해야합니다.

1. 인증 서비스를 비롯한 디렉토리 서비스를 제공하는 LDAP 서버에 익명으로 연결합니다. 해당 항목의 DN

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에 대한 사용자 이름 (예를 들어, 전자 메일 주소)에 의해

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

2.Search : 당신은 그냥이 할 수있는 것 같습니다 반환 된 항목 (entry.object). 이 라이브러리의 문서에서는 이러한 객체를 사용하는 방법 (예 : 메소드, 속성 등)에 대해 많이 설명하지 않습니다. 따라서 방금 디렉토리 서버에서 검색 한 항목의 DN에 대한 DN 또는 문자열 표현을 실제로 얻는 방법을 알아야합니다. DN 것을 사용하여 서버에

4.Rebind : 위의 바인딩의

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

5. 결과는 인증이 성공 여부를 결정하는 데 사용해야합니다 것입니다.

LDAP 기반 인증을 위해 사용자/암호 데이터 저장소 앞에 LDAP 서버를 구현하려는 경우 해당 서버 예제를 따라야합니다. 개인적으로 이것은 과잉이라고 생각하며 보안 측면에서 문제가 될 수 있습니다.

+4

DN은 entry.object 내에 저장됩니다. 이 객체를 호출하려면 객체를'entry.object.dn'라고 부르십시오 ('console.log (entry.object.dn)'이 올바른 필드인지 확인하는 데 도움이 될 수 있습니다). 다음이 entry.object.dn은 client.bind에 넘겨 준다. 'client.bind (entry.object.dn, password, function (err) {...' –

관련 문제