繁体   English   中英

使用LDAP和PHP检查Active Directory中的组成员身份

[英]Checking for group membership in Active Directory using LDAP and PHP

我是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 =,但我不知道这些是什么意思。 如果有人可以解释它是如何工作的,以及我需要做些什么来弄清楚团队成员资格,那就太棒了!

我不熟悉PHP访问LDAP / Active Directory的实现,所以我无法帮助你。 我可以帮助你的是或许了解从哪里获取域结构信息,以便连贯地汇集所有CN,OU,DN的东西。

登录到其中一个域控制器的控制台,然后打开“Active Directory用户和计算机”管理员工具。

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

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

点击您域名旁边的+(加号)符号(如果尚未登录)。 你应该看到一堆文件夹(实际上是OU和目录,但我会保持简单)。 您正在寻找的群组将位于其中一个“文件夹”中,很可能位于名为“用户”的群组中,因此请开始查看。

记下您找到该组的“路径”,从顶部的“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部分,因为这是用户帐户名称。 其余的是此帐户对象存储在域结构中的“路径”。

希望能帮助到你。

如果有人关心,我能够做这样的搜索:

$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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM