0

我对 LDAP 和 Active Directory 很陌生,我认为这应该是一个简单的问题。我正在使用以下代码连接到 AD:

$ad = ldap_connect("domain.com") or die("Could not connect to AD");
//bind to the server
$uname = $uid . "@domain.com";
if (!ldap_bind($ad, "$uname", "$pwd") and $uid != "guest") {
    code...
}

我需要检查用户是否是以下三个组之一的成员:ECSDocket_Admin、ECSDocket_User 或 ECSDocket_Viewer。我一直在四处寻找,我发现的大多数答案在他们的查询中使用 CN= 和 DN= 和 DC= ,但我不知道这些是什么意思。如果有人可以解释它是如何工作的,以及我需要做什么来确定组成员身份,那就太棒了!

4

2 回答 2

2

如果有人在乎,我可以进行这样的搜索:

$dn = "CN=$uid,CN=Users,DC=domain,DC=com";
$filter = "(memberOf=CN=ECSDocket_Admin,OU=Groups,DC=domain,DC=com)";
$justthese = array("memberOf");

$sr = ldap_search($ad, $dn, $filter, $justthese);
$info = ldap_get_entries($ad, $sr);
echo $info["count"]." entries returned.\n";

通过检查计数,我能够确定输入的用户名是否是组的一部分——如果有,那么它就是组的一部分,因为我已经在该用户名下使用了 ldap_connect 来检查它是否是在 AD 内有效。对于过滤器,由于 memberOf 是一个数组,因此您需要指定整个路径。例如,如果您只需要查询 sn(姓氏),您可以有类似的内容:

$filter = "(sn=smith)";

一个帮助我准确了解正确属性的网站是这个:http ://www.selfadsi.org/user-attributes-w2k8.htm

于 2013-07-25T21:18:32.460 回答
1

我不熟悉 PHP 访问 LDAP/Active Directory 的实现,所以我无法帮助您。我可以帮助您的可能是了解从您的域结构中获取信息的位置,以便连贯地组装所有这些 CN、OU、DN 的东西。

登录到您的域控制器之一的控制台并打开“Active Directory 用户和计算机”管理员工具。

在顶部的左侧窗格中将显示您的域名,例如:somedomain.com 记下您的域名。

现在您需要在域结构中找到 ECSDocket_Admin、ECSDocket_User 和 ECSDocket_Viewer 组对象的位置。

单击您的域名旁边的 +(加号)(如果还没有)。您应该会看到一堆文件夹(实际上是 OU 和 Directory,但我会保持简单)。您要查找的组将位于这些“文件夹”之一中,很可能位于称为“用户”的文件夹中,因此请开始查找。

记下您找到该组的“路径”,从顶部的“somedomain.com”开始,向下遍历文件夹。例如:somedomain.com/users/etc/ECSDocket_Admin

要查询组对象,您需要知道它的专有名称 (DN)。使用您收集的有关域名和位置的信息,您可以为每个组组装 DN,如下所示:

注意:我正在使用一组示例路径:somedomain.com/users/etc/ECSDocket_Admin

DN 值为: CN=ECSDocket_Admin,OU=etc,OU=users,DC=somedomain,DC=com

--请注意,我们从对象名称“ECSDocket_Admin”开始,然后沿着树向上工作(查看我让你写下的路径时的顺序相反)!

--请注意,只有组名以 CN= 为前缀

--请注意,所有“文件夹”名称都以 OU= 为前缀

--请注意,我们在点分隔符处拆分我们的域名,并在每个部分前加上 DC=

--请注意,DN值中的所有内容都用逗号(,)分隔

您可能需要的其他项目的值是:

以 somedomain.com 域名为例,“搜索库”或目录中开始搜索的点将为:DC=somedomain,DC=COM

搜索范围将是:sub它只是说可以查看起点下方的所有“文件夹”

一旦弄清楚如何查询组对象,您特别感兴趣的属性值就称为“成员”。此属性包含多个值,一个用于作为组成员的每个用户。这些值将是用户帐户的 DN。您将感兴趣的部分将是开头的 CN=SOMEUSER 部分,因为这是用户帐户名。其余的是此帐户对象在域结构中存储的“路径”。

希望能帮助到你。

于 2013-07-24T21:15:43.877 回答