如何通过PHP进行Active Directory查找?无需重新编译PHP。 PHP版本是5.3
我想从用户名中找到人员显示名称。 Web服务器是IIS 6,PHP使用FastCGI提供。
我获得了用户名:
$cred = explode('\\',$_SERVER['REMOTE_USER']);
if (count($cred) == 1) array_unshift($cred, "(no domain info - perhaps SSPIOmitDomain is On)");
list($domain, $user) = $cred;
return $user;
那我怎么才能找到这个名字?例如DoeJ = John Doe
修改
尝试查找用户,但不确定如何找到“基本DN”。无法直接访问Active Directory服务器或具有管理员权限,因此请匿名连接。
<?php
//using ldap bind anonymously
// connect to ldap server
$ldapconn = ldap_connect("example.co.uk")
or die("Could not connect to LDAP server.");
if ($ldapconn) {
// binding anonymously
$ldapbind = ldap_bind($ldapconn);
if ($ldapbind) {
echo "LDAP bind anonymous successful...";
ldap_set_option($ldapconn, LDAP_OPT_PROTOCOL_VERSION,3);
ldap_set_option($ldapconn, LDAP_OPT_REFERRALS,0);
$dn = "CN=Users"; // also tried DC=example,DC=co,DC=uk
$filter="(SAMAccountName=username)";
$justthese = array("ou", "sn", "givenname", "mail");
$sr=ldap_search($ldapconn, $dn, $filter, $justthese);
$info = ldap_get_entries($ds, $sr);
echo $info["count"]." entries returned\n";
} else {
echo "LDAP bind anonymous failed...";
}
}
?>
ldap_search失败:警告:ldap_search()[function.ldap-search]:搜索:操作错误
答案 0 :(得分:7)
确定 - 首先,您需要ext/ldap
通过LDAP界面与Active Directory服务器进行通信。显然,您的PHP安装会满足此要求(否则您将收到有关未定义函数的错误)。
现在的问题是:您编写的Windows服务器是什么?从Windows Server 2003开始,匿名绑定为disabled by default,这意味着如果不首先使用现有授权用户进行身份验证,则无法搜索Active Directory树。 (要启用匿名绑定,请参阅here - 但由于您没有任何管理员权限,因此无法更改此内容)
第二个问题是您的基本DN ,它实际上是LDAP树中将执行搜索操作的位置。用户容器的normale base DN应为CN=Users,DC=yourdomain,DC=yourtopleveldomain
,例如CN=Users,DC=example,DC=local
。
您使用的过滤器实际上是正确的:(SAMAccountName=username)
会找到用户username
的帐户条目。要使用您的用户名变量,您可以执行以下操作:
$filter = sprintf('(SAMAccountName=%s)', $user);
但是,通用代码流似乎也是正确的。
总结一下:如果您的Active Directory允许匿名绑定,则必须首先检查,然后您必须调整搜索的基本DN。如果不允许匿名绑定,则必须使用有权绑定到Active Directory的用户。
答案 1 :(得分:0)
ldap_get_entries
函数的第一个参数不正确:
$info = ldap_get_entries($ldapconn, $sr);
以这种方式进行测试,您的代码现在正常工作。
答案 2 :(得分:-2)
PHP有LDAP library可用于查询活动目录。但它不是enabled by default。
如果您可以使用它,可以查看ldap_search()
答案 3 :(得分:-2)
由于您使用IIS而不是意味着您在Windows上运行php,这反过来意味着您可以启用LDAP extension而无需重新编译php。这应该可以解决你的大多数问题。