usuario unir permisos para grupos grupo dominio cuentas crear administrador active .net active-directory ldap adsi

.net - unir - ¿Cómo puedo determinar si un grupo de AD contiene un DirectoryEntry dado de otro dominio(de confianza)?



permisos de grupo en active directory (1)

Estoy tratando de reforzar mi código que determina si un usuario es miembro de un determinado grupo de AD. Funciona esencialmente, excepto cuando el miembro del grupo pasa a ser de otro dominio (de confianza) porque se almacena como un perfil de seguridad exterior.

Dado que tengo un objeto DirectoryEntry válido tanto para el grupo que quiero probar como para la cuenta que deseo verificar, necesito una cadena de filtro de DirectorySearcher que me permita confirmar que la cuenta está en ese grupo, incluso si la cuenta es unprincipal de seguridadexterna.

(Código VB.NET Muestra que demuestra el problema)

Dim ContainerGroup as DirectoryEntry = ... Code to get Group Dim UserToCheckFor as DirectoryEntry = ... Code to get User DSearcher = New DirectorySearcher(ContainerGroup, "(WHATCANIPUTINHERE)", New String() {"member;Range=0-5000"}, SearchScope.Base) DSearcher.AttributeScopeQuery = "member" ''If an object is found, the account was in the group Return (DSearcher.FindOne() IsNot Nothing)


Bueno. Lo encontré. Aquí está el truco.

Estoy tratando de reforzar mi código que determina si un usuario es miembro de un determinado grupo de AD. Funciona esencialmente, excepto cuando el miembro del grupo pasa a ser de otro dominio (de confianza) porque se almacena como un perfil de seguridad exterior.

(Ejemplo de código VB.NET)

Dim ContainerGroup as DirectoryEntry = ... Code to get Group Dim UserToCheckFor as DirectoryEntry = ... Code to get User DSearcher = New DirectorySearcher Dim DSearcher As New DirectorySearcher(ContainerGroup, getLDAPQueryStringUsingSID(containedGroup), New String() {"member;Range=0-5000"}, SearchScope.Base) Return (DSearcher.FindOne() IsNot Nothing) ** Helper Methods ** Private Function getLDAPQueryStringUsingSID(ByVal DEObject As DirectoryEntry) As String Return "(objectSid=" + getSDDLSidForDirectoryEntry(DEObject) + ")" End Function Private Function getSDDLSidForDirectoryEntry(ByVal DEObject As DirectoryEntry) As String Dim bytes As Byte() = CType(DEObject.Properties("objectSid").Value, Byte()) Dim sid As New System.Security.Principal.SecurityIdentifier(bytes, 0) Return sid.ToString End Function