(おまけ) PHP AD認証
PHP での active directory 認証してみる。
php.net にサンプルが載っているので拝借〜
<?php $username = "rti"; $password = "秘密!"; $ldap_url = 'ad.rti7743.local'; $ldap_domain = 'rti7743.local'; $ldap_dn = "dc=rti7743,dc=local"; $ds = ldap_connect( $ldap_url ); ldap_set_option($ds, LDAP_OPT_PROTOCOL_VERSION, 3); ldap_set_option($ds, LDAP_OPT_REFERRALS, 0); // now try a real login $login = ldap_bind( $ds, "$username@$ldap_domain", $password ); echo '- Logged In Successfully<br/><br/>'; try{ /* $attributes = array("displayname", "mail", "department", "title", "physicaldeliveryofficename", "manager"); */ $attributes= array("*"); $filter = "(&(objectCategory=person)(sAMAccountName=$username))"; $result = ldap_search($ds, $ldap_dn, $filter, $attributes); $entries = ldap_get_entries($ds, $result); if($entries["count"] > 0){ echo print_r($entries[$i],1)."<br />"; } catch(Exception $e){ ldap_unbind($ds); return; } ldap_unbind($ds); echo '<br/><br/>- Logged Out'; ?>
で、これを実行すると、いろいろ情報が画面に出力されます。
そのなかで、memberof という値に、所属グループが入っています。
この値を利用して、できるできないを作成します。
["memberof"]=> array(5) { ["count"]=> int(4) [0]=> "CN=グループ1,CN=Users,DC=rti7743,DC=local" [1]=> "CN=グループ2,CN=Users,DC=rti7743,DC=local" [2]=> "CN=グループ3,CN=Users,DC=rti7743,DC=local" }
もし、AD認証をガチで使う場合は、「〜できるグループ」のように名前をつけていけば結構平和になると思います。
"CN=管理ページにログインすることができるグループ,CN=Users,DC=rti7743,DC=local"
一応、日本語も、utf-8 で受け取れます。
ですが、あまり気持ちのいいものではないので、英数字にするのがおすすめかな。
この php を実行するには、 php-ldap モジュールが必要です。
ただし、ldapのバインドの是非をみているだけなのでパスワードが平文がネットワークに流れてしまうのがデメリットです。
ガチでケルベロス認証すればパスワードはネットに流れないのですが、 php からやるのは結構大変だと思うので・・・