phpでActiveDirectoryのユーザー名を取得して、表示させる

IT

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

コメント

タイトルとURLをコピーしました