Cara menggunakan php connect active directory

Permisi gan,
Numpang nanya cara penggunaan LDAP di PHP.

Jadi gini ceritanya, saya punya server Active Directory dan mempunyai aplikasi yang dibuat dengan PHP.
Yang ingin saya tanyakan bagaimana cara nya aplikasi PHP ini menggunakan halam login dengan user yang ada di server AD sy.

Saya sudah coba google, dan coba" dari salah satu blog

Code:

http://mazhters.blogspot.com/2011/05/bermain-ldap-dengan-php.html


Untuk Loginya sudah berhasil, terkendala nya untuk menampilkan informasi user yang ada di server AD, seperti display name, office dan email
Seperti capture salah satu user di sever AD
Cara menggunakan php connect active directory


Berikut code php ldap yang saya buat dari salah satu blog :

Code:


<?php
$ldap_host = '100.24.30.2xx'; //Host LDAP server ( contoh )
$ldap_domain = '100.24.30.2xxx'; // LDAP Domain
$ldap_dn = 'dc=ptabc,dc=co, dc=id'; // Domain Component
// Jika $ldap_domain = 'mazhters.co.id';
// maka $ldap_dn = 'dc=mazhters,dc=co,dc=id';
$ldap_user = '[email protected]';
$ldap_pass = 'passwordnya';

$ldap_conn = ldap_connect($ldap_host);
if($ldap_conn)
{
// menyatukan aplikasi dengan server LDAP
$ldapbind = ldap_bind($ldap_conn, $ldap_user, $ldap_pass);
// verify binding
if (!$ldapbind){
die('Login gagal, userlogin or userpass salah');
}
}
else
{
die('Koneksi ke LDAP Gagal');
}

//Ada beberapa server yang mesti minta set_option ini dulu
ldap_set_option($ldap_conn, LDAP_OPT_PROTOCOL_VERSION, 3);
ldap_set_option($ldap_conn, LDAP_OPT_REFERRALS, 0);

//Mencari nilai-nilai dari atribut LDAP sesuai filter yang di inginkan.
//Sample yg ane pake ini untuk mencari nilai-nilai atribut berdasarkan userlogin
$result = ldap_search($ldap_conn, $ldap_dn, "(sAMAccountName=".$ldap_user.")");

//Nah ini untuk narik nilai atributnya.
$entries = ldap_get_entries($ldap_conn, $result);

//Ini untuk munculin, tinggal dipilih-dipilih value mana yang mau diambil
echo "<pre>";
print_r($entries);
echo "</pre>";
die();
?>


Output php dari browser
Jika user Login berhasil muncul pesan error ;
Cara menggunakan php connect active directory


Jika user login gagal, pesan error :
Cara menggunakan php connect active directory


Kalau di lihat pesan error di atas, secara umum koneksi ke server sudah berhasil atau script koding yang ldap_connect sudah OK
Yang saya bingung kenapa
Cara menggunakan php connect active directory

ldap_bind():
ldap_search():
ldap_get_entries()
ini error ya ?
Mohon solusinya ya gan.
Makasih sebelumnya

LDAP (Lightweight Directory Access Protocol) adalah salah satu protokol direktori yang sampai saat ini masih bertahan dan populer digunakan di kelas menengah dan enterprise. Beberapa produk yang bisa anda pakai misalnya Microsoft Active Directory, Fedora Directory Access, Mandriva Directory Access, SUSE Linux Enterprise, OpenLDAP dan TurnkeyLinux LDAP.

Disini saya hanya akan membahas bagaimana cara koneksi ke protokol LDAP dari PHP. Beberapa hal yang harus anda perhatikan adalah:

1. pastikan extension php_ldap (php_ldap.dll untuk Windows dan php_ldap.so untuk Linux) sudah tersedia dan sudah di enable dalam file php.ini

LDAP(Lightweight Directory Access Protocol) adalah sebuah protokol aplikasi yang digunakan untuk melakukan query atau memodifikasi data layanan direktori dan diimplementasikan dalam IP(Internet Protocol). fungsi utamanya adalah untuk menyimpan semua informasi user, komputer dan sebagainya dalam satu domain. sebagai contoh jika satu komputer terdaftar pada satu domain, maka komputer tersebut dapat disetting sedemikian rupa agar dapat menggunakan user yang tersimpan pada Active Directory untuk login.



Jika aplikasi kita dapat terkoneksi dengan Active Directory, maka tidak menuntut kemungkinan kita bisa menggunakan semua user di dalamnya untuk autentikasi login. kelebihannya adalah jika ada suatu kebutuhan dimana user ingin semua orang yang menggunakan aplikasi kita didapatkan dari server Active Directory, kita tidak perlu mendaftarkan ulang semua user tersebut. System ini lebih dikenal dengan Single Sign On.

Ok, sekian dulu penjelasan mengenai LDAP. sekarang pertanyaannya adalah apakah PHP mampu melakukan koneksi ke server LDAP/Active Directory? jawabannya tentu saja adalah "YA" didalam ekstensi bawaan dari PHP sudah disediakan library untuk koneksi ke server Active Directory. berikut cara untuk mengaktifkannya :
  1. Buka file php.ini yang terdapat pada root folder php atau pada folder conf apache (jika menggunakan web server apache)
  2. Cari text ";extension=php_ldap.dll" 
  3. Jika terdapat karakter titik koma ";" seperti diatas artinya library php_ldap.dll belum diaktifkan dan belum bisa digunakan pada aplikasi kita, untuk itu hapus karakter titik koma tersebut.
  4. Save file php.ini nya, kemudian restart web server

Setelah web server direstart, maka kita siap untuk membuat aplikasi yang terkoneksi ke server Active Directory.

Sekarang mari kita buat file baru misalnya testldap.php, lalu tulis kode dibawah ini :

<?

// user dan password user yang sudah terdaftar di server LDAP
$ldaprdn  = 'uname';
$ldappass = 'mypassword';

// membuat koneksi ke server active directory
$ldapconn = ldap_connect("192.168.123.123"); // jika gagal akan mereturn value FALSE

if ($ldapconn) {
// menyatukan aplikasi dengan server LDAP
$ldapbind = ldap_bind($ldapconn, $ldaprdn, $ldappass);
// verify binding
if ($ldapbind) {
echo "Koneksi berhasil..";
} else {
echo ldap_error($ldapbind);
}
}else{
echo ldap_error($ldapconn);
}
?>

Catatan : alamat IP server bisa diganti dengan nama domain server, contoh : contohdomain.com

Jika berhasil, maka saat aplikasi dijalankan akan menampilkan pesan "User terdaftar" dan jika gagal maka akan menampilkan pesan kemungkinan error dari library LDAP. Jika user tidak dikenali maka biasanya akan mengeluarkan pesan error "Invalid Credential".

Jika sudah yakin bahwa user telah benar-benar terdaftar pada server akan tetapi masih mengeluarkan error "Invalid Credential" coba pastikan kembali format login user yang digunakan pada server. ada 3 tipe format login yang sampai sekarang sering digunakan, yaitu dengan contoh bahwa domain yang sedang kita gunakan adalah contohdomain.com:
  1. Email
    contohnya : [email protected]
  2. NT
    contohnya : com\contohdomain\namauser
  3. RDN
    untuk login dengan tipe RDN, kita harus tau terlebih dahulu dimana user yang akan kita gunakan disimpan di Active Directory. misalkan usernya disimpan pada OU yang bernama Users, maka format loginnya adalah sebagai berikut :
    CN=namauser,OU=Users,DC=contohdomain,DC=com
Jika penulisan usernya sudah benar, maka pada saat binding tidak akan ada error "Invalid Credential" lagi

Selamat mencoba :)