active directory - ldap membresía grupal anidada
active-directory nested (3)
Como tu pregunta, la consulta debería ser
(&(memberOf:1.2.840.113556.1.4.1941:={0})(objectCategory=person)(objectClass=user)(sAMAccountName={1}))
{0}
es el grupo anidado, debe ser un nombre distinguido
{1}
es el nombre de usuario sAMAccountName que desea (puede usar cualquier otra propiedad de usuario que sAMAccountName dentro de (sAMAccountName={1})
)
A continuación, obtendrá los detalles del usuario para la respuesta si el usuario es miembro del grupo anidado
¿Es posible crear una consulta LDAP que devolverá (o comprobará) usuarios en un grupo anidado? por ejemplo, UserA es miembro de GroupA, y GroupA es miembro de GroupB. Quiero una consulta en GroupB para devolver que UserA es un miembro. Solo LDAP. El servidor es Active Directory.
Debe usar el nombre completo completo de su grupo cuando use memberOf:1.2.840.113556.1.4.1941:=
en mi caso CN=MyGroup,OU=User,OU=Groups,OU=Security,DC=domain,DC=com
el nombre completo
(&(objectCategory=person)(objectClass=user)(memberOf:1.2.840.113556.1.4.1941:=CN=MyGroup,OU=User,OU=Groups,OU=Security,DC=domain,DC=com))
puede obtener el nombre completo de su grupo ejecutando el siguiente código y colocando este filtro (& (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
Sí, utilizando la regla de coincidencia LDAP_MATCHING_RULE_IN_CHAIN (OID 1.2.840.113556.1.4.1941). Por ejemplo:
(memberOf:1.2.840.113556.1.4.1941:=cn=group,cn=users,DC=x)
ver http://msdn.microsoft.com/en-us/library/aa746475%28VS.85%29.aspx