PHP LDAP kullanarak kullanıcı kimlik doğrulaması

3 Cevap php

Merhaba benim proje üniversitemiz için bir modül kayıt sistemi yapmaktır. Ayrıntılar biz mevcut üniversite giriş bilgilerini kullanarak developin olan sisteme öğrencilerin kimlik doğrulaması için bu yüzden benim üniversitede IT insanla temas. Bana Bazı LDAP bilgi vermek, benim projede kullanabilirsiniz bilmiyorum. Proje için ben bir Apacha sunucu üzerinde PHP, MySQL kullanıyorum. Peki nasıl LDAP bilgileri ile onun kimliği ve şifre verilir, benim sisteme bir kullanıcı günlüğü kimlik doğrulaması yapabilir.

LDAP bilgisi (i alan adı vb değişti) aşağıda verilmiştir

Blueroom.ac.uk etki için LDAP bilgi


LDAP Host : ad.blueroom.ac.uk

LDAP port no: 389

BASE DN : ou=bluebird, dc=bluebird, dc=ac, dc=my

LDAP account to bind : cn = kikdap, ou=servacc, dc=bluebird,dc=ac,dc=uk

LDAP account password : ********

Attribute : sAMAccountName 

3 Cevap

Genel prosedür (parantez içerisinde ilgili ext / ldap php komutları) olacaktır:

  1. "LDAP Sunucuyu" ve "hayır LDAP bağlantı noktasını" (ldap_connect()) kullanarak LDAP sunucusuna bağlanmak ve doğru bağlantı seçenekleri (ldap_set_option()), özellikle LDAP_OPT_PROTOCOL_VERSION set ve LDAP_OPT_REFERRALS

  2. Active Directory sunucusu kimlik doğrulaması eğer doğrudan giriş sayfasından kullanıcı adı ve şifrenizi kullanabilirsiniz - "LDAP hesap parolasını" "bağlamak için LDAP hesabı" ve (ldap_bind()) kullanarak LDAP sunucusuna bağlanmak ve tüm aşağıdaki adımları atlayın.

  3. (&(objectClass=user)(sAMAccountName=%s)) burada %s olması için kullanıcı adı ile değiştirilmesi gerekir gibi bir büyük olasılıkla bir şey - "BASE DN" ve uygun LDAP filtresi specifing eşleşen bir kullanıcı giriş / nesne ağacı aramak doğrulanmış (ldap_search())

  4. iade girişlerin sayısı (>

  5. Bu tek girdinin ayırt edici ad (DN) retrive (ldap_get_dn())

  6. doğrulama sayfasından verilen şifre ile LDAP sunucusuna bağlanmak için denemek için son adımda bulunan DN kullanın (ldap_bind())

  7. bağlama herşey yolunda değilse, büyük olasılıkla parola yanlış sonra başarılı ise

Ilk başta göründüğü kadar da zor değil. Genellikle bu tür Net_LDAP2 PEAR package or Zend_Ldap out of the Zend Framework gibi bir LDAP sunucusu kimlik doğrulaması için standart kütüphanenin çeşit kullanmak önermek istiyorum. Ben çalışıyorsun ne besbelli olan ((ben oldukça iyi kodunu bilmenize rağmen) aslında Net_LDAP2 kullanıyorum ama Zend_Ldap Active Directory sunucuları veya ADAMS sunucularına karşı çok iyi çalışıyor hiçbir deneyimi yok ) ile.

Bu kullanarak hile yapmak Zend_Ldap olacak:

$options = array(
    'host'                 => 'ad.blueroom.ac.uk',
    'useStartTls'          => true,
    'accountDomainName'    => 'blueroom.ac.uk',
    'accountCanonicalForm' => 4,
    'baseDn'               => 'ou=bluebird,dc=bluebird,dc=ac,dc=my',
);
$ldap = new Zend_Ldap($options);
try {
    $ldap->bind('user', 'password');
} catch (Zend_Ldap_Exception $e) {
    // something failed - inspect $e
}
// bind successful
$acctname = $ldap->getCanonicalAccountName('user', Zend_Ldap::ACCTNAME_FORM_DN);

[php ldap authentication] için Google arama http://us3.php.net/ldap ve diğer sonuçlara bakarak size http://code.activestate.com/recipes/101525/ deneyebilirsiniz.

you could use http://pear.php.net/package/Net_LDAP2/docs it's nice and works.

Doc tarafından alınan bağlantısı örneği:

// Inclusion of the Net_LDAP2 package:
require_once 'Net/LDAP.php';

// The configuration array:
$config = array (
    'binddn'    => 'cn=admin,ou=users,dc=example,dc=org',
    'bindpw'    => 'password',
    'basedn'    => 'dc=example,dc=org',
    'host'      => 'ldap.example.org'
);

// Connecting using the configuration:
$ldap = Net_LDAP2::connect($config);

// Testing for connection error
if (PEAR::isError($ldap)) {
    die('Could not connect to LDAP-server: '.$ldap->getMessage());
}