トップ 差分 一覧 ソース 置換 検索 ヘルプ PDF RSS ログイン

PHPでActive Directory を用いた認証

 必要なもの

php.ini にて php_ldap.dll を有効にする (コメントアウトをやめる)

 サンプル

ADから情報取得

 <?php
   $ldaphost = 'vmware.local';
   $ldapport = 389;
   
   $ldapconn = ldap_connect($ldaphost, $ldapport) 
   or die('Unabled to connect to the server');
   
   if($ldapconn){
     ldap_set_option ($ldapconn, LDAP_OPT_REFERRALS, 0);
     ldap_set_option($ldapconn, LDAP_OPT_PROTOCOL_VERSION, 3);
     $ldapbind = ldap_bind($ldapconn, 'user@vmware.local', 'pass');
     if($ldapbind){
       echo 'LDAP bind succeeded'."\n";
       $sr=ldap_search($ldapconn, 'DC=vmware,DC=local', '(sAMAccountName=user)');
       echo "Search result is " . $sr . "<br />";
       
       echo "Number of entires returned is " . ldap_count_entries($ldapconn, $sr) . "<br />";
       
       print_r( ldap_get_entries($ldapconn,$sr));
     }
     else{
       echo 'LDAP bind failed.'."\n";
     }
     
     $ldapunbind = ldap_unbind($ldapconn);
     if ($ldapunbind) {
       echo "LDAP unbind succeeded"."\n";
     } else {
       echo 'LDAP undbind failed.'."\n";
     }
   }
   else{
     echo 'LDAP connect failed.';
   }
 ?>

ldapサーバから情報酒盗

 <?php
   $ldaphost = 'ldap.server';
   $ldapport = 389;
   
   $ldapconn = ldap_connect($ldaphost, $ldapport) 
   or die('Unabled to connect to the server');
   
   if($ldapconn){
     $ldapbind = ldap_bind($ldapconn);
     if($ldapbind){
       echo 'LDAP bind succeeded'."\n";
       // $sr=ldap_search($ldapconn, 'c=jp', '(objectclass=*)');
       
       ldap_set_option ($ldapconn, LDAP_OPT_REFERRALS, 0);
       ldap_set_option($ldapconn, LDAP_OPT_PROTOCOL_VERSION, 3);
       $sr=ldap_search($ldapconn, 'c=jp', '(uid=hoge)');
       echo "Search result is " . $sr . "<br />";
       
       echo "Number of entires returned is " . ldap_count_entries($ldapconn, $sr) . "<br />";
       
       print_r( ldap_get_entries($ldapconn,$sr));
     }
     else{
       echo 'LDAP bind failed.'."\n";
     }
     
     $ldapunbind = ldap_unbind($ldapconn);
     if ($ldapunbind) {
       echo "LDAP unbind succeeded"."\n";
     } else {
       echo 'LDAP undbind failed.'."\n";
     }
   }
   else{
     echo 'LDAP connect failed.';
   }
 ?>


 注意

リフェラル機能(ldap-urlが通知された場合に指定先に要求を行う機能)がONになっている場合、

Operations error

が発生することがある。その場合は以下のようにリフェラル機能をオフにする。

ldap_connect(..)
ldap_set_option ($ldap, LDAP_OPT_REFERRALS, 0);
ldap_set_option($ldap, LDAP_OPT_PROTOCOL_VERSION, 3);
ldap_bind(..)

または、

 ldap_set_option ($ldap, LDAP_OPT_REFERRALS, LDAP_OPT_OFF);
 ldap_set_option($ldap, LDAP_OPT_PROTOCOL_VERSION, LDAP_VERSION3);

と定数を指定しても良い。


[カテゴリ: プログラミング言語 > PHP]

[通知用URL]



  • Hatenaブックマークに追加
  • livedoorクリップに追加
  • del.icio.usに追加
  • FC2ブックマークに追加

最終更新時間:2015年01月21日 21時23分39秒