2012-11-06 21 views
6

W tej chwili używam programu node.js, który ma zainstalowany program ldapjs. Moim celem jest posiadanie systemu, który używa ldapjs, aby umożliwić użytkownikom logowanie przy użyciu nazwy użytkownika i hasła.Uwierzytelnianie ldapjs (konfiguracja logowania użytkownika)

Od pewnego czasu czytam dokumentację http://ldapjs.org, ale staram się zrozumieć całą koncepcję jej wdrożenia przez ldap i ldapjs.

Obecnie mam to z dokumentacji

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

który pozwala mi uruchomić poniżej i skutecznie wiążą się z serwerem.

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

Ale jestem naprawdę pewny gdzie iść stąd, a nawet jeśli jest to właściwe podejście ...

Idealna konfiguracja byłoby mieć szereg użytkowników i haseł, a na udane połączenie ldap potwierdza, że ​​dane są poprawne i odpowiadają wartością true, lub false, jeśli nazwa użytkownika/podanie było nieprawidłowe.

Czy ktoś zna jakieś dobre zasoby, aby dowiedzieć się więcej na ten temat, lub jeszcze lepiej może zasugerować jakiś podstawowy kod klienta/serwera, aby dać mi pojęcie, gdzie iść dalej!

Wszelkie odpowiedzi będą naprawdę mile widziane.

Wiele Dzięki

Odpowiedz

17

nigdy używane ldapjs, ale na podstawie tego, co właśnie szybko czytać w jego pozornie niekompletnych dokumentów, może on być stosowany do wdrożenia serwer LDAP lub klienta LDAP, który wydaje się być to, czego” próbuję to zrobić (tzn. zakładam, że chcesz uwierzytelnić użytkowników w swojej aplikacji na istniejącym serwerze LDAP). Większość przykładów w tym dokumencie koncentruje się na tworzeniu serwera LDAP, który nasłuchuje na określonym porcie i współdziała z bazą danych zaplecza. Jeśli nie próbujesz umieścić interfejsu LDAP między twoją wewnętrzną bazą danych lub sklepem użytkowników i haseł, prawdopodobnie nie potrzebujesz interfejsu API serwera. Jeśli masz już uruchomiony serwer LDAP, musisz użyć jego interfejsu API klienta, aby wykonać coś takiego:

1. Zalogować anonimowo na serwer LDAP, który udostępnia usługi katalogowe, w tym usługi uwierzytelniania. Wygląda jak można po prostu zrobić to z:

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

2.Search przez użytkownika (na przykład adres e-mail) do odpowiedniego wpisu za 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 z zwrócony wpis (entry.object). Dokumentacja tej biblioteki nie mówi zbyt wiele o tym, jak można używać tych obiektów (np. Jakie są ich metody, właściwości itp.). Tak więc, będziesz musiał dowiedzieć się, jak faktycznie uzyskać DN lub ciąg znaków reprezentujący nazwę DN wpisu, który właśnie pobrano z serwera katalogów.

4.Rebind do serwera przy użyciu tego DN:

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

5. Wynik wiążą powyżej jest to, co będzie trzeba użyć, aby określić, czy autoryzacja przebiegła pomyślnie.

Jeśli próbujesz zaimplementować serwer LDAP przed składnicą danych użytkownika/hasła do uwierzytelniania opartego na protokole LDAP, będziesz musiał postępować zgodnie z przykładami ich serwerów. Osobiście uważam, że jest to przesada i może być problematyczna z punktu widzenia bezpieczeństwa.

+4

DN jest przechowywany wewnątrz entry.object. Aby uzyskać do niego dostęp, wywołaj obiekt jako 'entry.object.dn' (A' console.log (entry.object.dn) 'może być pomocny, aby zobaczyć, że jest to poprawne pole). Następnie ten plik entry.object.dn przekazuje go do client.bind 'client.bind (entry.object.dn, password, function (err) {...} –

Powiązane problemy