如何使用PHP从Active Directory中通过primaryGroupToken检索组?

时间:2014-02-04 11:06:10

标签: php search active-directory

如何使用PHP从Active Directory中检索一个组的primaryGroupToken?显然这是一个计算属性,因此检索它并不是直截了当的,如答案所示:AD: Group does not have a primaryGroupToken attribute

基本上我正在使用以下命令:

ldap_search(
    $connection,
    "DC=host,DC=only,DC=network",
    "(&(objectClass=group)(objectCategory=group)(primaryGroupToken=513))",
    array("dn", "primarygrouptoken")
)

导致错误:

Warning: ldap_search(): Search: Inappropriate matching

知道如何使用PHP从Active Directory中使用它的主要组令牌检索组吗?

1 个答案:

答案 0 :(得分:1)

来自链接答案reference的最简单方法是通过最后的数字 - 在objectsid中作为过滤器参数来请求组。

"(&(objectClass=group)(objectCategory=group)(objectSid=*-513))" 

属性参数也将变为array("dn", "objectSid")

不幸的是,这是不可能的,因为您在评论中说的objectSid是OctetString或Byte数组而不是SDDL字符串。您可以使用转义(带前缀的\和十六进制)字节字符串来搜索特定组,但这不是问题所在。

但二进制过滤器不支持通配符。 另一种方法是请求所有组,然后为每个组解包objectSid,然后在后处理后按RID分组,但是根据域中的组数量,这可能太慢。

PHP中八位位组字符串和SDDS之间的转换示例位于here,同时通过PrimaryGroupId查找用户。

另一种方法是按照herehere使用ADO,但这需要ADODB

另请参阅here以获取第二个参考。 其他参考文献herehere