PHP从活动目录读取用户信息

时间:2019-08-18 17:57:05

标签: php active-directory ldap

我必须阅读一些用户的一般信息

使用PHP脚本从活动目录中输入姓名,姓氏,电子邮件,部门等

这是我的代码:

define('DOMAIN_FQDN', 'domain.ltd');
define('LDAP_SERVER', '192.168.30.1');

    $user = strip_tags($_POST['username']) .'@'. DOMAIN_FQDN;
    $pass = stripslashes($_POST['password']);
    $conn = ldap_connect("ldap://". LDAP_SERVER ."/");

    if (!$conn){
        $err = 'Could not connect to LDAP server';
    }else{
        //define('LDAP_OPT_DIAGNOSTIC_MESSAGE', 0x0032);

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

        $bind = @ldap_bind($conn, $user, $pass);

        ldap_get_option($conn, LDAP_OPT_DIAGNOSTIC_MESSAGE, $extended_error);

        if ($bind){
            //$base_dn = array("CN=Users,DC=". join(',DC=', explode('.', DOMAIN_FQDN)), "OU=Users,OU=People,DC=". join(',DC=', explode('.', DOMAIN_FQDN)));
            $base_dn = array("DC=". join(',DC=', explode('.', DOMAIN_FQDN)), "OU=*,DC=". join(',DC=', explode('.', DOMAIN_FQDN)));
            $result = ldap_search(array($conn,$conn), $base_dn, "(cn=*)");
            if (!count($result)){
                $err = 'Unable to login: '. ldap_error($conn);
            }else{
                foreach ($result as $res){
                    $info = ldap_get_entries($conn, $res);
                    print_r($info);
                }
            }
        }
    }

这段代码print_r($info);返回一个包含大量数据的数组,这意味着我的连接工作正常。

但是关于用户没有任何事情

我需要获取当前登录的用户数据

这是错误的还是我必须在上面加上更多选择?

活动目录中的用户数据:

enter image description here

1 个答案:

答案 0 :(得分:0)

您必须确定要阅读的帐户。使用过滤器(cn=*),您正在告诉AD为每个对象提供cn属性具有值的对象。这几乎可以匹配您域中的几乎每个AD对象,包括计算机,我认为您不需要。

如果要查找域中的所有用户,可以使用以下方法:

(objectClass=user)

如果要查找一个特定用户,查询将取决于您为该用户拥有的标识符。例如,如果您知道其用户名(假设为“ PeimanF”),则查询将如下所示:

(&(objectClass=user)(sAMAccountName=PeimanF))