トップ 一覧 置換 検索 ヘルプ 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);
と定数を指定しても良い。


{{category2 プログラミング言語,PHP}}