2007年10月2日火曜日

PHPのLDAP関数でActiveDirectoryに接続 - その2.

 メモ走り書き.

 ActiveDirectoryにはuidが存在しない様だ.
 へぇ~…って、じゃあログインユーザー自身の情報をどうやって取得すればいいんだよ!? orz

 普通に考えればldap_searchのフィルタに

 '(uid=' . $userid . ')'

 の様に指定するんだろうけど、uidが存在しないんじゃなぁ…
 と言う事でインターネットの海にどっぷりと沈みこみ、数時間後にようやく発見.
 何でこんなに時間がかかったかは秘密.
 秘密と言うか「cn」や「uid」をAttribute(属性)と呼ぶ事が分からなかったが為に、かなりのタイムロス orz

 で、結局ズバリのページを見つけて歓喜↓

 LDAP Attributes from Active Directory Users and Computers
 ※画面を少し下にスクロールしたら表があります.

 「uid」の代わりに「sAMAccountName」(または「userPrincipalName」)を使えそうです.
 これで心おきなく情報を取り放題ですよ.


$objConnection = ldap_connect('ldap://example.com', 389);
  or die('could not connect Active-Directory.');
ldap_set_option($objConnection, LDAP_OPT_PROTOCOL_VERSION, 3)
  or die('could not set protocol-version...');

if (! $objConnection) die('connection-object is empty.');
if (! @ldap_bind($objConnection, 'userid@example.com', 'password'))
  die("error.<br>reason... " . ldap_error($objConnection) . "<br>");

if ($objResult = @ldap_search($objConnection, 'OU=exampleou,DC=example,DC=com', '(sAMAccountName=userid)', array('cn', 'sAMAccountName', 'userPrincipalName', 'mail'))) {
  $aryResult = ldap_get_entries($objConnection, $objResult);
  print_r($aryResult);
} else {
  echo 'could not get entries.<br>';
}
ldap_unbind($objConnection);
echo 'finish.';
 ※タグべた書きなのでコードが読みにくいと言うか汚いと言うか投げやりなのは気にしない方向で.

0 件のコメント: