Jump to content


Windows Server 2012

- - - - -

การใช้ PHP ตรวจสอบ username และ password


  • Please log in to reply
19 replies to this topic

#1 Pam

Pam

    Newbie

  • Members
  • Pip
  • 9 posts

Posted 01 June 2005 - 09:56 AM

การใช้ PHP ตรวจสอบ username และ password โดยผ่านทาง Active Directory ของ windows  ไม่ทราบว่าผู้รู้ทั้งหลายพอจะมีวิธี หรือมีความเป็นไปได้รึเปล่าที่จะตรวจสอบในลักษณะนี้คะ
รบกวนช่วยหน่อยนะคะ

#2 Patrickz

Patrickz

    Topgun

  • Topgun
  • 2627 posts

Posted 01 June 2005 - 11:09 AM

PHP มี LDAP Functions ให้ใช้ครับ

อ่าน

LIX. LDAP Functions

Integrating Active Directory with PHP

PHP, Active Directory and LDAP Referrals

#3 Patrickz

Patrickz

    Topgun

  • Topgun
  • 2627 posts

Posted 01 June 2005 - 11:12 AM

ตัวอย่างการค้นหาด้วย LDAP  ขออนุญาติยกมา เพื่อความสะดวกครับ

<?php
// basic sequence with LDAP is connect, bind, search, interpret search
// result, close connection

echo "<h3>LDAP query test</h3>";
echo "Connecting ...";
$ds=ldap_connect("localhost");  // must be a valid LDAP server!
echo "connect result is " . $ds . "<br />";

if ($ds) { 
   echo "Binding ..."; 
   $r=ldap_bind($ds);    // this is an "anonymous" bind, typically
                           // read-only access
   echo "Bind result is " . $r . "<br />";

   echo "Searching for (sn=S*) ...";
   // Search surname entry
   $sr=ldap_search($ds, "o=My Company, c=US", "sn=S*");  
   echo "Search result is " . $sr . "<br />";

   echo "Number of entires returned is " . ldap_count_entries($ds, $sr) . "<br />";

   echo "Getting entries ...<p>";
   $info = ldap_get_entries($ds, $sr);
   echo "Data for " . $info["count"] . " items returned:<p>";

   for ($i=0; $i<$info["count"]; $i++) {
       echo "dn is: " . $info[$i]["dn"] . "<br />";
       echo "first cn entry is: " . $info[$i]["cn"][0] . "<br />";
       echo "first email entry is: " . $info[$i]["mail"][0] . "<br /><hr />";
   }

   echo "Closing connection";
   ldap_close($ds);

} else {
   echo "<h4>Unable to connect to LDAP server</h4>";
}
?>


#4 Patrickz

Patrickz

    Topgun

  • Topgun
  • 2627 posts

Posted 01 June 2005 - 11:22 AM

อีกตัวอย่างหนึ่ง สำหรับแก้ไข password ผ่าน php
$uid = 'accountCN'; 
$newPassword = 'newpassword'; 
$bindDn = 'BindDN'; 
$bindPassword = 'BindPass'; 
$baseDn = 'dc=mysite,dc=com'; 
$protocolVersion = 3; 

$ldap = ldap_connect('localhost'); 
if (!ldap_set_option($ldap, LDAP_OPT_PROTOCOL_VERSION, $protocolVersion)) 
{ 
    exit('Failed to set protocol version to '.$protocolVersion); 
} 
// bind anonymously so that we can verify if the server really is running 
ldap_bind($ldap); 
if (ldap_errno($ldap) !== 0) 
{ 
    exit('Could not connect to LDAP server'); 
} 

// now bind with the correct username and password 
ldap_bind($ldap, $bindDn, $bindPassword); 
if (ldap_errno($ldap) !== 0) 
{ 
    exit('ERROR: '.ldap_error($ldap)); 
} 

$searchResults = ldap_search($ldap, $baseDn, 'cn='.$uid); 
// no matching records 
if ($searchResults === false) 
{ 
    exit('No user found'); 
} 

if (!is_resource($searchResults)) 
{ 
    exit('Error in search results.'); 
} 

// create the unicode password 
$len = strlen($newPassword); 
$newPass = '"'; 
for ($i = 0; $i < $len; $i++) 
{ 
    $newPass .= "{$newPassword{$i}}\000"; 
} 
$newPass .= '"'; 

$entry = ldap_first_entry($ldap, $searchResults); 
if (!is_resource($entry)) 
{ 
    exit('Couldn\'t get entry'); 
} 
$userDn = ldap_get_dn($ldap, $entry); 

ldap_modify($ldap, $userDn, array('unicodePwd' => $newPass));
เขียนโดย Viper_SB



ส่วนอันนี้ เอาไว้สำหรับตรวจสอบ U/P อย่างที่คุณ Pam ต้องการ

<?php session_start(); ?> 

<?php 

    // disable error reporting 
    error_reporting(1); 
     
    // check form has been correctly completed 
    if($_POST["user"]=="" || $_POST["pass"]=="") 
    { 
            printf("Authentication required"); 
            session_destroy(); 
            exit(); 
    } 
     
    // initalize some variables 
    $server = "localhost"; 
    $user = $_POST["user"]."@company.co.uk"; 
    $pass = $_POST["pass"]; 
     
    // let other pages know this user is authenticated 
    $_SESSION["user"] = $user; 
    $_SESSION["pass"] = $pass; 
     
    // connect to active directory 
    $ad = ldap_connect($server); 
    if(!$ad) 
        die("Connect not connect to ".$server); 
         
    // try our username/pass 
    $b = ldap_bind($ad,$user,$pass); 
    if(!$b) 
        die("Invalid user name and password"); 

    // if we get here the user/pass is ok, disconnect from AD 
    //ldap_unbind($ad); 


    printf("<BR>You are now authenticated under ".$_SESSION["user"]);
เขียนโดย Jock3h^

ก็ที่เหลือตามไปอ่านกันได้ที่  thread  Modifying Active Directory passwords through PHP and IIS  พูดกันหลากหลายประเด็นมาก  มีตัวอย่างที่นั้นเยอะแยะครับ

ถ้ายังไม่หน่ำใจ ลองดูใน LDAP Programming ของ Dev Shed Forums

#5 Patrickz

Patrickz

    Topgun

  • Topgun
  • 2627 posts

Posted 01 June 2005 - 11:23 AM

ฝากอีกอันครับ  เป็น OpenSource  PHP Class ที่ชื่อว่า adLDAP (LDAP Authentication with PHP for Active Directory)  ใช้ง่านง่ายๆ ดังนี้
<?php
//include the class
require_once("adLDAP.php");

//create the LDAP connection
$adldap = new adLDAP();

//variables, change these :)
$user="username";
$pass="password";

$userlookup = "another_username";
$group="group_name";

//authenticate a user
if ($adldap -> authenticate($user,$pass)){

	echo ("Authenticated ok!<br><br>\n");
	
	// User Information
	$info=$adldap->user_info($userlookup,$fields);
	echo "User Information:";
	echo ("<pre>"); print_r($info); echo ("</pre>\n");
	
	// Users's Groups
	$info=$adldap->user_groups($userlookup);
	echo "User's Groups: (". count($info) ."):";
	echo ("<pre>"); print_r($info); echo ("</pre>\n");

	// All Users
	$info = $adldap->all_users(true);
	echo "All Users: (". count($info) .")";
	echo "<pre>"; print_r($info); echo "</pre>\n";
	
	// All Groups
	$info = $adldap->all_groups(true);
	echo "All Groups: (". count($info) ."):";
	echo "<pre>"; print_r($info); echo "</pre>\n";

	//check to see if they're a member of a group
	if ($adldap -> user_ingroup($userlookup,$group)){
  echo ("SUCCESS! User is a member of group: ".$group);
	} else {
  echo ("FAILED! User is not a member of group: ".$group);
	}

} else {

	echo ("Authentication failed!");
}

?>


#6 Pam

Pam

    Newbie

  • Members
  • Pip
  • 9 posts

Posted 01 June 2005 - 01:40 PM

ขอบคุณมากๆคะ แต่มันใช้ได้กับwindows หรือ Linux  คะ
พอดี Pam เพิ่งศึกษาได้ไม่นานนี้คะ พอดีอยากลองทำระบบเพื่อเพิ่มความรู้นะคะ
ถ้าไม่เป็นการรบกวนจะเข้ามาถามบ่อยๆ

#7 Pam

Pam

    Newbie

  • Members
  • Pip
  • 9 posts

Posted 01 June 2005 - 01:51 PM

โทษทีคะ LDAP มันคืออะไรคะแล้วต้องลงอย่างไรค่ะ ช่วยอธิบายหรือส่ง link มาก้อได้คะ
คือ Pam หาข้อมูลมาแต่ยังหาไม่เจอว่ามันคืออะไรเลยคะ

#8 Patrickz

Patrickz

    Topgun

  • Topgun
  • 2627 posts

Posted 01 June 2005 - 03:11 PM

Quote

โดยผ่านทาง Active Directory ของ windows ....
ขอบคุณมากๆคะ แต่มันใช้ได้กับwindows หรือ Linux คะ
ก็ต้องใช้กับ Windows สิครับ


Quote

โทษทีคะ LDAP มันคืออะไรคะแล้วต้องลงอย่างไรค่ะ ช่วยอธิบายหรือส่ง link มาก้อได้คะ
ผมได้แนะนำ Link  LIX. LDAP Functions ไว้เป็นอันแรกเลย เนื่องจากมันสรุปได้ดีมากๆ  และน่าจะลองติดตาม links ที่เหลืออย่างครบถ้วนนะครับ

LDAP is the Lightweight Directory Access Protocol, and is a protocol used to access "Directory Servers". The Directory is a special kind of database that holds information in a tree structure.

บน Windows ก็มี Directory Servers  เรียกว่า Active Directory   ฝั่ง J2EE ก็มีบริการนี้ เรียกกว่า JNDI ( J2EE Naming and Directory Services)  
Posted Image


อ่าน
Microsoft Active Directory (Introduction to Active Directory)
Openldap  อันนี้ Directory Service แบบ Opensource

อ้างอิง
RFC 2251 - Lightweight Directory Access Protocol (v3)

#9 Pam

Pam

    Newbie

  • Members
  • Pip
  • 9 posts

Posted 02 June 2005 - 11:27 AM

คือว่า Pam พยายามอ่านทำความเข้าใจแล้วนะคะ  แต่ Pam ไม่เก่งภาษาเท่าไหร่และไม่ได้จบทางคอมพิวเตอร์โดยตรงนะคะ ศัพท์บางคำเป็นศัพท์เฉพาะก็เลยไม่เข้าใจบ้างนะคะ
ถ้าไม่รบกวนจนเกินไป แพมอยากจะถามคะว่า
1. แพมใช้ Windows 2000 sever แล้วแพมต้องลง OpenLDAP ด้วยใช่ไหม
2. อยากทราบวิธีการลง  บน Windows แบบเป็นขั้นตอนนะคะ  คือที่อ่าน เพื่อนบอกว่าเหมือนเป็นคำสั่งใน
  Linux เลยคะ(Pam ใช้ Linux ไม่เป็นหรอกคะ) อยากจะทดลองใช้ดูคะ ไล่โค๊ดมันแล้วไม่เข้าใจเลย
3. แพมพอใช้ PHP แบบพื้นๆถึงปานกลาง แต่เรื่องนี้มัน ยากเกินไปรึป่าวคะเนี่ย
4 ถ้าอยากจะเก่ง PHP จะต้องศึกษาจากอะไร อย่างไรดีคะ

ไม่รู้ถามเยอะเกินไปรึเปล่า ถ้าไม่เหลือบ่ากว่าแรงช่วยตอบด้วยนะคะ

#10 Bomber

Bomber

    Topgun

  • Topgun
  • 2321 posts

Posted 02 June 2005 - 01:12 PM

Pam, on Jun 2 2005, 11:27 AM, said:

1. แพมใช้ Windows 2000 sever แล้วแพมต้องลง OpenLDAP ด้วยใช่ไหม
ไม่ต้องครับ ตัว Active Directory นั่นแหละครับ LDAP Server  จริงๆก็ไม่ถูกนักแต่เริ่มต้นเข้าใจว่ามันคือตัวเดียวกันจะง่ายกว่า สรุปคือไม่ต้องลง OpenLDAP ครับ คุณใช้ Active Directory ได้เลย โดย

$ds=ldap_connect("localhost");  // must be a valid LDAP server!

ตรง localhost ก็เปลี่ยนเป็นชื่อของ Server เช่น Server ที่มี Active Directory อยู่มี IP เป็น 10.1.1.1 ก็เอา IP ไปใส่แทน localhost ครับ เท่านั้นก็ connect ได้แล้ว

#11 Pam

Pam

    Newbie

  • Members
  • Pip
  • 9 posts

Posted 02 June 2005 - 02:41 PM

คือมันฟ้องว่า             Fatal error: Call to undefined function: ldap_connect() in c:\appserv\www\booking\ldap.php on line 29

อยากทราบว่าต้องใช้ PHP version อะไร คะ หรือ ต้อง set อะไรเพิ่มเติมไหมคะ
ที่แพม ลงคือ  appserv-win32-1.8.0  น่าจะเป็น PHP ver 4.2.3 คะ  
นี่Code คะ

<?php session_start(); ?>

<?php

   // disable error reporting
   error_reporting(1);
    
   // check form has been correctly completed
          /* if($_POST["user"]=="" || $_POST["pass"]=="")
          {
             printf("Authentication required");
              session_destroy();
               exit();
           } */
    
   $server = "10.66.2.58";
   $user = "chatuporn";
   $pass = "123";
    
   // let other pages know this user is authenticated
   $_SESSION["user"] = $user;
   $_SESSION["pass"] = $pass;
    
   // connect to active directory
   $ad = ldap_connect($server);
   if(!$ad)
       die("Connect not connect to ".$server);
        
   // try our username/pass
   $b = ldap_bind($ad,$user,$pass);
   if(!$B)
       die("Invalid user name and password");

   // if we get here the user/pass is ok, disconnect from AD
   //ldap_unbind($ad);


   printf("<BR>You are now authenticated under ".$_SESSION["user"]);
   ?>

Edited by Pam, 02 June 2005 - 03:44 PM.


#12 Patrickz

Patrickz

    Topgun

  • Topgun
  • 2627 posts

Posted 02 June 2005 - 05:17 PM

undefined function  หมายถึง php ไม่เจอ function นี้ครับ เพราะคุณยังไม่ได้ unable ldap module

Installation
........
Note to Win32 Users: In order to enable this module on a Windows environment, you must copy several files from the DLL folder of the PHP/Win32 binary package to the SYSTEM folder of your windows machine. (Ex: C:\WINNT\SYSTEM32, or C:\WINDOWS\SYSTEM). For PHP <= 4.2.0 copy libsasl.dll, for PHP >= 4.3.0 copy libeay32.dll and ssleay32.dll to your SYSTEM folder.

#13 Pam

Pam

    Newbie

  • Members
  • Pip
  • 9 posts

Posted 03 June 2005 - 09:40 AM

ตอนนี้ Pam ใช้เครื่องที่ run program เป็นwindows xp ซึ่ง pam ได้ copy file
libeay32.dll และ ssleay32 ลงใน  C:\WINDOWS\SYSTEM ก็ยังฟ้อง error เหมือนเดิม
แล้วก็เลย ลอง copy file ไปยัง C:\WINDOWS\SYSTEM32 ก็ยังไม่ได้อีกคะ

แล้วลองไปหา file   php.ini ที่จะ config ตัวข้างล่างนี้ก็ไม่เจอคะ   ตอนนี้งงมากเลยคะ
Table 1. LDAP configuration options

ldap.max_links "-1" PHP_INI_SYSTEM  


ขอบคุณนะคะที่ช่วยมาตลลอด

#14 scorpio

scorpio

    Staff

  • Staff
  • 722 posts

Posted 03 June 2005 - 11:03 AM

Pam, on Jun 3 2005, 02:40 AM, said:

แล้วลองไปหา file   php.ini ที่จะ config ตัวข้างล่างนี้ก็ไม่เจอคะ   ตอนนี้งงมากเลยคะ
Table 1. LDAP configuration options

<{POST_SNAPBACK}>


ผมคิดว่า ตัวอย่างที่คุณ spidix เคยตอบไว้ที่ กระทู้หมายเลข 5706 น่าจะเป็นแนวทางได้ครับ

#15 Pam

Pam

    Newbie

  • Members
  • Pip
  • 9 posts

Posted 03 June 2005 - 01:49 PM

ขอบคุณทุกๆคำตอบนะคะ
คือตอนนี้ pam ใช้ เครื่อง PC เป็นมี Windows เป็น OS แล้วลง Apache/1.3.24
แล้วในบริษัท มีเครื่องที่เป็น  Windows 2000 Server ที่เวลาเราเข้าใช้งานมันต้องไป check กลับตัวนี้นะคะ (Active Directory) ซึ่งมันจะเก็บ username กับ passwordของทุกคนในบริษัท
คือหัวหน้าฝ่าย IT เค้าอยากได้ระบบๆหนึ่งที่ต้องผ่านการ Check username กับ password กับตัวนี้ก่อนแล้วจึงเข้าใช้ระบบได้นะคะ คือ Pamอยากรับทำตัว(รายได้พิเศษนะคะ)นี้ แต่ก็ไม่ได้ซักที
อยากทราบว่า Pam ต้องมีอะไรเพิ่มเติมไหมคะเพราะว่าลองทำตามทุกๆคำตอบแล้วไม่ได้ซักกะที เริ่มจะท้อแล้วคะ




0 user(s) are reading this topic

0 members, 0 guests, 0 anonymous users