2012-11-06 34 views
6

Şu anda ldapjs yüklü olan node.js'yi çalıştırıyorum. Amacım, kullanıcıların bir kullanıcı adı ve parola ile oturum açmasına izin vermek için ldapjs kullanan bir sisteme sahip olmaktır.ldapjs kimlik doğrulaması (kullanıcı oturum açma ayarları)

Şu an için http://ldapjs.org belgelerini okuyordum ama ldap ve ldapjs'in uygulamasının tümünün fikirlerini anlamakta zorlanıyorum.

Şu anda beni aşağıda çalıştırmak ve başarılı bir sunucuya bağlanmasına olanak sağlar belgelere

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

bu var.

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

Ama buradan gitmek veya bu doğru bir yaklaşım olsa bile ...

İdeal ayar kullanıcıları ve şifreleri bir dizi var olacak ve üzerinde nerede gerçekten emin değilim Başarılı bir ldap bağlantısı, bilgilerin doğru olduğunu onaylar ve kullanıcı adı/şifre yanlışsa doğru veya yanlış olarak yanıtlar.

Bu konuda daha fazla bilgi sahibi olmak için herhangi bir iyi kaynak bilen var mı, yoksa daha iyisi, daha sonra nereye gideceğine dair bana bir fikir vermek için bazı temel istemci/sunucu tarafı kodları önerebilir!

Herhangi bir cevap gerçekten takdir edilecektir.

Çok teşekkürler

cevap

17

Sadece çabuk onun görünüşte tamamlanmamış belgede okuduklarım, bir LDAP sunucusunu veya görünüyor LDAP istemcisi uygulamak için kullanılabilir I ldapjs kullanılır, ancak esaslı asla ne' yapmaya çalışıyorum (yani, uygulamanızda kullanıcıları varolan bir LDAP sunucusuna karşı kimlik doğrulaması yapmak istediğinizi varsayalım). Belgedeki örneklerin çoğu, belirli bir bağlantı noktasını dinleyen ve arka uç veritabanıyla etkileşimde bulunan bir LDAP sunucusu oluşturmaya odaklanır. Arka uç veritabanınız veya kullanıcı ve şifreleriniz arasında LDAP tabanlı bir arayüz oluşturmaya çalışmıyorsanız, muhtemelen sunucu API'sine ihtiyacınız yoktur. Zaten çalışan bir LDAP sunucunuz varsa, bunun gibi bir şey yapmak için istemci API'sini kullanmanız gerekecektir:

1. Kimlik doğrulama hizmetleri de dahil olmak üzere dizin hizmetlerini sağlayan LDAP sunucusuna anonim olarak bağlanın. İlgili kaydın 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 için kullanıcı adı (örneğin, e-posta adresi) tarafından

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

2.Search: Sadece ile yapabilirsiniz gibi görünüyor giriş (entry.object) döndü. Bu kütüphanenin dokümantasyonu, bu nesnelerin nasıl kullanılabileceği hakkında pek konuşmaz (örneğin, yöntemleri, özellikleri, vb.). Yani, dizin sunucusundan aldığınız girdinin DN veya DN gösterimini gerçekten nasıl elde edeceğinizi anlamanız gerekir. DN o kullanarak sunucuya

4.Rebind: Yukarıdaki bağlama

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

5.The sonuç kimlik doğrulama başarılı olup olmadığını belirlemek için kullanmak gerekecektir şeydir.LDAP tabanlı kimlik doğrulaması için kullanıcı/parola veri deponuzun önünde bir LDAP sunucusu uygulamaya çalışıyorsanız, sunucu örneklerini izlemeniz gerekecektir. Ben şahsen bunun bir aşırı sıkıntı olduğunu ve güvenlik açısından sorunlu olabileceğini düşünüyorum.

+4

DN, entry.object içinde saklanır. Buna erişmek için nesneyi 'entry.object.dn' (A 'console.log (entry.object.dn)' olarak adlandırmak, doğru alan olduğunu görmenizde yardımcı olabilir). Sonra bu entry.object.dn, client.bind 'client.bind (entry.object.dn, password, function (err) {...' dizinine iletir. –

İlgili konular