Cara menggunakan php ldap_connect

PHP LDAP di xampp

Written by Aldo Expert at 2014-03-09 04:04:36.

PHP LDAP digunakan untuk melakukanSingle Sign On (SSO) pada pemrograman untuk login ataupun kebutuhan lain, dimana user berada pada server yang berbeda dan disebarkan dengan metode LightWeight Directory Access Control (LDAP), sehingga aplikasi tidak harus melalui register user yang memiliki kelemahan ketika ada banyak aplikasi maka user harus menghafal password tetapi jika menggunakan SSO maka user tidak perlu menghafal username dan password yang berbeda pada setiap aplikasi. Berikut adalah cara untuk mengaktifkan php ldap pada xampp

  1. buka xampp/php/php.ini dan cari text ";extension=php_ldap.dll"
  2. kemudian hilangkan tanda comment sehingga menjadi "extension=php_ldap.dll" (tanda ; adalah tanda comment)
Setelah restart apache xampp maka sudah bisa aktif untuk php ldap. Tetapi terkadang ada juga yang mengalami error macam-macam, jika muncul error ketika restart/start apache xampp coba lakukan teknik berikut
  1. cari 3 file "libeay32.dll, libsasl.dll, ssleay32.dll" pada folder xampp/php/ .
  2. copy dan paste ketiga file tersebut ke C:\Windows\system32\ .
  3. restart apache xampp
Setelah melakukan cara diatas maka php ldap sudah bisa berjalan dan tidak muncul error Silahkan cek dengan script PHP LDAP kalian, jika masih muncul error php berarti script kalian ada yang salah dan silahkan cek DSN untuk koneksi ke LDAP Semoga Berhasil.

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 ldap_connect


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 ldap_connect


Jika user login gagal, pesan error :
Cara menggunakan php ldap_connect


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 ldap_connect

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

Saya sedang mengembangkan situs web sederhana di PHP sehingga beberapa pengguna dapat melakukan tugas-tugas tertentu. Tujuan saya adalah untuk mendapatkan otorisasi berbasis peran untuk pengguna dan mereka akan melihat halaman yang berbeda sesuai dengan keanggotaan grup LDAP mereka. Ini adalah bagaimana saya mencoba untuk mengimplementasikan IT-

1) menggunakan fungsi library php-ldap untuk terhubung ke server LDAP 2) mengekstrak dn nama grup dan nama pengguna dengan ldapsearch dari dn basis pengguna dan dn basis grup 3) mencari atribut "memberOf" di entri pengguna dan cocokkan dengan grup dn. Mengembalikan nilai true jika cocok 4) Cari atribut "anggota" di entri grup dan cocokkan dengan dn pengguna. Kembalikan true jika cocok.

Sejauh ini saya telah menguji ini di server OpenLDAP dan tampaknya berfungsi, tetapi saya ingin skrip berfungsi dengan server direktori lain seperti ApacheDS, direktori aktif, dan 389ds. Karena saya tidak memiliki akses ke beberapa server direktori, saya ingin melaporkan apakah langkah-langkah ini akan berhasil di server direktori lain atau tidak. Bantuan apa pun dalam hal ini akan sangat dihargai. Terima kasih sebelumnya.

0

Filter "Filter kustom saya" terletak di sini (& (| (objectClass = orang) (objectClass = inetOrgPerson)) (| (uid = ($ nama pengguna)) (cn = ($ nama pengguna)) (sAMAccountname = ($ nama pengguna) )) ) "dan filter pencarian grup" (| (objectClass = groupOfNames) (objectClass = posixGroup)) " - Anindya Mukherjee 09 Sep 14 09-09-2014 14:37:05

  • 1 jawaban
  • Penyortiran:

    Aktivitas

0

Langkah-langkah ini sebagian besar akan berfungsi di server LDAP lainnya. Anda harus dapat mengubah atribut yang Anda gunakan, seperti ActiveDirectory misalnya menggunakan atribut samAccountName di mana skema LDAP default menggunakan uid

Lihat https://github.com/heiglandreas/kimai/blob/feature/fixLDAPAuthentication/core/libraries/Kimai/Auth/Ldapadvanced.php yang mungkin berisi beberapa cuplikan berguna. Itu tidak mengatasi masalah di mana keanggotaan grup didefinisikan di usernode!

0

Terima kasih untuk informasi. Filter pencarian pengguna saya mencari atribut objek inetOrgPerson atau "orang" dan atribut "uid" atau "cn" atau "sAMAccountname", jadi itu harus berfungsi untuk AD. Mengenai AD menyimpan informasi grup di catatan input pengguna, saya mengubah alur proses sehingga catatan pengguna diperiksa untuk informasi grup terlebih dahulu, dan jika kembali salah, cari grup di grup ou. Kekhawatiran saya adalah jika ada server direktori lain yang menggunakan cara non-standar dan atribut lain dan / atau kelas objek untuk menyimpan informasi tentang grup. -

16 tahun yang lalu

Coba skrip ini jika Anda tidak tahu cara menambahkan pengguna di AD Win2K.
Untuk mendapatkan informasi lebih lanjut tentang atribut, buka konsol adsiedit di Alat Dukungan untuk Win2K.

$ adduserAD ["cn"] =
$ adduserAD ["tipe instans"] =
$ adduserAD ["kelas objek"] = "atas";
$ adduserAD ["kelas objek"] = "orang";
$ adduserAD ["objectclass"] = "organizationalPerson";
$ adduserAD ["kelas objek"] = "pengguna";
$ adduserAD ["nama tampilan"] =
$ adduserAD ["nama"] =
$ adduserAD ["nama yang diberikan"] =
$ adduserAD ["sn"] =
$ adduserAD ["perusahaan"] =
$ adduserAD ["departemen"] =
$ adduserAD ["judul"] =
$ adduserAD ["deskripsi"] =
$ adduserAD ["mail"] =
$ adduserAD ["inisial"] =
$ adduserAD ["samaccountname"] =
$ adduserAD ["nama prinsipal pengguna"] =
$ adduserAD ["profilepath"] =
$ adduserAD ["manager"] = *** Gunakan DistinguishedName ***

if (! ($ ldap = ldap_connect ("localhost"))) (
die ("Tidak dapat terhubung ke server LDAP");
}
if (! ($ res = @ldap_bind ($ ldap, " [dilindungi email]", $ kata sandi))) (
die ("Tidak dapat mengikat akun LDAP");
}
if (!(ldap_add ($ldap, "CN = Pengguna Baru, OU = Pengguna OU, DC = pc, DC = com", $ adduserAD))) (
echo "Ada masalah saat membuat akun
echo "Silakan hubungi administrator Anda!";
keluar;
}
ldap_unbind ($ ldap);

12 tahun yang lalu

Berikut adalah cara menambahkan pengguna dengan kata sandi MD5 hash ke OpenLDAP. Saya menggunakan teknik ini untuk memigrasi akun Drupal ke OpenLDAP untuk solusi sistem masuk tunggal.

Triknya adalah memberi tahu OpenLDAP jenis hash (mis. (MD5)) sebelum kata sandi, dan juga ke base64 menyandikan hasil hash BINARY. Anda tidak bisa hanya mengkodekan base64 apa yang dikembalikan oleh fungsi hash PHP "s md5 () atau sha (), karena mereka mengembalikan string teks heksadesimal. Pertama, Anda harus menggunakan paket (" H * ", $ hash_result) untuk menjadikannya string biner , KEMUDIAN kamu bisa base64 menyandikannya.

Berikut adalah kode lengkap untuk menghubungkan dan menambahkan pengguna dengan kata sandi hash. Anda tidak harus menggunakan (MD5), Anda dapat memilih hash yang berbeda jika itu yang Anda miliki. Output dari salah satu sandi hash ini akan terlihat seperti ini: (md5) bdwD04RS9xMDGVi1n / H36Q ==

Akhirnya beberapa peringatan: Teknik ini tidak akan berfungsi jika Anda meng-hash kata sandi menggunakan nilai garam (tetapi Drupal tidak). Teknik ini juga pasti tidak akan bekerja dengan direktori aktif, di mana kata sandi pasti hanya dapat diatur melalui koneksi SSL dan hashing mungkin bekerja secara berbeda.

$ ds = ldap_connect ($ serverAddress);
jika ($ds) (
ldap_set_option ($ds, LDAP_OPT_PROTOCOL_VERSION, 3); // jika tidak, default PHP ke ldap v2 dan Anda akan mendapatkan Kesalahan Sintaks!
$ r = ldap_bind ($ ds, $ managerDN, $ managerPassword);
$ ldaprecord ["cn"] = $ nama_pengguna_baru;
$ ldaprecord ["givenName"] = $ newuser_firstname;
$ ldaprecord ["sn"] = $ nama_pengguna baru;
// letakkan pengguna di objectClass inetOrgPerson sehingga kami dapat mengatur atribut surat dan nomor telepon
$ ldaprecord ["kelas objek"] = "orang";
$ ldaprecord ["objectclass"] = "organizationalPerson";
$ ldaprecord ["kelas objek"] = "inetOrgPerson";
$ ldaprecord ["mail"] = $ newuser_email_address;
$ ldaprecord ["telephoneNumber"] = $ newuser_phone_number;
// dan sekarang bagian yang sulit, base64 menyandikan hasil hash biner:
$ ldaprecord ["userPassword"] = "(MD5)". base64_encode (paket ("H *", $ newuser_md5hashed_password));
// Jika Anda memiliki kata sandi teks biasa, Anda dapat menggunakan:
// $ ldaprecord ["userPassword"] = "(MD5)". base64_encode (paket ("H *", md5 ($ newuser_plaintext_password)));
$r = ldap_add ($ds, $base_user_dn, $ldaprecord);
) else (mati "tidak dapat terhubung ke server LDAP di $ serverAddress.";)

11 tahun yang lalu

Saya membuat fungsi sederhana yang dapat dipanggil untuk membuat grup distribusi global di Active Directory:

fungsi ldap_createGroup ($ object_name, $ dn, $ anggota, $ ldap_conn)
{
$ addgroup_ad ["cn"] = "$ nama_objek";
$ addgroup_ad ["objectClass"] [0] = "atas";
$ addgroup_ad ["objectClass"] [1] = "grup";
$ addgroup_ad ["groupType"] = "2";
$ addgroup_ad ["anggota"] = $ anggota;
$ addgroup_ad ["sAMAccountName"] = $ nama_objek;

Ldap_add ($ ldap_conn, $ dn, $ addgroup_ad);

Jika (ldap_error ($ ldap_conn) == "Berhasil")
kembali benar;
lain
kembali salah;
}
?>

Anda dapat memanggil fungsi ini menggunakan kode berikut:

$ ldap_conn = ldap_bind();
$ object_name = "Grup Uji";
$dn = "CN =". $ nama_objek. ", OU = PathToAddGroupTo, OU = Semua Pengguna, DC = DOMAIN ANDA, DC = COM";
$ anggota = "CN = Pengguna1, OU = PathToAddGroupTo, OU = Semua Pengguna, DC = DOMAIN ANDA, DC = COM";
$ anggota = "CN = Pengguna2, OU = PathToAddGroupTo, OU = Semua Pengguna, DC = DOMAIN ANDA, DC = COM";

Ldap_createGroup ($ nama_objek, $ dn, $ anggota, $ ldap_conn);
?>

Fungsi lain yang saya buat adalah ldap_bind (), dan ini dapat digunakan untuk mengikat ke server LDAP:

fungsi ldap_bind()
{
$ldap_addr = "192.168.1.1"; // Ubah ini ke alamat IP server LDAP
$ ldap_conn = ldap_connect ($ ldap_addr) or die ("Tidak dapat" terhubung! ");
ldap_set_option ($ ldap_conn, LDAP_OPT_PROTOCOL_VERSION, 3);
$ ldap_rdn = "nama_domain \\ akun_pengguna";
$ ldap_pass = "user_password";

// Mengautentikasi pengguna terhadap pengontrol domain
$ flag_ldap = ldap_bind ($ ldap_conn, $ ldap_rdn, $ ldap_pass);
kembalikan $ ldap_conn;
}
?>

13 tahun yang lalu

Saat menambahkan / mengedit atribut untuk pengguna, perlu diingat bahwa atribut "memberof" adalah kasus khusus. Atribut memberOf bukanlah atribut yang dapat diakses dari skema pengguna. Untuk menambahkan seseorang ke grup, Anda harus menambahkan pengguna di grup, dan bukan grup di pengguna. Anda dapat melakukan ini dengan mengakses atribut grup "anggota":

$ nama_kelompok = "CN = Grup Saya, OU = Grup, DC = contoh, DC = com";
$ group_info ["anggota"] = $ dn; // Pengguna "s DN ditambahkan ke grup" s "anggota" array
ldap_mod_add ($ connect, $ group_name, $ group_info);

?>

11 tahun yang lalu

Solusi ini bekerja untuk kami.
Dalam bentuk CN dan pwdtxt dihasilkan secara acak dari aturan yang ketat.
Skrip ini membuat 50-60 pengguna pada hari AD pr.day! dan bahkan tidak pernah memiliki kesalahan!

## Dari bentuk
$CN = $_POST["CN"];
$ nama yang diberikan = $ _POST ["nama yang diberikan"];
$SN = $_POST["SN"];
$surat = $_POST["surat"];
$ Telepon = $ _POST ["Telepon"];
$pwdtxt = $_POST["pwdtxt"];

$ AD_server = "localhost: 390"; // Stunnel Lokal -> http://www.stunnel.org/
$ AD_Auth_User = "[dilindungi email]" ; // Pengguna administratif
$ AD_Auth_PWD = "duppiduppdupp"; // kata sandi

$dn = "CN =". $ CN. ", OU = Brukere, DC = mahasiswa, DC = suatu tempat, DC = com";

## Buat kata sandi Unicode
$ newPassword = "\" ". $ pwdtxt." \ "";
$len = strlen ($baruPassword);
$newPassw = "";

untuk ($i = 0; $i< $len ; $i ++) {
$ newPassw. = "($ kata sandi baru ($ i)) \ 000";
}

## HUBUNGKAN KE IKLAN
$ ds = ldap_connect ($ AD_server);
jika ($ds) (
ldap_set_option ($ds, LDAP_OPT_PROTOCOL_VERSION, 3); // PENTING
$ r = ldap_bind ($ ds, $ AD_Auth_User, $ AD_Auth_PWD); // MENGIKAT

$ ldaprecord ["cn"] = $ CN;
$ ldaprecord ["nama yang diberikan"] = $ nama yang diberikan;
$ ldaprecord ["sn"] = $ SN;
$ ldaprecord ["kelas objek"] [0] = "atas";
$ ldaprecord ["kelas objek"] [1] = "orang";
$ ldaprecord ["objectclass"] [1] = "organizationalPerson";
$ ldaprecord ["kelas objek"] [2] = "pengguna";
$ ldaprecord ["surat"] = $ surat;
$ ldaprecord ["telephoneNumber"] = $ Telepon;
$ ldaprecord ["unicodepwd"] = $ newPassw;
$ ldaprecord ["sAMAccountName"] = $ CN;
$ ldaprecord ["UserAccountControl"] = "512";
// Ini untuk mencegah pengguna dinonaktifkan. ->
http: //support.microsoft.com/default.aspx?scid=kb;en-us;305144

$r = ldap_add ($ds, $dn, $ldaprecord);

) lain (
gema "tidak dapat terhubung ke server LDAP di$ AD_server. ";
}

?>

Ini adalah contoh kode membuat pengguna i AD.
Kami menggunakan ini di halaman web internal untuk membuat
pengguna sementara yang dapat mengakses jaringan nirkabel.
Kami memiliki skrip .pl yang menghapus pengguna setelah 24 jam.

11 tahun yang lalu

Setelah saya "mengalami masalah untuk menambahkan atribut dengan sintaks boolean (1.3.6.1.4.1.1466.115.121.1.7)

$["boolean_attr"] = benar; // beri saya satu peringatan, ldap_add (): Tambahkan: Sintaks tidak valid

memecahkan ini dengan menetapkan nilai ini:

$["boolean_attr"] = "BENAR";

semoga ini bisa membantu.

16 tahun yang lalu

Menanggapi pertanyaan jharnett tentang akun yang dinonaktifkan secara default dari ldap_add, kami telah menemukan solusi.

Atribut userAccountControl berisi nilai yang mencakup apakah akun dinonaktifkan atau diaktifkan. Default untuk kami adalah 546; ketika kami mengubahnya menjadi 544 akun menjadi diaktifkan. Mengubah nilai apa pun yang ada di userAccountControl dengan 2 tampaknya mengaktifkan atau menonaktifkan akun.

Kode berikut berfungsi bagi kami untuk membuat pengguna baru dengan akun yang diaktifkan:

$ adduserAD ["userAccountControl"] = "544";

Kami baru saja menambahkan elemen ini ke contoh di atas "s array.

7 bulan yang lalu

Buat Grup di Direktori Aktif

$ds = ldap_connect("IP-server / localhost");
$ dasar_dn = "CN = Nama grup, OU = Unit Organisasi, DC = Nama domain, DC = com"; // dibedakanNama grup

Jika ($ds) (
// ikat dengan dn yang sesuai untuk memberikan akses pembaruan
ldap_bind ($ds,, "beberapa-sandi");

// Tambahkan anggota dalam grup
$ anggota_array = larik();
$ anggota_array [0] = "CN = Administrator, OU = Unit Organisasi, DC = Nama domain, DC = com";
$ anggota_array [1] = "CN = Pengguna, OU = Unit Organisasi, DC = Nama domain, DC = com";

$ entri ["cn"] = "GroupTest";
$ entri ["samaccountname"] = "GroupTest";
$ entri ["objectClass"] = "Grup";
$ entri ["deskripsi"] = "Tes Grup !!" ;
$ entri ["anggota"] = $ anggota_array;
$ entri ["tipe grup"] = "2"; // GroupType = "2" adalah Distribusi / GroupType = "1" adalah Keamanan

Ldap_add ($ ds, $ base_dn, $ entri);

Ldap_close ($ds);
) lain (
gema "Tidak dapat terhubung ke server LDAP";
}
?>

14 tahun yang lalu

Hal menyenangkan lainnya: ldap_add () "tidak suka array dengan anggota kosong: jadi
Himpunan (
= "nama"
= ""
= "nilai"
akan menghasilkan kesalahan sintaks!

selesaikan ini dengan sepotong kode sederhana:

foreach ($ originalobject sebagai $ key => $ value) (
jika ($ nilai! = "") (
$ objek [$ kunci] = $ nilai;
}
}

di mana $ originalobject adalah array yang tidak dicentang dan $ object adalah yang tanpa anggota kosong.

19 tahun yang lalu

Ldap_add() hanya akan menghormati entri $ ["attribute"] [x] = "value" * jika ada beberapa nilai untuk atribut *. Jika hanya ada satu nilai atribut, * HARUS * dimasukkan sebagai $ entri ["attribute"] = "nilai" atau ldap_add () menetapkan nilai atribut menjadi "Array" alih-alih apa yang Anda masukkan ke dalam $ entri [ "atribut"].

Berikut adalah sedikit rutinitas yang saya tulis untuk melakukan ini secara otomatis. ketika Anda "mengurai input, cukup gunakan multi_add ():
fungsi multi_add ($ atribut, $ nilai)
{
entri $ global; // entri LDAP yang "akan Anda tambahkan

If (isset ($ entri [$ atribut]))
if (is_array ($ entri [$ atribut]))
$ entri [$ atribut] [count ($ entri [$ atribut])] = nilai $;
lain
{
$ tmp = $ entri [$ atribut];
tidak disetel ($ entri [$ atribut]);
$ entri [$ atribut] [0] = $ tmp;
$ entri [$ atribut] [1] = nilai $;
}
lain
$ entri [$ atribut] = $ nilai;
}
?>
multi_add() memeriksa apakah sudah ada nilai untuk atribut tersebut. jika tidak, ia menambahkannya sebagai $ entry [$ atribut] = $ value. Jika sudah ada nilai untuk atribut, itu akan mengubah atribut menjadi array dan menambahkan beberapa nilai dengan benar.

Bagaimana cara menggunakannya:
beralih ($ form_data_name)
{
kasus "telepon": multi_add ("nomor telepon", $ form_data_value); merusak;
case "fax": multi_add("facsimileTelephoneNumber", $ form_data_value); merusak;
case "email": multi_add("mail", $ form_data_value); merusak;
...
}
?>
Dalam sistem yang saya rancang, formulir memiliki pull-down dengan nama ctype1, ctype2, ctype3, dll. dan nilainya adalah "faks, surat, telepon ...". Data kontak yang sebenarnya (nomor telepon, fax, email, dll) adalah contact1, contact2, contact3, dll. Pengguna menarik apa jenis kontaknya (telepon, email) dan kemudian memasukkan data (nomor, alamat, dll.) ke bawah.

Saya menggunakan variabel variabel untuk mengisi entri dan melewatkan bagian yang kosong. Membuat sistem entri formulir yang sangat bersih. email saya jika Anda "tertarik dengan itu, karena saya pikir saya" m melebihi ukuran catatan diperbolehkan di sini. :-)

6 tahun yang lalu

Saya terus mendapatkan "Pelanggaran Kelas Objek" ketika saya mencoba menambahkan posixAccount dan shadowAccount sebagai kelas objek. Ternyata kelas objek ini memiliki banyak bidang wajib yang tidak saya tambahkan. Anda mungkin perlu mengekspor pengguna yang berfungsi (jika Anda memiliki phpLDAPadmin) dan melihat bidang apa yang mereka miliki, lalu coba salin persis di skrip. Ini juga "tidak ada salahnya jika Anda membuat semuanya menjadi Array pertama kali, Anda dapat memperbaikinya nanti.

Drupal dapat dengan mudah disebut sebagai alat universal untuk mengimplementasikan berbagai tugas, serta kompleksitas tertentu dari solusi perusahaan.
Kebetulan saya terutama menggunakan Drupal di perusahaan, di dalam intranet jaringan yang memiliki Direktori Aktif... Dan untuk sepenuhnya
gunakan infrastruktur jaringan kami, setidaknya program adalah otorisasi Active Directory pada situs dan layanan, dan di sini Drupal memiliki masalah
tidak, berkat modul Lightweight Directory Access Protocol (LDAP).
Pada artikel ini, saya ingin memberi tahu Anda bagaimana itu dikonfigurasi di lingkungan saya, dan mungkin seseorang akan menemukan artikel itu berguna.

Jadi, segera saya akan mengatakan bahwa dengan bantuan modul ini Anda dapat memberikan:
1. Otorisasi LDAP di jaringan Anda (dalam kasus saya, ini digunakan Direktori Aktif dari Microsoft)
2. Konfigurasikan otorisasi pass-through (ketika pengguna secara otomatis masuk di bawah akun sistem operasi)
3. Batasi akses bagi mereka yang dapat memasuki situs dan siapa yang tidak.
4. Menyinkronkan atribut akun Direktori Aktif dengan bidang profil pengguna di situs, dan sebaliknya.
5. Memperbarui akun di situs setelah mengubah login akun Direktori Aktif(biasanya terjadi setelah mengubah nama karyawan - login berubah dengan cara yang sama)
6. Menetapkan peran ke pengguna di situs, tergantung pada lokasinya di grup tertentu Direktori Aktif

Karena Saya masih pengguna aktif Drupal 7, maka saya akan memberikan semua instruksi menggunakan contohnya, tetapi sekali lagi, ketika saya memulai Drupal 8 demi kepentingan,
Saya menyadari bahwa modul ini hampir identik dengan Drupal versi ke-7.

Mari kita salin data modul ke diri kita sendiri, serta dependensinya Ctools dan API Entitas... Pada halaman modul, aktifkan modul berikut:

  1. Otentikasi LDAP
  2. Otorisasi LDAP (modul opsional jika Anda perlu membatasi akses ke situs, atau peran situs berdasarkan lokasi pengguna di grup Active Directory)
  3. Otorisasi LDAP - Peran Drupal (selain modul di atas)
  4. Server LDAP
  5. LDAP SSO (modul ini opsional, jika Anda tidak memerlukan otorisasi pass-through, atau sampai server web dikonfigurasi untuk ini, Anda tidak dapat menginstalnya)
  6. Modul Pengguna LDAP

Perlu dicatat bahwa modul tidak akan diinstal jika modul tidak diinstal dalam pengaturan PHP Anda. php_ldap... Oleh karena itu, lakukan pra-instal dan sesuaikan dengan karakteristik lingkungan Anda.

Setelah instalasi modul berhasil, buka pengaturannya, yang terletak di sini admin / config / orang / ldap

Cara menggunakan php ldap_connect

Pengaturan modul dibagi menjadi 4 tab: Pengaturan, Server, Pengguna, Autentikasi, Otorisasi

Tab pertama mengonfigurasi metode enkripsi untuk kata sandi akun Direktori Aktif di dalam Drupal.

Cara menggunakan php ldap_connect

Dalam latihan saya, saya tidak menggunakan ini, jadi saya langsung pergi ke tab kedua Server... Dan di sini kita akan membahas lebih detail.
Tab menampilkan semua server otorisasi LDAP yang dibuat yang akan digunakan di situs, secara default daftar ini kosong dan kami menggunakan tombol Tambahkan Konfigurasi Server LDAP Anda dapat membuat server baru.
Halaman untuk membuat server dibagi menjadi beberapa blok, mari kita lihat masing-masing blok:

Pengaturan koneksi

Cara menggunakan php ldap_connect

Nama mesin untuk konfigurasi server ini... - nama mesin sebenarnya dari server yang sedang dibuat. Saya biasanya menelepon direktori_aktif
Nama ** - beberapa nama lain dari server, saya juga memanggil direktori_aktif
** Diaktifkan- beri tanda centang, dengan cara ini saya mengaktifkan konfigurasi server yang dibuat
Jenis Server LDAP- dalam kasus saya, saya memilih Direktori Aktif
server LDAP- nama domain atau alamat IP di mana server direktori aktif berada, dalam kasus saya ad.zv
port LDAP- sisihkan secara default 389 , kita memilikinya yang sama
Gunakan Mulai-TLS- Saya tidak mencentang kotaknya, karena kami tidak menggunakan enkripsi
Ikuti Rujukan LDAP- Saya juga tidak mengatakannya, meskipun saya tidak sepenuhnya mengerti untuk apa pengaturan ini

Metode Binnd

Cara menggunakan php ldap_connect

Metode Pengikatan untuk Pencarian (seperti menemukan objek pengguna atau keanggotaan grup mereka)
Dengan kata lain, pertanyaannya adalah bagaimana, atas nama siapa koneksi ke server direktori aktif akan terjadi untuk menemukan pengguna untuk fakta keberadaannya, membaca atributnya, dll.
Seperti halnya dalam deskripsi nilainya, saya menggunakan opsi pertama. Ikatan Akun Layanan sebagai praktik terbaik.
Yaitu, koneksi ke server akan datang dari akun khusus yang dibuat sebelumnya di direktori aktif yang memiliki hak untuk membaca direktori dan struktur direktori aktif
Memilih opsi ini di bawah, Anda harus menentukan login dan kata sandi akun layanan di bidang DN untuk pencarian non-anonim dan Kata sandi untuk pencarian non-anonim

Hapus kata sandi yang ada dari database. Periksa ini saat beralih dari Pengikatan Akun Layanan- item tidak berlaku untuk metode kami yang dijelaskan di atas, oleh karena itu kami tidak mencentang kotak.

Hubungan pengguna LDAP dengan Drupal

Cara menggunakan php ldap_connect

DN dasar untuk pengguna LDAP, grup, dan entri lainnya- DN dasar tempat semua pengguna berada di Direktori Aktif, dalam kasus saya, saya menempatkan DC = iklan, DC = zv... Dalam pengaturan ini, yang terbaik adalah berkonsultasi dengan administrator sistem server Active Directory Anda.
Atribut AuthName dan Atribut AccountName- atribut yang menyimpan nama pengguna dan nama akun, biasanya harus sama, dan dalam banyak kasus ditunjukkan nama akun sama sejak secara default, login ada di Active Directory
Atribut email- atribut di mana kotak surat pengguna berada, dalam kasus saya surat... Perlu dicatat bahwa bidang ini diperlukan untuk Drupal, karena Drupal tidak dapat memiliki pengguna tanpa kotak surat, oleh karena itu jika di lingkungan Anda ada kemungkinan ada pengguna tanpa kotak surat, maka Anda perlu menggunakan bidang di bawah ini untuk mengisi kotak surat menggunakan templat, atau nanti di tab lain kami akan kembali ke pengaturan ini dari sisi lain ...
Template email- template kotak surat, digunakan ketika kotak surat Anda, misalnya, identik dengan login, atau terdiri dari beberapa atribut pengguna di Active Directory. Oleh karena itu, Anda cukup menyusunnya dari token atribut.
Atribut gambar mini- atribut di mana gambar pengguna berada (dalam biner) untuk pemuatan selanjutnya ke profil pengguna gambar di Drupal, dalam kasus saya gambar miniFoto
Atribut ID Pengguna yang Persisten dan Unik adalah atribut unik yang tidak akan pernah berubah untuk pengguna Active Directory. Ini digunakan dalam kasus di mana, misalnya, login Anda adalah nama belakang dan inisial pengguna, dan jika tiba-tiba pengguna mengubah nama belakangnya, dan kemudian loginnya diubah, maka untuk login berikutnya ke situs Drupal dia akan secara default sebagai pengguna baru, dan Drupal akan membuat akun baru (tentu saja, dengan syarat kotak surat itu juga diubah untuknya, karena jika tetap sama, maka Drupal akan melaporkan konflik kotak surat dan tidak akan membuat yang baru catatan). Itulah mengapa bidang ini berfungsi sebagai kunci unik, yang pertama-tama akan dilihat ketika pengguna memasuki situs, bahkan jika dia mengubah login, Drupal pertama-tama akan menemukannya dengan atribut yang diberikan, dan kemudian akan menggunakannya untuk buat koneksi dengan pengguna Active Directory dan, sebagai hasilnya, perbarui loginnya di situs Drupal. Dalam kasus saya itu adalah objek
Apakah Atribut User ID Persistent dan Unique memiliki nilai biner? - Saya beri tanda centang, tk. objek disimpan dalam biner.

Bekerja dengan AD di PHP

Seri Konten:

Anda tidak perlu mempelajari Visual Basic atau PowerShell untuk melakukan operasi AD dasar, seperti menambahkan atau menghapus pengguna, mengubah data atau keanggotaan grup, dan terutama untuk operasi massal (misalnya, membuat daftar semua pengguna menurut departemen). pengetahuan tentang PHP sudah cukup (serta kehadiran pengguna dengan hak yang diperlukan).

Singkatan yang sering digunakan:

  • AD - Direktori Aktif (layanan direktori);
  • LDAP - protokol akses direktori ringan;
  • DN adalah nama yang terhormat.

Bagian pertama dari seri ini, yang diterbitkan pada bulan Juni (,,), menunjukkan cara membaca data dari server AD, mengaksesnya seperti server LDAP biasa menggunakan program ldapsearch standar dan skrip yang ditulis dalam bahasa Bourne Shell. Saya harus mengatakan bahwa Bourne Shell tidak terlalu cocok untuk pekerjaan seperti itu: bahkan untuk operasi yang cukup sederhana dalam membentuk file teks dari dua kolom, Anda harus melakukan gerakan yang sangat tidak sepele. Oleh karena itu, sangat wajar untuk mencoba menulis ulang dalam bahasa tingkat tinggi, misalnya, di PHP.

File konfigurasi

File konfigurasi yang hampir sama digunakan agar skrip berfungsi. Isinya ditunjukkan pada Listing 1.

Listing 1. File konfigurasi script phpldapread.php
#LDAP server untuk menghubungkan ldap_server = 10.54.200.1 #Base DN untuk menghubungkan ldap_basedn = "dc = shelton, dc = int" #Bind DN untuk menghubungkan [dilindungi email]# Kata sandi untuk pengguna yang atas namanya koneksi akan dibuat ldap_password = "cXdlcnR5YXNkZgo 1" # Filter untuk menyaring catatan. Artinya: pilih objek bertipe Pengguna, # yang tidak memiliki kumpulan properti "Block account" ldap_common_filter = "(& (! (UserAccountControl: 1.2.840.113556.1.4.803: = 2)) (sAMAccountType = 805306368))" # Abaikan pengguna yang terdaftar adalah objek sistem abaikan_list = "SQLAgentCmdExec, SMSService, SMSServer_001, wsus" # Direktori tempat file akan disimpan etcdir = / tmp # Nama file dengan daftar sarglist = sargusers

Script akan membutuhkan komponen tambahan pear-Config dan pear-Console_Getopt, serta ekstensi bahasa php-ldap. Pear-Config diperlukan untuk membaca file konfigurasi, pear-Console_Getopt untuk mengurai parameter baris perintah. Saya harus mengatakan, tidak seluruh skrip dipertimbangkan: masalah seperti membaca file konfigurasi, menampilkan bantuan, atau menguraikan baris perintah adalah masalah yang sudah dijelaskan dengan baik, sehingga fungsi yang sesuai akan dihilangkan, versi lengkap skrip dapat diunduh dari. Kami hanya akan mempertimbangkan apa yang terkait langsung dengan membaca data dari AD, sebagai server LDAP, dan beberapa fungsi tambahan non-standar.

Fungsi konversi kata sandi terbalik ditunjukkan pada Daftar 2. Seluruh peran yang disebut "perlindungan" adalah untuk mencegah kebocoran yang tidak disengaja (yang disebut pipet) dan tidak lebih.

Daftar 2. Fungsi konversi kata sandi terbalik.
/ * * Konversi kata sandi terbalik * @param string $ kata sandi yang dikonversi * @return string $ passwd kata sandi teks biasa * / function demux_passwd ($ dikonversi) ($ _conved = meledak ("", $ dikonversi); $ _passwd = "" ; jika ($ _conved! = 0) for (; $ _conved! = 0; $ _conved--) ($ _conved = $ _conved. "=";) $ _passwd = base64_decode ($ _conved); return rtrim ($ _ passwd ) ;)

Tentu saja, tidak ada yang menarik di sini: seperti yang telah disebutkan di bagian sebelumnya, kata sandi disimpan dalam file konfigurasi yang dikonversi ke base64, placeholder dibuang dan diganti dengan angka. Fungsi ini melakukan transformasi terbalik.

Fungsi konversi dari UTF-8 ke KOI8-R ditunjukkan pada Listing 3. Fungsi ini diperlukan karena konsol FreeBSD tidak menggunakan UTF-8.

Listing 3. Fungsi untuk mengubah string dari UTF-8 ke KOI8-R
/ * * Mengonversi string dari UTF-8 ke KOI8-R * @param string $ string sumber dalam penyandian UTF-8 * @return string $ string tujuan dalam penyandian KOI8-R * / function _from_utf8 ($ sumber) ($ dikonversi = iconv ("UTF-8", "KOI8-R", $ sumber); kembali ($ dikonversi);)

Selain itu, fungsi safe_logger yang sama sekali tidak menarik digunakan, yang tugasnya adalah mengeluarkan pesan ke log atau ke konsol dengan atau tanpa menghentikan skrip. Semua fungsi ini disimpan dalam file utils.php.

Menghubungkan ke AD

Fungsi ldap_server_connect yang ditunjukkan pada Daftar 4 digunakan untuk menghubungkan ke AD. Fungsi ini melakukan semua operasi koneksi dan mengembalikan pengenal koneksi untuk bekerja dengan server. Fungsi ini disimpan dalam file terpisah ldapquery.php

Listing 4. Fungsi untuk terhubung ke server AD
require_once $ PATH_LIB. "/ utils.php"; / * * Hubungkan ke server LDAP * @param array $ _config array parameter konfigurasi * @return resource $ ldapconn ID koneksi ke server LDAP * / function ldap_server_connect ($ _ config) (// Dapatkan kata sandi dalam teks biasa $ _ldap_pwd = demux_passwd ($ _config ["root"] ["ldap_password"]); // Buat koneksi ke server jika (! $ ldapconn = ldap_connect ($ _ config ["root"] ["ldap_server"])) safe_logger (sprintf ( "Tidak dapat terhubung ke LDAP -server% s ", $ _config [" root "] [" ldap_server "])," DIE "); // Untuk terhubung ke AD Windows 2003 dan lebih tinggi, Anda perlu mengatur opsi ini ldap_set_option ( $ ldapconn, LDAP_OPT_PROTOCOL_VERSION, 3); ldap_set_option ($ ldapconn, LDAP_OPT_REFERRALS, 0); // Masuk ke server ldap_bind ($ ldapconn, $ _config ["root"] ["ldap_binddndap"], $ _ldapconn; ;)

Apa yang saya ingin menarik perhatian Anda di sini.

Pertama, opsi LDAP_OPT_PROTOCOL_VERSION ("versi protokol") dan LDAP_OPT_REFERRALS ("nonaktifkan tautan rujukan") harus disetel masing-masing ke 3 dan 0 - tanpanya, Anda dapat melihat yang aneh: otorisasi pada server akan berlalu, tetapi pencarian apa pun akan kembali benar-benar nol catatan ...

Kedua, DN Bind harus ditentukan persis seperti dalam file konfigurasi dan tidak dengan cara lain. DN lengkap juga tidak valid.

Meminta data dari AD

Fungsi ldap_data_query terpisah telah dikembangkan untuk meminta data dari AD. Hal ini dilakukan terutama karena data yang berisi karakter non-ASCII (dan sebagian besar dalam AD normal) disimpan dalam pengkodean UTF-8. Karena konsol FreeBSD memiliki dukungan terbatas untuk UTF-8, beberapa konversi harus dilakukan.

Pemilihan data dari AD dilakukan oleh fungsi ldap_search, yang menerima, di antara parameter lainnya, array satu dimensi dengan atribut yang harus diperoleh. Tetapi untuk menunjukkan apakah nilai atribut ini harus dikodekan ulang, fungsi menerima array dua dimensi, di mana setiap elemen itu sendiri adalah array yang terdiri dari elemen dengan nama indeks dan kode ulang.

Jenis larik atribut yang diterima fungsi sebagai input ditunjukkan pada Daftar 5 (sebagian).

Listing 5. Array parameter yang diteruskan ke fungsi permintaan data.
array (2) (=> array (2) (["name"] => string (2) "cn" ["recode"] => string (4) "true") ...)

Fungsi kueri data aktual ditampilkan di Listing 6.

Listing 6. Sebuah fungsi untuk query data dari AD.
require_once $ PATH_LIB. "/ utils.php"; require_once $ PATH_LIB. "/ ldapconnect.php"; / * * Meminta data dari server LDAP * @param array $ _config Array dengan data konfigurasi * @param resource $ ldapconn ID koneksi ke server LDAP * @param array $ attribute Array atribut untuk query dari LDAP * @return array $ ldapdata Data dari server LDAP * / function ldap_data_query ($ _ config, $ ldapconn, $ atribut) ($ oneadd = array (); $ myrecode = array (); $ myattrs = array (); // Untuk query data, kami membuat array satu dimensi foreach ($ atribut sebagai $ oneattr) $ myattrs = $ oneattr ["name"]; // Meminta data menggunakan filter umum dari file konfigurasi $ result = ldap_search ($ ldapconn, $ _config ["root"] ["ldap_basedn"], $ _config ["root"] ["ldap_common_filter"], $ myattrs); // Baca semua record yang dipilih $ info = ldap_get_entries ($ ldapconn, $ result); // Cetak nomornya ke log safe_logger (sprintf ("Baca% d catatan dari server% s ", $ info [" count "], $ _config [" root "] [" ldap_server "])," "); // Buat array dua dimensi dengan keluaran // Setiap elemen array adalah array, di mana elemen kuncinya adalah nama atributnya, // dan datanya adalah nilai atributnya; dikodekan ulang jika perlu untuk ($ i = 0; $ i< $info["count"]; $i++) { for ($j = 0, $k = count($attribute); $j < $k; $j++) { $myattr = $attribute[$j]["name"]; if (isset($info[$i][$myattr])) { if ($attribute[$j]["recode"] == "true") $myrecode[$myattr] = _from_utf8($info[$i][$myattr]); else $myrecode[$myattr] = $info[$i][$myattr]; } else $myrecode[$myattr] = ""; $oneadd[$i] = $myrecode; } } return $oneadd; }

Dari array parameter dua dimensi, satu dimensi untuk fungsi ldap_search dibentuk, kemudian data diminta. Data dikembalikan sebagai array, dengan setiap elemen dalam bentuk yang ditunjukkan pada Listing 7.

Daftar 7. Satu elemen dari larik data yang dikembalikan oleh fungsi ldap_get_entries.
=> array (6) (["cn"] => array (2) (["count"] => int (1) => string (13) "Administrator") => string (2) "cn" [ "samaccountname"] => array (2) (["count"] => int (1) => string (13) "Administrator") => string (14) "samaccountname" ["count"] => int ( 2) ["dn"] => string (43) "CN = Administrator, CN = Pengguna, DC = shelton, DC = net")

Seperti yang Anda lihat, ini bahkan bukan array dua dimensi, tetapi array tiga dimensi. Pada tingkat pertama - data yang diminta, pada tingkat kedua - atribut dari satu objek, pada tingkat ketiga - string dari atribut multi-baris, yang, untuk berjaga-jaga, semuanya adalah atribut string. Juga, di setiap elemen tingkat pertama ada elemen dn tingkat kedua, yang berisi DN lengkap dari objek ini - ini akan sangat berguna bagi kami di masa mendatang. Array keluaran jauh lebih sederhana, satu elemen ditampilkan di Listing 8. Di sini, saya sengaja menggunakan objek data non-ASCII untuk menunjukkan bahwa data telah dikodekan ulang.

Listing 8. Sebuah elemen dari larik keluaran.
=> array (2) (["cn"] => string (11) "Hanya Pengguna" ["samaccountname"] => string (10) "prostouser")

Mengapa input dan output dari fungsi ini begitu detail? Karena sebenarnya, semua pekerjaan skrip utama (yang akan dibahas di bagian artikel selanjutnya) akan dikurangi untuk mempersiapkan panggilannya dan pemrosesan selanjutnya dari array yang dibentuk olehnya.

Kesimpulan

Seperti yang Anda lihat dari artikel ini, PHP sangat menyederhanakan pekerjaan dengan server LDAP, memungkinkan Anda untuk meninggalkan konstruksi marah yang terkait dengan penyimpanan data dalam file sementara, menggantinya dengan representasi array yang jauh lebih nyaman di memori, memungkinkan Anda untuk mengode ulang ke halaman kode lain dengan cepat, dan membuatnya lebih mudah untuk men-debug skrip.

Di bagian ini, Anda "akan mempelajari cara mencari dan mengambil data dari server direktori, serta menambah, mengubah, dan menghapus entri.

ldap_search ()

resource ldap_search (pengidentifikasi link_sumber daya, string base_dn, filter string [, atribut array [, int attrsonly [, int sizelimit [, int timelimit [, int deref]]]]])
Fungsi ldap_search () menawarkan cara yang ampuh untuk mencari server direktori yang ditunjuk oleh link_identifier. Ini akan mencari ke kedalaman LDAP_SCOPE_SUBTREE, nilai yang dapat diatur melalui fungsi yang diperkenalkan sebelumnya ldap_set_option(). Secara default, nilai ini diatur untuk mencari ke kedalaman tak terbatas, atau melalui seluruh cakupan pohon seperti yang didefinisikan oleh base_dn. Filter pencarian, setara dengan kueri database relasional, diteruskan melalui parameter filter. Terakhir, Anda dapat menentukan dengan tepat atribut mana yang harus dikembalikan dalam hasil pencarian melalui parameter atribut. Empat parameter yang tersisa adalah opsional, dan oleh karena itu demi kepentingan ruang, saya "akan menyerahkannya sebagai latihan kepada Anda untuk mempelajari lebih lanjut tentang mereka. Mari kita pertimbangkan sebuah contoh:

";) ldap_unbind ($ iklan);?> Contoh hasil mengikuti: Gilmore, Jason (Columbus) Shoberg, Jon (Columbus) Streicher, Martin (San Francisco) Wade, Matt (Orlando)

Sebagian besar kemungkinannya mudah, kecuali cara yang berpotensi aneh di mana nilai atribut direferensikan. Semua baris atribut pada akhirnya adalah array multi-dimensi, dengan setiap nilai atribut direferensikan oleh kombinasi nomor baris, nama atribut, dan indeks array atribut. Jadi, misalnya, bahkan atribut seperti "sn", nama atribut untuk nama belakang pengguna "s, adalah array yang diindeks.

ldap_mod_add()

boolean ldap_mod_add (sumber link_id, string dn, entri array)
Menambahkan entri ke server direktori dilakukan melalui fungsi ldap_mod_add(). Entri baru ditambahkan hanya dengan membuat larik yang terdiri dari pemetaan atribut / nilai yang dimaksudkan untuk membentuk baris baru. Proses ini mungkin paling baik dijelaskan dengan sebuah contoh:

Seperti halnya semua tugas server direktori, pastikan bahwa pengguna yang mengikat memiliki izin yang tepat untuk menambahkan data target; jika tidak, kesalahan akan terjadi.

ldap_mod_replace()

boolean ldap_mod_replace (resource link_id, string dn, entri array)
Memodifikasi atribut entri dilakukan melalui fungsi ldap_mod_replace(). Ini beroperasi persis seperti ldap_add (), simpan untuk langkah tambahan untuk mengidentifikasi entri yang ingin Anda ubah. Ini dilakukan dengan menunjuk ke dn yang sangat spesifik. Seperti ldap_add (), pengidentifikasi tautan yang valid dan larik yang terdiri dari entri yang ingin Anda perbarui harus disediakan. Sebuah contoh berikut, menunjukkan bagaimana nomor telepon pengguna akan diubah. Secara khusus, perhatikan DN yang sangat spesifik (menunjuk ke entri khusus saya).

Seperti halnya dengan semua tugas server direktori, pastikan bahwa pengguna yang mengikat memiliki izin yang tepat untuk mengubah data target; jika tidak, kesalahan tak terduga akan terjadi.

ldap_hapus ()

boolean ldap_delete (sumber link_id, string dn)
Mengakhiri survei kami tentang fungsi utama PHP LDAP adalah ldap_delete (). Fungsi ini digunakan untuk menghapus entri yang ada. Seperti ldap_mod_replace(), DN yang sangat spesifik harus disediakan untuk melakukan penghapusan. Contoh berikut menunjukkan cara menghapus entri pengguna "Jason Gilmore" dari Active Directory:

Seperti halnya dengan semua tugas server direktori, pastikan bahwa pengguna yang mengikat memiliki izin yang tepat untuk menghapus data target; jika tidak, kesalahan tak terduga akan terjadi.

Mencari Direktori Aktif melalui Web

Saya selalu ingin melengkapi tutorial dengan contoh yang dapat diterapkan sehingga pembaca dapat segera beradaptasi dengan kebutuhan mereka sendiri. Dalam tutorial ini, saya "akan menunjukkan cara membuat antarmuka pencarian yang mampu mencari berdasarkan nama, lokasi, atau nomor telepon. Yang perlu Anda lakukan hanyalah memodifikasi variabel koneksi dan DN dasar. Untuk memulai, mari "s membuat antarmuka pencarian, yang akan disimpan sebagai" search.html ":

Kriteria pencarian:

Saring:

Gambar 1 menawarkan contoh seperti apa bentuk pencarian ini di browser.

Gambar 1. Formulir Pencarian Direktori Aktif

Selanjutnya, kita "harus membuat logika yang mempengaruhi pencarian. Kode singkat ini ditampilkan di sini:

0) (untuk ($ i = 0; $ i<$entries["count"]; $i++) { echo "

Nama: ". $ Entri [$ i] [" nama tampilan "]."
"; echo" Telepon: ". $ entri [$ i] [" nomor telepon "]."
"; echo" Email: ". $ entri [$ i] [" email "]."

";)) lain (gema"

Tidak ada hasil yang ditemukan!

";) ldap_unbind ($ iklan);?>

Anda dapat mengubah tujuan tindakan yang ditentukan dalam antarmuka pencarian, mengarahkannya ke file yang terdiri dari skrip di atas, atau Anda dapat menggabungkannya ke dalam file yang sama dengan antarmuka pencarian, dan menggunakan isset () dan kondisi if untuk memicu eksekusi jika tombol kirim pencarian ditekan. Tentu saja, Anda ingin menambahkan beberapa kriteria validasi data tambahan sebelum menerapkan skrip semacam itu. Gambar 2 menawarkan contoh hasil pencarian.

Cara menggunakan php ldap_connect

Gambar 2. Hasil Pencarian

Kesimpulan

Meskipun PHP telah lama menjadi bahasa utama saya untuk mengembangkan aplikasi Web, saya "telah menemukan Perl menjadi bagian integral dari toolkit programmer saya". Saat bekerja dengan server direktori, sentimen ini tidak berbeda. Oleh karena itu, artikel selanjutnya dikhususkan untuk dasar-dasar Perl/LDAP. Seperti halnya dengan artikel ini, semua contoh khusus untuk Microsoft "s Active Directory, meskipun Anda harus dapat dengan mudah menerapkannya ke implementasi server direktori mana pun. Kami akan melengkapi artikel itu dengan contoh yang menunjukkan cara membuat cache statis Direktori pengguna berbasis web menggunakan skrip Perl dan CRON (atau Penjadwal Tugas Windows).

Saya menyambut pertanyaan dan komentar! Email saya di [dilindungi email]... Saya juga ingin mendengar lebih banyak tentang pengalaman Anda mengintegrasikan teknologi Microsoft dan Open Source!

tentang Penulis

W. Jason Gilmore (http://www.wjgilmore.com/) adalah pengembang aplikasi Internet untuk Fisher College of Business. Dia "penulis buku yang akan datang, PHP 5 dan MySQL: Novice to Pro, yang diterbitkan oleh Apress pada tahun 2004. Karyanya telah ditampilkan dalam banyak publikasi terkemuka industri komputasi, termasuk Majalah Linux, O "Reillynet, Devshed, Zend.com, dan Webreview. Jason juga penulis Pengantar PHP 4.0 (453pp., Apress). Bersama rekannya Jon Shoberg, dia "rekan penulis" Out in the Open, "kolom bulanan yang diterbitkan dalam majalah Linux.