.net ldap opends leyendo atributos personalizados 0x8000500c

Estoy tratando de crear una función para mi aplicación .Net para poder hablar con un servidor LDAP para leer los atributos del usuario y autenticar a los usuarios. Configuré un servidor de directorio de prueba usando OpenDS, agregué atributos y objetos personalizados y agregué usuarios con los nuevos tipos de objetos. Todo funciona bien hasta que intento leer los valores de atributos personalizados, obtengo:

{"Unknown error (0x8000500c)"}
at System.DirectoryServices.PropertyValueCollection.PopulateList()
at System.DirectoryServices.PropertyValueCollection..ctor(DirectoryEntry entry, String propertyName)
at System.DirectoryServices.PropertyCollection.get_Item(String propertyName)

He intentado sugerencias de esta publicación (usando oides formados apropiadamente) así como esta publicación (usando un nombre de dominio completo en su ruta ldap; estoy usando algo como LDAP://mymachine.company.local/... ). Otros han sugerido que dado que el código de error COM significa E_ADS_CANT_CONVERT_DATATYPE, hay algún problema con mis atributos o esquema, pero los atributos están configurados como DirectoryString, que hay otros campos predeterminados del mismo tipo que puedo leer.

Entiendo que trabajar con OpenDS no funcionará igual que Active Directory, tengo un módulo separado para AD que funciona bien, solo me pregunto si alguien ha tenido experiencia hablando con implementaciones de OpenDS o Sun One LDAP.

¿Pensamientos? No puedo encontrar mucho en Google que trate con OpenDS y .NET juntos, lo que me hace pensar que debería estar haciendo otra cosa. Como dije, las cosas de AD funcionan bien, sin embargo, me gustaría poder hacer esto también con OpenDS.

¡Gracias!

oxidado

preguntado el 12 de junio de 12 a las 16:06

2 Respuestas

Utilice una buena herramienta conocida como ldapsearch para verificar que un cliente LDAP pueda solicitar y recibir las entradas y los atributos deseados. Por ejemplo:

ldapsearch --hostname hostname \
           --port port \
           --bindDn your-auth-id \
           --bindPassword credentials-for-your-auth-id \
           --useSSL     \
           --trustAll \
           --baseDn your-base-object \
           --searchScope the-scope-you-use \
           '(&)' \
           your-custom-attribute-names

Utilice los mismos parámetros que en el código de cliente LDAP. Si la búsqueda anterior tiene éxito, entonces el servidor está configurado correctamente, las entradas están presentes y el ID de autenticación tiene permiso para recuperar esas entradas y los atributos personalizados. De lo contrario, pueden ser un problema en el código del cliente LDAP.

véase también

Respondido el 12 de junio de 12 a las 18:06

Hola Terry, gracias por la sugerencia. Usé la utilidad ldapsearch instalada con OpenDS y todo parece estar bien. También descargué Apache Directory Studio y eso no tiene problemas para leer los atributos personalizados. Estoy empezando a pensar que las bibliotecas estándar de .net DirectoryServices simplemente no funcionarán para esto... sí. - oxidado

Tuve este error al intentar leer una cadena de varios valores de una base de datos OpenLdap de Linux.

Parece un error, ya que encontré que el error ocurre en XP y Server 2003, pero el mismo código en Windows 7 y Server 2008 devuelve los valores, independientemente de las versiones de .NET instaladas.

Sin embargo, encontré una solución alternativa para C# usando un acceso más directo. Además de Directory.Services, deberá agregar la referencia, COM, 'Biblioteca de tipos de DS activa'.

var dirEntry = new DirectoryEntry("ldapDn", "logonDn", "logonPass");
var nativeEntry = (ActiveDs.IADsPropertyList)dirEntry.NativeObject;
var propEntry = (ActiveDs.IADsPropertyEntry)nativeEntry.GetPropertyItem("attributeName", 3);
foreach (ActiveDs.IADsPropertyValue propValue in (object[])propEntry.Values)
{
    Debug.Print(propValue.CaseIgnoreString);
}

Esto fue elaborado para mis propias necesidades simples, aquí está la clase auxiliar completa utilizada como referencia y también el Enumeraciones de tipos de anuncios.

Respondido 22 ago 12, 18:08

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.