2014-04-24 3 views
0

Je suis capable de me lier au serveur AD, mais j'ai de la difficulté à comprendre comment valider l'appartenance à un groupe spécifique. Ce que je veux faire est de vérifier si l'utilisateur fait partie du groupe "DOMAIN \ IT" et si c'est le cas, affectez une variable de session que je pourrai utiliser plus tard. Voici ce que j'ai jusqu'à présent:Valider l'appartenance au groupe AD avec php et LDAP

if (isset($_POST["submit"])){ 

    $ldaprdn = "DOMAIN\\" . $_POST["username"];  // ldap rdn or dn 
    $ldappass = $_POST["password"]; // associated password 
    } else { 
    $ldaprdn = "noUserName";  // ldap rdn or dn 
    $ldappass = "noPassWord"; // associated password 
    } 

    //check login form post submission and blank values 
    if (isset($_POST["submit"])){ 
     if ($_SESSION["blanklogin"] !== "1"){ 
      // connect to ldap server 
      $ldapconn = ldap_connect("DC01.ROOT.DOMAIN.ORG") 
      or die("Could not connect to LDAP server."); 
      if ($ldapconn) { 

      // binding to ldap server 
      $ldapbind = ldap_bind($ldapconn, $ldaprdn, $ldappass); 

      // verify binding 
      if ($ldapbind) { 
       $_SESSION["login"] = "1"; 

    TODO: CHECK GROUP MEMBERSHIP - IF IN GROUP DOMAIN\IT then set session variable. 
       session_regenerate_id(true); 
       echo "LDAP Bind For "; echo $ldaprdn; echo " successful..."; 
         echo "Login Successful"; 
         header("Location: index.php"); 
        } else { 
        echo "LDAP bind for "; echo $ldaprdn; echo " Failed...<br />"; 
        $_SESSION["login"] = "0"; 
        } 
       $_SESSION["blanklogin"] = "0"; 
       ldap_unbind($ldapconn); 
       } 
       } else { 
       echo "Username & Password Required<br />"; 
      } 
      } 

Répondre

0

Le code suivant est tiré d'un de mes projets et retourne une liste de noms de groupe auquel l'utilisateur est membre, y compris récursivité. Vous devriez pouvoir l'employer pour vérifier ce que vous voulez:

$ldapConnection = ldap_connect($ldapServerAddress, $ldapServerPort); 
ldap_set_option($ldapConnection, LDAP_OPT_PROTOCOL_VERSION, 3); 
ldap_set_option($ldapConnection, LDAP_OPT_REFERRALS, 0); 

// Do something to handle connection failure here, this is just what I did. 
if ($ldapConnection === false) throw new ActiveDirectoryConnectionException(); 

$ldapBind = ldap_bind($ldapConnection, $ldapUsername, $dapPassword); 

// Do something to handle binding failure here, this is just what I did. 
if ($ldapBind === false) throw new ActiveDirectoryAuthenticationException(); 

$result = ldap_search($ldapConnection, $ldapSearchRoot, "(member:1.2.840.113556.1.4.1941:=" . $userDN . ")", array("sAMAccountName", "dn")); 

// Do something to handle query failure here, this is just what I did. 
if ($result === false) throw new ActiveDirectorySearchException(ldap_error($ldapConnection), ldap_errno($ldapConnection)); 

$groups = ldap_get_entries($ldapConnection, $result); 

$groupNames = array(); 

for ($i = 0; $i < $groups['count']; $i++) 
{ 
    $groupNames[] = $groups[$i]['samaccountname'][0]; 
} 

return $groupNames; 
+0

Merveilleux, merci beaucoup @Ashigore! –

Questions connexes