ActiveDirectoryで管理しているユーザーについて、phpを使ってユーザー名を取得してみたかったのでやってみた
今回は氏名(name)とユーザー名(samaccountname)を取得して表示させる
php-ldapのインストール
yum install php-ldap
実行したコード
<?php // ADサーバー接続 $ldapconn = ldap_connect('ldap://xxx.xxx.xxx.xxx/'); ←IPアドレス // ADに登録されているアカウント(管理者権限じゃなくても良い) $user = 'xxxxxxx'; ←ユーザー名 $passwd = 'xxxxxx'; ←パスワード // ベースのDN $base_dn = 'ou=ラーメンビル,ou=Users,ou=Ramen,dc=ramen,dc=local'; ←検索を開始したい場所(ActiveDirectory ユーザーとコンピューターのツリー構造みるとわかりやすい) // フィルター $filter = '(&(objectCategory=person)(objectClass=user)(!(userAccountControl:1.2.840.113556.1.4.803:=2)))'; ←(!(userAccountControl:1.2.840.113556.1.4.803:=2)は無効ユーザーは除くの意 // LDAPオプションを設定 ldap_set_option($ldapconn, LDAP_OPT_PROTOCOL_VERSION, 3); ldap_set_option($ldapconn, LDAP_OPT_REFERRALS, 0); if($ldapconn){ // ldapサーバーにバインドする if (ldap_bind($ldapconn, $user, $passwd)) { // 情報を取得する $sr = ldap_list($ldapconn, $base_dn, $filter, array('name', 'samaccountname')); ←arrayに取得したい情報の属性を指定。すべて小文字にしないとエラーになるので注意。 $info = ldap_get_entries($ldapconn, $sr); // 検索のヒット件数を取得 $count = $info['count']; // 取得した情報を表示する for ($i = 0; $i < $count; $i++) { $ent = $info[$i]; $name = $ent['name'][0]; $username = $ent['samaccountname'][0]; echo "$name<br>\n"; echo "$username<br>\n"; } // ADサーバー接続解除 ldap_unbind($ldapconn); } } ?>
ポイント
ADに登録されているアカウントを使用して、ldap_bindすること
ユーザーやパスワード情報を使用しない匿名ユーザーでもADに接続はできるようだが、ldap_list箇所でエラーが出てしまうため情報取得のためにはADに登録されているユーザーでのログインが必要
ActiveDirectory ユーザーとコンピューターの画面と照らし合わせながらパラメーターを確認
ベースDN、フィルター、arrayあたりで指定する属性の確認方法は下記の通り
・ActiveDirectoryユーザーとコンピューターを開く
・ユーザーのプロパティを開き、属性エディターから確認
参考
https://qiita.com/mindwood/items/782f828d6a769f4aef66
https://php.plus-server.net/function.ldap-get-entries.html
https://php.plus-server.net/function.ldap-bind.html
http://phpdoc.m-takagi.org/function.ldap-get-entries.html
コメント