osTicket аутентифицируется с помощью Open Directory - PullRequest
1 голос
/ 14 июля 2010

Недавно мы установили систему билетирования osTicket и тестировали ее, чтобы выяснить, следует ли внедрять ее в нашем офисе. Это действительно помогло бы иметь возможность аутентификации на основе существующего открытого каталога. Я нашел статью (http://www.bauer -power.net / 2010/04 / how-to-make-osticket-160-authenticate.html ), в которой говорится об использовании Active Directory и редактировании class.staff. php файл, заменив следующий код:

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

Новый код:

/*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 (!@ldap_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 
    }

}

Однако, похоже, я все еще не могу подключиться. Я предполагаю, что это потому, что мне нужно использовать OD, а не Active Directory. Любая помощь будет принята с благодарностью.

Спасибо, Аарон

Ответы [ 2 ]

0 голосов
/ 23 июня 2015

Вы можете использовать эту функцию, она работает хорошо:

    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;
            }
    }
0 голосов
/ 14 июля 2010

Ваша проблема в том, что он пытается сравнить пароль между переданным значением и значением в целевом каталоге.

Добавленная вами строка: strlen($this->passwd) && strcmp($this->passwd, MD5($password))==0)?(TRUE) пытается MD5 хэшировать пароль, введенный пользователем, и сравнивать с полученным паролем.

Но это делает пару ОГРОМНЫХ предположений, что каталог, к которому вы подключаетесьтоже:

  1. Использование MD5 в качестве хэша для пароля
  2. Желание вернуть этот хэш

Вы действительно должны выполнить тестовое связывание, иесли это удастся, да, если нет, нет!Вы должны быть в состоянии сделать функцию сравнения паролей, а также.

Тестовая привязка лучше, поскольку она увеличивает время последнего входа в систему также в большинстве систем каталогов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...