2010-07-14 6 views
1

Nous avons récemment mis en place le système de ticket osTicket et nous l'avons testé pour voir s'il fallait l'implémenter dans notre bureau. Il serait vraiment utile d'avoir la possibilité de s'authentifier sur notre répertoire ouvert existant. J'ai trouvé un article (http://www.bauer-power.net/2010/04/how-to-make-osticket-160-authenticate.html) qui parle de l'utilisation d'Active Directory et la modification du fichier class.staff.php en remplaçant le code suivant:osTicket s'authentifier avec Open Directory

/*compares user password*/ 
function check_passwd($password){ 
    return (strlen($this->passwd) && strcmp($this->passwd, MD5($password))==0)?(TRUE):(FALSE); 
} 

Le nouveau code est:

/*compares user password*/ 
function check_passwd($password){ 
    // Change made for LDAP Auth based on -> http://osticket.com/forums/showthread.php?t=3312 
    // Change this line to the FQDN of your domain controller 
    $ds=ldap_connect('mydc.mydomain.local') or die("Couldn't connect to AD!"); 
    // Change this line to the name of your Active Directory domain 
    if ($ds) { 
     $domain="mydomain"; 
     $ldapbind = ldap_bind($ds); 
     if ([email protected]_bind($ds, $domain."\\".$this->username, $password)) { 
      // Auth failed! lets try at osTicket database 
      return (strlen($this->passwd) && strcmp($this->passwd, MD5($password))==0)?(TRUE):(FALSE); 
      // return(FALSE); 
     } 
     else{ 
      // Auth succeeded! 
      return(TRUE); 
     } 
     // End Changes 
    } 

} 

Cependant, semble que je ne suis toujours pas capable de se connecter. Je suppose que c'est parce que j'ai besoin d'utiliser OD et non Active Directory. Toute aide serait grandement appréciée.

Merci, Aaron

Répondre

0

Votre question est qu'il essaie de faire un mot de passe comparer, entre le passé en valeur, et la valeur dans le répertoire cible.

Votre ligne ajoutée: strlen($this->passwd) && strcmp($this->passwd, MD5($password))==0)?(TRUE) tente de hachage MD5 le mot de passe entré par l'utilisateur et comparer au mot de passe récupéré.

Mais cela fait une paire d'hypothèses énormes, que le répertoire que vous connectez est aussi:

  1. En utilisant MD5 comme le hachage pour le mot de passe
  2. Je retourner ce hachage

Vous vraiment devrait faire un test de liaison, et si cela réussit, oui, sinon, non! Vous devriez être en mesure de faire une fonction de comparaison de mot de passe aussi bien. Une liaison de test est plus agréable car elle incrémente les dernières heures de connexion dans la plupart des systèmes de répertoires.

+0

Merci pour votre réponse à ce sujet. Je ne suis pas si familier avec tout ça. Comment ferais-je le test de liaison? – Aaron

0

Vous pouvez utiliser cette fonction, il fonctionne bien:

function check_passwd($password){ 
      $adServer = "ldap://dc.yourdomain.com"; 

      $ldap = ldap_connect($adServer); 
      $username = $this->username; 
      $password = $this->passwd; 
      $ldaprdn = 'yourdomain' . "\\" . $username; 

      ldap_set_option($ldap, LDAP_OPT_PROTOCOL_VERSION, 3); 
      ldap_set_option($ldap, LDAP_OPT_REFERRALS, 0); 


      $bind = @ldap_bind($ldap, $ldaprdn, $password); 

      if ($bind) { 
        echo "SUCCESS"; 
        return true; 
      } 
      else { 
        echo "FAILUR"; 
        return false; 
      } 
    }