WordPress集成ldap认证(Active Directory Integration)

需要用到此功能,经测试通过,可支持AD域用户登录,首次登录自动创建wordpress帐号。

用到插件Active Directory Integration,需要填的几项如下:

Domain Controllers  : 10.10.10.10
Port : 389
Base DN  :  ou=my-ou,dc=dearda,dc=com

Automatic User Creation 这个选项勾上,就能实现域用户登录自动创建帐号。

Authorize by group membership 这个功能可选,意思是说在这里填入AD的组名,那就只有这个组内的人员才能通过ldap登录wordpress。

其他选项可以看情况设置。

 

只是设置了上述的地方,还是无法通过ldap登录的,需要改下ad_ldap/adLDAP.php这个文件里的内容。

 /**
    * Validate a user's login credentials
    * 
    * @param string $username A user's AD username
    * @param string $password A user's AD password
    * @param bool optional $prevent_rebind
    * @return bool
    */
    public function authenticate($username, $password, $prevent_rebind = false) {
        // Prevent null binding
        if ($username === NULL || $password === NULL) { return false; } 
        if (empty($username) || empty($password)) { return false; }
        
        // Bind as the user        
        $ret = true;
        $this->_bind = @ldap_bind($this->_conn, $username . $this->_account_suffix, $password);
        if (!$this->_bind){ $ret = false; }
将以上内容改为:
    /**
    * Validate a user's login credentials
    * 
    * @param string $username A user's AD username
    * @param string $password A user's AD password
    * @param bool optional $prevent_rebind
    * @return bool
    */
    public function authenticate($username, $password, $prevent_rebind = false) {
        // Prevent null binding
        if ($username === NULL || $password === NULL) { return false; } 
        if (empty($username) || empty($password)) { return false; }
        
        // Bind as the user        
        $ret = true;
        
        //add by liushimin
        $search=@ldap_search($this->_conn,$this->_base_dn,"uid=".$username);
        $dn=@ldap_get_entries($this->_conn,$search);
        //从获取到的数组取出用户dn,没有用户dn修改不了密码。
        for ($i=0; $i<$dn["count"]; $i++){
            $user_dn= $dn[$i]["dn"];
        }
        //end by liushimin
        $this->_bind = @ldap_bind($this->_conn, $user_dn, $password);
 
        //$this->_bind = @ldap_bind($this->_conn, $username . $this->_account_suffix, $password);
 
        if (!$this->_bind){ $ret = false; }

改完之后,通过此插件的TEST Tool功能,可以看出登录成功。

参考自:http://gogo1217.iteye.com/blog/1949723