从ldap AD中检索全名

时间:2014-11-13 10:50:32

标签: php active-directory ldap

这是我验证用户身份的LDAP代码。用户登录后,我必须向用户显示全名。如何从AD获取用户的全名?

<?php
FUNCTION ldapCheckLogin ($username, $upasswd) {

    $ldaphost = '10.20.30.40';   
    $ldapport = 389;
    $ds = ldap_connect($ldaphost, $ldapport) 
        or die("Could not connect to our login server!");

    ldap_set_option($ds, LDAP_OPT_PROTOCOL_VERSION, 3);
    ldap_set_option($ds, LDAP_OPT_REFERRALS, 0);
    ldap_set_option(NULL, LDAP_OPT_DEBUG_LEVEL, 7);

    if ($ds) 
    {
        //$username = 'na\'; //OK - Congratulations! na\spups is authenticated.
        $upname = 'iap\\' . $username;

        $ldapbind = @ldap_bind($ds, $upname, $upasswd);

        if ($ldapbind) {
            //print "Congratulations! $username is authenticated.<BR><BR>";
            ldap_unbind( $ds ); 
            return true;
        } else { //print "$username  - Access Denied!<BR><BR>";
            return false;
        }
    } else {
        return false;
    }
}

?>

1 个答案:

答案 0 :(得分:0)

您需要使用ldap_search和用户samAccountName来检索用户的条目,例如(samaccountname=$username)userPrincipalName例如{} (userprincipalname=$username . "@" . $domain.com )作为过滤器属性。

samaccountname仅在域中是唯一的,而userPrincipalName在整个林中都是唯一的。

执行ldap_search时,您需要在要返回的属性中包含cndisplayName

如果搜索成功,则需要处理生成的条目并提取cn和/或displayName