osTicket使用Open Directory进行身份验证

时间:2010-07-14 12:44:20

标签: authentication ldap

我们最近设置了osTicket Ticket System,并一直在测试它是否在我们的办公室实施。能够对我们现有的开放目录进行身份验证真的很有帮助。我发现了一篇文章(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 :(得分:0)

您的问题是它正在尝试在传入的值和目标目录中的值之间进行密码比较。

您添加的行: strlen($this->passwd) && strcmp($this->passwd, MD5($password))==0)?(TRUE) 正在尝试MD5哈希用户输入的密码并与检索到的密码进行比较。

但这会产生一对巨大的假设,即您连接的目录也是:

  1. 使用MD5作为密码的哈希值
  2. 愿意返回该哈希
  3. 你真的应该做一个测试绑定,如果它成功了,不管怎么样,不,不!您也应该能够进行密码比较功能。

    测试绑定更好,因为它在大多数目录系统中增加了上次登录时间。

答案 1 :(得分:0)

你可以使用这个功能,它运作良好:

    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;
            }
    }