我正在将我的登录表单与Microsoft活动目录集成 . 我通过LDAP php库验证用户 .
当用户尝试登录时,他们输入用户名和密码 . 连接到服务器成功,通过“LDAP_bind”进行身份验证也会根据值的正确性给出true或false . 现在我无法检索用户真实姓名以在屏幕上显示它 .
我拥有的所有信息都是带有端口号的ldap uri,以及通过webform输入的用户名和密码 .
这是我目前的代码,
$ldap = ldap_connect("ldap://abc.xyz:123");
if ($bind = ldap_bind($ldap, $_REQUEST['username'].'@abc.xyz',$_REQUEST['password']))
{ echo "Welcome". $_REQUEST['username'];}
$ _REQUEST ['username']不是人类可读的,所以我需要阅读这个用户属性或至少只显示名称 .
ldap_search和ldap_read函数没有帮助,我试过这段代码:
$ldap_base_dn = 'DC=abc,DC=xyz';
$search_filter = "(objectclass=*)";
$result = ldap_search($ldap_connection, $ldap_base_dn, $search_filter);
没有运气,为了使ldap_search或ldap_read成功运行,我必须拥有任何其他信息吗?换句话说,这可以通过只使用用户名和密码以及ldap uri来完成吗?
2 回答
你应该能够像这样进行搜索:
另外,请确保使用以下选项进行绑定:
返回
DisplayName
值时,我建议您使用搜索过滤器,该过滤器使用(samaccountname=$u)
这样简单的查找samaccountname
(用户名),其中$u
是LDAP连接的用户名 . 如果您的Active Directory / Open Directory有很多对象,我肯定会建议很快定位OU 's as this query can fall on it'的底部 .我对你的代码进行了一些进一步的更改,所以它现在在一个函数中运行,该函数需要3x参数并且如果连接或认证失败则返回false .
Check LDAP - 如果成功登录则返回 DisplayName ,如果登录或连接失败,则返回 FALSE(BOOL) .
只需将函数测试为false即可确保在使用之前有
displayname
.Run Function:
看到:
http://php.net/manual/en/function.ldap-get-values.php