membres des groupes imbriqués du ldap

est-il possible de créer une requête LDAP qui retournera (ou vérifiera) les utilisateurs dans un groupe imbriqué? par exemple, UserA est membre de GroupA, et GroupA est membre du groupe B. Je veux une requête sur GroupB pour retourner que UserA est un membre. LDAP seulement. Le serveur est Active Directory.

34
demandé sur Abhijeet Kasurde 2011-06-01 07:03:29

3 réponses

Yes, using the LDAP_MATCHING_RULE_IN_CHAIN matching rule (OID 1.2.840.113556.1.4.1941). Par exemple:

(memberOf:1.2.840.113556.1.4.1941:=cn=group,cn=users,DC=x)

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

62
répondu Andrew Strong 2014-09-15 07:05:33

vous devez utiliser le nom distinctif complet de votre groupe lorsque vous utilisez memberOf:1.2.840.113556.1.4.1941:= dans mon cas CN=MyGroup,OU=User,OU=Groups,OU=Security,DC=domain,DC=com a l'ensemble de la distinguished name

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

vous pouvez obtenir le nom distingué de votre groupe en exécutant le code suivant et en mettant dans ce filtre (&(objectClass=group)(nom=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
4
répondu Mothware 2017-01-11 13:18:27

Comme votre question, la requête doit être

(&(memberOf:1.2.840.113556.1.4.1941:={0})(objectCategory=person)(objectClass=user)(sAMAccountName={1}))

{0} est le groupe imbriqué, il devrait être un nom distinctif

{1} est l'utilisateur sAMAccountName vous voulez (vous pouvez utiliser n'importe quel autre utilisateur de la propriété que sAMAccountName dans les (sAMAccountName={1}))

Ensuite, vous aurez l'utilisateur de détail pour la réponse si l'utilisateur est membre du groupe imbriqué

1
répondu John_J 2016-10-25 02:15:10