es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Leyendo objectSID desde ActiveDirectory: problema al leer de los grupos incorporados.

Necesito usar las clases LdapConnection en mi proyecto porque DirectoryEntry/DirectorySearcher no admiten la omisión de certificados autofirmados para LDAPS. Al migrar mi código, me encuentro con un problema al leer objectGuid de los grupos incorporados: el formato no es igual al de los grupos personalizados, y el valor de retorno es extraño y no se puede convertir a nada.

Aquí hay 2 ejemplos de código que ilustran mi problema, o mejor dicho, el resultado que es diferente:

    LdapConnection conn = new LdapConnection("va.dev");

    var filter = "(objectClass=group)";
    var searchRequest = new SearchRequest("OU=Developer Goups,DC=va,DC=dev", filter, System.DirectoryServices.Protocols.SearchScope.OneLevel, "sAMAccountName", "description", "distinguishedName", "objectSid");
    var response = conn.SendRequest(searchRequest) as SearchResponse;
    var objectSid = response.Entries[0].Attributes["objectSid"][0];

El resultado de objectSid es Byte[] y puedo convertirlo a SecureIdentifier o cadena, lo que necesite.

Ahora mismo código leyendo grupos incorporados:

    LdapConnection conn = new LdapConnection("va.dev");

    var filter = "(objectClass=group)";
    var searchRequest = new SearchRequest("CN=Builtin,DC=va,DC=dev", filter, System.DirectoryServices.Protocols.SearchScope.OneLevel, "sAMAccountName", "description", "distinguishedName", "objectSid");
    var response = conn.SendRequest(searchRequest2) as SearchResponse;
    var objectSid = response.Entries[0].Attributes["objectSid"][0];

Ahora el resultado es muy extraño para el primer grupo incorporado (y para todos los demás). Se ve así:

“\u0001\u0002\0\0\0\0\0\u0005 \0\0\0,\u0002\0\0” (de tipo string)

No puedo convertirlo a ningún tipo de datos conocido. La diferencia entre los grupos incorporados y los grupos añadidos manualmente es la longitud del SID. Por ejemplo, el objectSID para un grupo personalizado es “S-1-5-21-978504927-3573220367-3221873571-1300”, y para un grupo incorporado es “S-1-5-32-548”.

Antes utilizaba DirectorySearcher y DirectoryEntry, y con estas clases obtenía en ambos casos una matriz de bytes válida como valor de retorno. ¿Hay algo que pueda hacer para que funcione? Por cierto, ya tengo la conversión de una matriz de bytes a una cadena legible 🙂

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Parece que el problema que estás enfrentando está relacionado con el formato del atributo objectSid para los grupos integrados en comparación con los grupos personalizados agregados. Mientras que el objectSid para los grupos personalizados agregados puede convertirse en un Byte[] válido y luego a otros tipos de datos, lo mismo no funciona para los grupos integrados.

    Una posible solución podría ser intentar convertir manualmente la cadena objectSid de los grupos integrados en un Byte[] y luego intentar convertirlo en un SecureIdentifier u otro tipo de dato. También podrías intentar utilizar un método diferente para obtener el objectSid de los grupos integrados, o contactar con el soporte de Microsoft para solicitar ayuda con este problema.

Comments are closed.