PHP ile Active Directory Arama

4 Cevap php

Active Directory araması nasıl PHP ile yapabilirim? PHP yeniden derlenmesine ihtiyaç duymadan. PHP version 5.3

Ben bir kişinin kendi kullanıcı adından adını görüntülemek bulmak istiyorum. Web sunucusu IIS 6 ve PHP FastCGI ile servis edilir.

Ben adını almak:

$cred = explode('\\',$_SERVER['REMOTE_USER']);
if (count($cred) == 1) array_unshift($cred, "(no domain info - perhaps SSPIOmitDomain is On)");
list($domain, $user) = $cred;
return $user;

Peki nasıl o isim bulabilirsiniz? örneğin DoeJ = John Doe

Edit:

Kullanıcı arama için çalışıyor, ancak "taban DN" bulmak için nasıl emin değil. Yani anonim bağlantı, Active Directory sunucusuna doğrudan erişim veya yönetici haklarına sahip değilsiniz.

<?php

//using ldap bind anonymously

// connect to ldap server
$ldapconn = ldap_connect("example.co.uk")
    or die("Could not connect to LDAP server.");

if ($ldapconn) {

    // binding anonymously
    $ldapbind = ldap_bind($ldapconn);

    if ($ldapbind) {
        echo "LDAP bind anonymous successful...";

        ldap_set_option($ldapconn, LDAP_OPT_PROTOCOL_VERSION,3);
        ldap_set_option($ldapconn, LDAP_OPT_REFERRALS,0);

        $dn = "CN=Users"; // also tried DC=example,DC=co,DC=uk
        $filter="(SAMAccountName=username)";
        $justthese = array("ou", "sn", "givenname", "mail");

        $sr=ldap_search($ldapconn, $dn, $filter, $justthese);

        $info = ldap_get_entries($ds, $sr);

        echo $info["count"]." entries returned\n";

    } else {
        echo "LDAP bind anonymous failed...";
    }
}
?>

Ldap_search başarısız Uyarı: ldap_search () [function.ldap-Arama]: Arama: Operasyon hatası

4 Cevap

Tamam - her şeyden önce, LDAP arayüzü aracılığıyla Active Directory sunucusu ile iletişim kurmak için ext/ldap gerekir. Açıkçası bu gereksinimi (aksi takdirde tanımlanmamış işlevler hakkında hataları olsun istiyorum) PHP kurulumu ile bir araya geldi.

Şimdi soru şudur: Windows sunucu karşı kodlama ne? Windows Server 2003 yılından itibaren anonim bağlamalar önce mevcut ve yetkili bir kullanıcı kimlik doğrulaması olmadan Active Directory ağacını arama yapamazsınız anlamına gelir, disabled by default vardır. (- Ancak herhangi bir yönetici haklarına sahip değilsiniz gibi, bunu değiştirmek mümkün olmayacaktır adsız bağlantıları etkinleştirmek için here bakınız)

İkinci sorun, aslında bir arama işlemi idam edilecek hangi LDAP ağacı içinde konumu hangi base DN olduğunu. Kullanıcıların kap için normale temel DN örneğin, CN=Users,DC=example,DC=local olan, CN=Users,DC=yourdomain,DC=yourtopleveldomain olmalıdır.

Kullandığınız filtre aslında doğru: (SAMAccountName=username) kullanıcı için hesap girişi bulacaksınız username. Yapabileceğiniz adınızı değişken kullanmak için:

$filter = sprintf('(SAMAccountName=%s)', $user);

Genel kod akış olsa da, doğru gibi görünüyor.

Özetlemek gerekirse: Active Directory adsız bağlantılara izin veriyorsa, ilk kontrol etmek ve sonra aramanızı taban DN ayarlamak gerekir gerekir. Hiçbir anonim bağlar izin iseniz, Active Directory ilzama yetkili bir kullanıcı kullanmak gerekecek.

ldap_get_entries fonksiyonunun fisrt parametre yanlış:

$info = ldap_get_entries($ldapconn, $sr);

Bu şekilde test ve kod şimdi çalışır.

PHP etkin bir dizini sorgulamak için kullanabileceğiniz bir LDAP library hangi vardır. Bu enabled by default ama değil.

Bunu kullanabilirsiniz varsa, ldap_search() bakabilirsiniz

Bu windows üzerinde php çalışıyor demektir daha IIS kullanıyorsanız bu yana, o da size php derlemeye olmadan LDAP extension etkinleştirebilirsiniz anlamına gelir. Bu problemlerin çoğunu çözmek gerekir.