繁体   English   中英

使用LDAP函数获取PHP中的Active Directory tokenGroups属性

[英]Using LDAP functions to get Active Directory tokenGroups attribute in PHP

问候,

我已经与AD建立了有效的连接,并且可以从中搜索和检索信息。 我什至开发了一种递归方法,通过该方法可以检索给定用户的所有组。 但是,如果可能,我想避免递归。 一种方法是从用户的AD获取tokenGroups属性,该属性应该是指定用户具有成员身份的组的SID列表,无论该成员身份是直接成员身份还是间接成员身份。

但是,当我搜索用户的AD信息时,tokenGroups属性甚至不在其中。 我尝试专门要求提供该信息(即,使用ldap_search的第四个参数指定该信息),但这也不起作用。

谢谢大卫·基斯


解决了我自己的问题,并认为我会将答案放在这里,以便其他人可以找到它。 问题是使用l​​dap_search()函数。 答案是使用ldap_read()函数而不是ldap_search()。 不同之处在于请求的范围。 搜索功能使用“子”范围(即子树),而读取功能使用“基”范围。 仅在使用“基本”范围时才能找到tokenGroups信息,因此使用正确的PHP函数是关键。

如上所述,我正在使用perl中的其他代码来创建我的解决方案,并且perl脚本使用了一个名为“ search”的函数来执行LDAP请求,这导致我走错了路。

感谢那些偷看了这个问题的人!

-

根据注释中的要求,这是代码中解决方案的基础。 我正在从使用的对象中提取数据,所以它可能不是100%,但是会很接近。 另外,您要弄清楚在此摘要中未声明的变量(例如$ server,$ user,$ password); 无论如何,我不会知道您的广告凭据!

$ldap = ldap_connect($server);
ldap_bind($ldap, $user, $password);
$tokengroups = ldap_read($ldap, $dn, "CN=*", array("tokengroups")));
$tokengroups = ldap_get_entries($ldap, $tokengroups);

此时, $tokengroups是我们作为数组的结果。 它应该具有计数索引以及其他一些信息。 要提取实际的组,您需要执行以下操作:

$groups = array();
if($tokengroups["count"] > 0) {
    $groups = $tokengroups[0]["tokengroups"];
    unset($groups["count"]);

    // if you want the SID's for your groups, you can stop here.
    // if you want to decode the SID's then you can do something like this.
    // the sid_decode() here: http://www.php.net/manual/en/function.unpack.php#72591

    foreach($groups as $i => &$sid) {
        $sid = sid_decode($sid);

        $sid_dn = ldap_read($ldap, "<SID=$sid>", "CN=*", array("dn"));
        if($sid_dn !== false) {
            $group = ldap_get_entries($ldap, $sid_dn);
            $group = $group["count"] == 1 ? $group[0]["dn"] : NULL;
            $groups[$i] = $group;
        }
    }
}

这就是基础。 有一个警告:您可能需要与组织中管理AD帐户的一个或多个个人合作。 我第一次尝试运行该命令(几年前,所以我的记忆有些模糊),我获得的帐户没有访问令牌组信息的适当授权。 我敢肯定还有其他方法可以做到这一点,但是由于我正在为该特定解决方案移植其他人的代码,因此我就是这样做的。

暂无
暂无

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

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