ldap嵌套组成员资格

ask*_*tor 44 nested ldap active-directory

是否可以创建一个LDAP查询,该查询将返回(或检查)嵌套组中的用户?例如,UserA是GroupA的成员,GroupA是GroupB的成员.我希望GroupB上的查询返回UserA是一个成员.仅限LDAP.服务器是Active Directory.

And*_*ong 73

是的,使用LDAP_MATCHING_RULE_IN_CHAIN匹配规则(OID 1.2.840.113556.1.4.1941).例如:

(memberOf:1.2.840.113556.1.4.1941:=cn=group,cn=users,DC=x)
Run Code Online (Sandbox Code Playgroud)

http://msdn.microsoft.com/en-us/library/aa746475%28VS.85%29.aspx

  • 你能解释一下我们这些不擅长LDAPese的人吗? (9认同)
  • 如果可以的话,我会给你一块蛋糕并邮寄给你,谢谢你. (4认同)
  • 此规则是Microsoft扩展吗? (2认同)
  • 听起来这个问题是寻找带有组参数的东西并列出所有成员(包括嵌套组中的成员).所有这些解决方案似乎都采用用户参数 - 或者 - 用户和组参数. (2认同)
  • 我是 LDAP 新手,1.2.840.113556.1.4.1941 到底是什么?我在你发布的链接上看到它,知道为什么它是一长串这样的数字吗? (2认同)
  • @kroimon,特别是它直到Samba 4.4才有效,[修复了破坏的实现](https://bugzilla.samba.org/show_bug.cgi?id=10493). (2认同)

Mot*_*are 8

memberOf:1.2.840.113556.1.4.1941:=在我的案例CN=MyGroup,OU=User,OU=Groups,OU=Security,DC=domain,DC=com中使用整个专有名称时,您必须使用组的完整专有名称

(&(objectCategory=person)(objectClass=user)(memberOf:1.2.840.113556.1.4.1941:=CN=MyGroup,OU=User,OU=Groups,OU=Security,DC=domain,DC=com))
Run Code Online (Sandbox Code Playgroud)

您可以通过运行以下代码并输入此过滤器来获取您的组的可分辨名称 (&(objectClass = group)(name = MyGroup))

Imports System.DirectoryServices

Module Module1

Sub Main()
    Dim run As Boolean = True
    Dim Filter As String
    While run
        Console.WriteLine("Enter Filter:")
        Filter = Console.ReadLine()
        If Filter = "exit" Then
            run = False
        Else
            checkFilter(Filter)
        End If
    End While
End Sub

Function checkFilter(Filter As String) As Boolean
    Dim search As New DirectorySearcher("LDAP://dc=Domain,dc=com")
    Try
        search.Filter = Filter
        search.PropertiesToLoad.Add("name")
        search.PropertiesToLoad.Add("distinguishedName")
        search.SearchScope = SearchScope.Subtree
        Dim results As SearchResultCollection = search.FindAll()
        If results Is Nothing Then
            Console.WriteLine("Nothing")
            Return False
        Else
            If results.Count() = 0 Then
                Console.WriteLine("non found")
            End If
            Dim result As SearchResult
            For Each result In results
                Console.WriteLine(result.Properties("name")(0).ToString())
                Console.WriteLine(result.Properties("distinguishedName")(0).ToString())
                'For Each prop In result.Properties("members")
                '    Console.WriteLine(prop.ToString())
                'Next
            Next
            Console.WriteLine(String.Format("{0} Users Found", results.Count()))
        End If
    Catch ex As Exception
        Console.WriteLine(ex.Message)
    End Try
    Return True
End Function

End Module
Run Code Online (Sandbox Code Playgroud)


Joh*_*n_J 5

根据您的问题,查询应该是

(&(memberOf:1.2.840.113556.1.4.1941:={0})(objectCategory=person)(objectClass=user)(sAMAccountName={1}))
Run Code Online (Sandbox Code Playgroud)

{0}是嵌套组,它应该是一个专有名称

{1}是您想要的用户sAMAccountName(您可以在 中使用除 sAMAccountName 之外的任何其他用户属性(sAMAccountName={1})

如果用户是嵌套组的成员,那么您将获得用于响应的用户详细信息