it-swarm.com.de

ldap verschachtelte Gruppenmitgliedschaft

Ist es möglich, eine LDAP-Abfrage zu erstellen, die Benutzer in einer verschachtelten Gruppe zurückgibt (oder nach ihnen sucht)? z.B. UserA ist Mitglied von GroupA und GroupA ist Mitglied von GroupB. Ich möchte, dass eine Abfrage in GroupB zurückgibt, dass UserA ein Mitglied ist. Nur LDAP. Der Server ist Active Directory.

43
askvictor

Ja, mithilfe der LDAP_MATCHING_RULE_IN_CHAIN-Abgleichsregel (OID 1.2.840.113556.1.4.1941). Beispielsweise:

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

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

71
Andrew Strong

Sie müssen den vollständigen Distinguished Name Ihrer Gruppe verwenden, wenn Sie memberOf:1.2.840.113556.1.4.1941:= In meinem Fall verwenden. CN=MyGroup,OU=User,OU=Groups,OU=Security,DC=domain,DC=com War der gesamte 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))

sie können den definierten Namen Ihrer Gruppe ermitteln, indem Sie den folgenden Code ausführen und diesen Filter einfügen: (& (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
7
Mothware

Als Ihre Frage sollte die Abfrage sein

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

{0} Ist die verschachtelte Gruppe und sollte ein Distinguished Name sein

{1} Ist der gewünschte Benutzer sAMAccountName (Sie können jede andere Benutzereigenschaft als sAMAccountName in (sAMAccountName={1}) Verwenden.)

Anschließend erhalten Sie die Benutzerdetails zur Antwort, wenn der Benutzer Mitglied einer verschachtelten Gruppe ist

1
John_J