การเขียนโปรแกรมภาษา PHP เชื่อมต่อกับ LDAP SERVER(1)

 สมมุติว่าทุกๆท่านรู้จัก LDAP แล้วนะครับ 

ก่อนอื่น สมมุติว่าทุกๆท่านรู้จัก LDAP Server กันแล้วนะครับว่าคืออะไร ใช้ยังไง

ตอนแรกต้องทดสอบก่อนว่า Server เราสามารถใช้ LDAP extension ได้ไหม

วิธีทดสอบมี 3 วิธีคือ

1. สร้างแฟ้มสำหรับแสดงรายละเอียดของ php สมมุติชื่อ phpinfo.php

phpinfo();

สร้างเสร็จแล้ว ก้เรียกใช้ ผ่าน Browser อะไรก็ได้ มองหาตารางคล้ายๆกับตารางนี้

ldap
LDAP Support enabled
RCS Version $Id: ldap.c,v 1.154.2.7 2005/07/09 01:00:11 sniper Exp $
Total Links 0/unlimited
API Version 2004
Vendor Name OpenLDAP
Vendor Version 20129

ถ้าสามารถหาเจอ และตรง LDAP Support เขียนว่า enabled ก็แปลว่า Server คุณสามารถใช้ ldap ได้

2. สร้างแฟ้มสำหรับเรียกใชโดยตรง เช่น test1.php

ldap_connect(‘localhost’);

ถ้ามันขึ้นแบบนี้

Fatal error: Call to undefined function: ldap_connect () in /XXXX/i.php on line 2

ก็แปลว่าเครื่องคุณไม่สามารถใช้ ldap ได้

3. สร้างแฟ้มสำหรับทดสอบ function โดยเฉพาะ เช่น test_function.php

alert('สามารถใช้ Function $function ได้');

$function=$_POST["function"];
if($function){
  if(function_exists($function)){
   echo"Funtion นี้ใช้ได้
"
;
  }else{
   echo"Funtion นี้ใช้ไม่ได้
"
;
  }
}

 

คราวนี้สมมุติว่าเครื่องคุณใช้ ldap ไม่ได้ ก็ต้องคอมไพล์ php กันใหม่ครับ ให้ใช้ –with-ldap ด้วยนะครับ

คราวนี้สมมุติว่าเครื่องคุณใช้ ldap ได้

ขั้นตอนมันก็ไม่มีอะไรมาก

จะสามารถแบ่งได้ 3 ขั้นตอนคือ (อันนี้ผมแบ่งเองนะครับ)

1. ติดต่อกับ LDAP Server

ตอนแรกก็ติดต่อกับ LDAP Server ก่อนนะครับ

$ds=ldap_connect(‘localhost’,’389’)

ตรง localhost ให้เปลี่ยนเป็น ip หรือชื่อเครื่อง Server ถ้า LAP Server เป็นเครื่องอื่น และ port ปกติ

ของ LDAP คือ 389 ครับ ตรงนี้ไม่ต้องใสก็ได้ ก็เป็น

ldap_connect(‘localhost’)

หลังจากติดต่อได้แล้วก็ต้องแสดงว่าใครคือผู้ติดต่อโดยใช้คำสั่งนี้ครับ

ldapbind = ldap_bind($ds, $binddn, $password);

ส่วนนี้อาจจะพูดได้ว่าเป็นการ Login หรือการ ตรวจสอบการ Login ก็ได้ครับ ซึ่งผมเองได้เขียน

Function สำหรับการตรวจสอบ Login ดังตัวอย่างครับ

function ldap_login($ds,$username,$password,$ou,$suffix){
    $i=
0;
    while(
1){
        $binddn = "uid=$username,ou=".$ou[$i].",".$suffix;
        @$ldapbind = ldap_bind($ds, $binddn, $password);
        if ($ldapbind){
            return true;
            break;
        }else{
            if($i==
3){
                ldap_close($ds);
                return false;
                break;
            }
        }
        $i++;
   }
}

เวลาจะใช้ก็

$ou = array("student","staff","unistaff");
$suffix_string = "dc=psu,dc=pn";
if(ldap_login($ds,$USER,$PASSWORD,$ou,$suffix_string)){
    echo”
สวัสดีครับ”;
}else{
    echo”User
หรือ Password ผิด”;
}

2. การทำงาน คราวนี้คุณจะทำอะไรก็ได้แล้วแต่คุณนะครับ

แต่ที่ผมจะแนะนำก็มี 4 อย่าง คือ การ เพิ่ม การ ลบ การแก้ไข และการค้นหา User

2.1 การ เพิ่ม User ใช้คำสั่ง ldap_add ครับ ดังตัวอย่าง

$info["cn"]=”Mr.Patt Emmawat”;
$info["sn"]=Patt;
$info["ou"]="student";
$info["mail"]=s
4145217@remove.mor-or.pn.psu.ac.th";
$info["objectclass"][
0]="top";
$info["objectclass"][
1]="person";
$info["objectclass"][
2]="inetOrgPerson";
$info["objectclass"][
3]="organizationalPerson";
$info["objectclass"][
4]="posixAccount";
$info["objectclass"][
5]="shadowAccount";
$info["uidNumber"]=
1000;// ใน linux คือ uid หรือ หมายเลขประจำตัวของ user
$info["uid"]=”s
4145217”;// คือ ส่วนของ User Name
$info["gidNumber"]="
1000"; // ใน linux คือ gid หรือ หมายเลขประจำตัวของ group
$info["homeDirectory"]="/home/s
4145217;
$info["loginShell"]="/bin/sh";
$pwd=md
5(“s4145217”);
info["userPassword"]=$pwd[rand(
0,31)].$pwd[rand(0,31)].$pwd[rand(0,31)].$pwd[rand(0,31)].$pwd[rand(0,31)]; // Password ของ User
$r=ldap_add($ds, "uid=s
4145217,ou=student,dc=oasitzone,dc=pn", $info);

2.2 การค้นหา User ที่ต้องพุดก่อน เพราะว่า มันใช้การ ลบ และแก้ไข User ด้วยครับ (อำนวยความสะดวก เพราะ ผมเองก็ไม่จำหรอกครับ ว่า มี Ou กะ DN อะไรบ้าง จำแต่ว่ามี User อะไรบ้างก็พอ)

การ เพิ่ม การลบ การแก้ไข User เวลาใช้ ldap_bind ต้องใช้ User พิเศษ ครับ ให้ดูใช้ /slapd.conf

ส่วนของ rootdn และ rootpw

แต่การ ค้นหา ให้ใช้ แค่ dn ก็พอครับ (user+ou+suffix)

$sr=ldap_search($ds, "dc=oasitzone,dc=pn", "uid=".$login."",$justthese);
$info = ldap_get_entries($ds, $sr);
print_r($info[
0])

การค้นหาแบบนี้จะเป็นการดึงข้อมูลของ User ทั้งหมดมา ถ้าเราต้องการแบ่งบางส่วนให้แก้ไขดังนี้

$justthese = array("dn","cn","uid"); //ต้องการอะไรก็ใส่เข้าไป
$sr=ldap_search($ds, "dc=oasitzone,dc=pn", "uid=s4145217",$justthese);
$info
1 = ldap_get_entries($ds, $sr);
print_r($info[
0])

2.3 การลบ User

$sr=ldap_search($ds, "dc=oasitzone,dc=pn", "uid=s4145217");
$info = ldap_get_entries($ds, $sr);
$r=ldap_delete($ds,$info
1[0]["dn"]);

2.4 การแก้ไข User

$sr=ldap_search($ds, "dc=oasitzone,dc=pn", "uid="s4145217"”);
$info
1 = ldap_get_entries($ds, $sr);
$info["userPassword"]=$_POST['userPassword'];
ldap_modify($ds, $info
1[0]["dn"], $info);


3. ยุติการเชื่อมต่อ ง่ายๆสั้นๆ ldap_close($ds)

บันทึกนี้เขียนที่ GotoKnow โดย 

 คำสำคัญ: opensource php ldap 
 หมายเลขบันทึก: 6365
 เขียน:  
 ความเห็น:  อ่าน: คลิก 
 สัญญาอนุญาต: สงวนสิทธิ์ทุกประการ
 แจ้งลบ
 
 แจ้งลบ

ความเห็น

สาว
IP: xxx.12.74.8
เขียนเมื่อ Wed Jan 04 2006 21:15:22 GMT+0700 (ICT)

งงกับขั้นตอนการใช้ ldapbind
ldapbind  ก็เหมือนกับเรา login เข้าใช้เครื่องธรรมดาใช้ไหม
แต่ถ้าเราใช้ rootdn กับ rootpw ก็เหมือนกับเราเข้าไปในฐานะ root ใช้ไหม

e-than
IP: xxx.147.74.4
เขียนเมื่อ Sun Jan 13 2008 10:57:57 GMT+0700 (ICT)

ผมลองทำ ดู แล้ว

มัน login ได้ครับ และ เมื่อ logout ออก แล้ว

พอจะ login อีกครั้ง login ไม่ได้เลย ไม่ว่าจะเป็น username ใดๆ ก้ตาม รวมถึง การจะเข้าไป check username ใหม่ ก้ไม่สามารถทำงานได้

เป็นเพราะ รัยครับ

สายลมแสงแดด
เขียนเมื่อ Mon Jan 14 2008 09:10:32 GMT+0700 (ICT)
ลองตรวจสอบตัวแปรทุกตัวดูครับว่าค่ามันเปลี่ยนไปหรือไม่
Aziin
IP: xxx.151.232.70
เขียนเมื่อ Tue Jun 17 2008 09:31:19 GMT+0700 (ICT)

ldap_modify ใช้ยังไงครับ งงง

สายลมแสงแดด
เขียนเมื่อ Tue Jun 17 2008 11:03:23 GMT+0700 (ICT)

$sr=ldap_search($ds, "dc=oasitzone,dc=pn", "uid="s4145217"”);

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

$info["userPassword"]=$_POST['userPassword'];

ldap_modify($ds, $info1[0]["dn"], $info);

คุณต้องเตรียมข้อมูลก่อนครับ ว่าจัแก้ไขอะไร

ตัวอย่างเป็นการแก้ไข Password

แล้วใช้คำสั่ง ldap_modify โดยใช้ dn ของ user

 อนุญาตให้แสดงความเห็นได้เฉพาะสมาชิก
 ไม่อนุญาตให้แสดงความเห็น
{{ kv.current_user.preferred_name }} - เพิ่มความเห็นเพิ่มความเห็น
 ใส่รูปหรือไฟล์
 
บันทึกก่อนนี้
บันทึกใหม่กว่า