PHPでLdap認証をする方法
PHPでLdap認証をする方法を紹介します。
Active Directoryは、Windows Server 2016を想定しています。
認証手順
1.Ldapユーザでのコネクション接続
2.Ldapユーザでのバインド接続
3.ユーザの存在確認
4.ユーザでのバインド接続
5.認証確認
サンプルソース
ldap関数については、公式のPHPマニュアルを参照してください。
// Ldapサーバー $ldap_server = "ldap://localhost:389"; // Ldapユーザー $ldap_user = "ldapuser"; // ベースのDN $base_dn = "OU=tset,DC=example,DC=com"; // DN // アカウント $user_id = "user01"; // ユーザ名 $user_password = "password"; // パスワード // コネクション接続 $ldapconn = ldap_connect($ldap_server); ldap_set_option($ldapconn, LDAP_OPT_PROTOCOL_VERSION, 3); if(!$ldapconn){ echo "コネクション接続できません"; exit; } else{ // バインド接続 $ldapbind = ldap_bind($ldapconn, "CN=" . $ldap_user . "," . $base_dn, "password"); if(!$ldapbind){ //コネクション切断 ldap_unbind($ldapconn); echo "バインド接続できません"; exit; } } if($ldapconn!==false){ // ユーザの存在確認 $user_filter = "(sAMAccountName=" . $user_id . ")"; $ldapres = ldap_search($ldapconn, $base_dn, $user_filter, array("distinguishedName")); if(ldap_count_entries($ldapconn, $ldapres)==0){ echo "ユーザが存在しない"; } else{ // DN名の取得 $ldapentry = ldap_first_entry($ldapconn, $ldapres); $distinguishedNameArr = ldap_get_values($ldapconn, $ldapentry, "distinguishedName"); $distinguishedName = $distinguishedNameArr[0]; // バインド接続 $ldapbind_user = ldap_bind($ldapconn2, $distinguishedName, $user_password); if(!$ldapbind_user){ echo "認証失敗"; } else{ echo "認証成功"; } } //コネクション切断 ldap_unbind($ldapconn); }