使用LDAP查找用户名
问题描述:
我维护一家大型公司的Intranet网站。由于当前的用户认证系统发生故障,我不得不制定紧急的解决方案。 下面是简化的代码使用LDAP查找用户名
$usr=$_POST['user'];
$psw=$_POST['code'];
if(!strlen($psw))
$psw="x";
// because empty password works fine for any user
$ldap= ldap_connect("LDAP://ldapserver.xxx.local");
if(!$ldap)
exit(0);
ldap_set_option($ldap, LDAP_OPT_PROTOCOL_VERSION, 3);
ldap_set_option($ldap, LDAP_OPT_OPT_REFERRALS, 0);
if($bind = @ldap_bind($ldap, $usr, $psw){
header("Location: http:10.xx.xx.xx/entrance.php?id=$usr");
// login OK, look for user privileges
}else{
header("Location: http:10.xx.xx.xx/login.php?INV=1");
// back to login page
}
代码工作得很好,但我不希望用户必须输入他们的网络用户名和密码, 当用户来到这个页面,连接和匿名绑定LDAP服务器,一个页面可以获取有关此用户的用户名的信息。
而且这将是一个巨大的奖金,如果它可以给一些额外的信息,如姓名,代码分支,分支,邮件地址...等
答
这取决于您的LDAP服务器上。如果需要验证,则必须提供该信息;但是,这应该委托给某个服务帐户,而不是绑定到特定用户(这是一个完全不同的过程)。无论如何,假设这不是问题,您可以使用ldap_search
来查询LDAP服务器。
例如,如果你想搜索的cihats
用户名,下设o=example
DN,下面会做的伎俩:
$ldap = @ldap_connect($yourHostname);
$query = @ldap_search($ldap, 'o=example', 'cn=cihats');
$results = @ldap_get_entries($ldap, $query);
if ($results['count']) {
print_r($results);
} else {
echo "No such common name";
}
的ldap_get_entries
输出将是为每个整个目录在搜索中找到匹配项,因此您将能够获得全名,分支代码等内容,但这些将具有特定于站点的密钥。
那么你将不得不要求登录凭据来启用LDAP服务器授予用户会话认证 – Suyash 2013-03-19 15:52:39