Estoy buscando obtener una lista de todos los grupos de los que un usuario es miembro en Active Directory, tanto explícitamente enumerados en la lista de propiedades memberOf como implícitamente a través de anidados membresía de grupo. Por ejemplo, si examino UserA y UserA es una parte de GroupA y GroupB, también quiero incluir GroupC si GroupB es miembro de GroupC.Buscar membresía de grupo recursivo (Active Directory) con C#
Para darle un poco más de información sobre mi aplicación, lo haré de forma limitada. Básicamente, quiero un control de seguridad ocasionalmente que enumere estas membresías adicionales. Querré diferenciarlos, pero eso no debería ser difícil.
Mi problema es que no he encontrado una forma eficiente de hacer que esta consulta funcione. El texto estándar en Active Directory (This CodeProject Article) muestra una forma de hacer esto que es básicamente una búsqueda recursiva. Eso parece terriblemente ineficiente. Incluso en mi pequeño dominio, un usuario puede tener más de 30 membresías grupales. Eso significa más de 30 llamadas a Active Directory para un usuario.
He mirado en el siguiente código de LDAP para obtener todas las entradas memberOf a la vez:
(memberOf:1.2.840.113556.1.4.1941:={0})
donde {0} sería mi ruta LDAP (por ejemplo: CN = Usuario A, OU = Usuarios, DC = foo, DC = org). Sin embargo, no devuelve ningún registro. La desventaja de este método, incluso si funcionara, sería que no sabría qué grupo era explícito y cuál implícito.
Eso es lo que tengo hasta ahora. Me gustaría saber si hay una forma mejor que el artículo de CodeProject y, de ser así, cómo se podría lograr (el código real sería maravilloso). Estoy usando .NET 4.0 y C#. Mi Active Directory está en un nivel funcional de Windows 2008 (aún no es R2).
Gracias por compartir esto.Esto parece muy prometedor. Estoy lejos de donde puedo probarlo de inmediato (apenas tengo Internet) pero lo probaré lo antes posible y le contaré lo que encuentre. Gracias de nuevo. – IAmTimCorey
Editado: realizo algunas investigaciones más y agrego detalles de cuándo Microsoft comienza a admitir estos controles recursivos. Es extraño que la información no esté en la raíz DSE. – JPBlanc
Entonces ¿Lo pruebas? – JPBlanc