通过PHP进行Active Directory查找

Sam*_*mWM 2 php active-directory

如何通过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;
Run Code Online (Sandbox Code Playgroud)

那我怎么能找到这个名字呢?例如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...";
    }
}
?>
Run Code Online (Sandbox Code Playgroud)

ldap_search失败:警告:ldap_search()[function.ldap-search]:搜索:操作错误

Ste*_*rig 7

好的 - 首先,您需要ext/ldap通过LDAP接口与Active Directory服务器进行通信.显然,您的PHP安装会满足此要求(否则您将收到有关未定义函数的错误).

现在的问题是:您编写的Windows服务器是什么?从Windows Server 2003开始,默认情况下禁用匿名绑定,这意味着如果不先使用现有授权用户进行身份验证,则无法搜索Active Directory树.(要启用匿名绑定,请参阅此处 - 但由于您没有任何管理员权限,您将无法更改此设置)

第二个问题是您的基本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);
Run Code Online (Sandbox Code Playgroud)

但是,通用代码流似乎也是正确的.

总结一下:如果您的Active Directory允许匿名绑定,则必须首先检查,然后您必须调整搜索的基本DN.如果不允许匿名绑定,则必须使用有权绑定到Active Directory的用户.