1

我为一家大公司维护一个 Intranet 网站。由于当前用户身份验证系统出现故障,我不得不制定紧急解决方案。这是简化的代码

$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 服务器,页面是否可以获取有关此用户用户名的信息。

如果它可以提供一些额外的信息,例如全名,分支代码,分支,邮件地址..等,那将是一个很大的奖励

4

1 回答 1

0

这取决于您的 LDAP 服务器。如果需要身份验证,您必须提供该信息;但是,这应该委托给某个服务帐户,而不是绑定到特定用户(这是一个完全不同的过程)。无论如何,假设这不是问题,您可以使用ldap_search.

例如,如果您想在DNcihats下搜索 的用户名,则可以使用以下方法:o=example

$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将是在搜索中找到的每个匹配项的整个目录,因此您将能够获得全名、分支代码等内容,但这些内容将具有特定于站点的键。

于 2013-03-19T16:39:32.157 回答