.net ldap не читает настраиваемые атрибуты 0x8000500c

Я пытаюсь создать функцию для своего .Net-приложения, чтобы иметь возможность разговаривать с сервером LDAP для чтения атрибутов пользователя и аутентификации пользователей. Я установил тестовый сервер каталогов с использованием OpenDS, добавил настраиваемые атрибуты и объекты и добавил пользователей с новыми типами объектов. Все работает нормально, пока я не попытаюсь прочитать значения настраиваемых атрибутов, я получаю:

{"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)

Я пробовал предложения из этого сообщения (при правильном использовании сформированные oids), а также этот пост (используя полное доменное имя в вашем ldap path - я использую что-то вроде LDAP: //mymachine.company.local / ...). Предлагали другие, поскольку код ошибки COM означает E_ADS_CANT_CONVERT_DATATYPE, что-то не так с моими атрибутами или схемой, но атрибуты настроены как DirectoryString, что есть другие поля по умолчанию того же типа, которые я могу прочитать.

Я понимаю, что работа с OpenDS не будет работать так же, как с Active Directory, у меня есть отдельный модуль для AD, который работает нормально, мне просто интересно, имел ли кто-нибудь опыт общения с реализациями OpenDS или Sun One LDAP.

Мысли? Я не могу найти в Google много информации, связанной с OpenDS и .NET вместе, что заставляет меня думать, что я должен делать что-то еще. Как я уже сказал, AD работает нормально, но мне бы очень хотелось иметь возможность делать это и с OpenDS.

Спасибо!

Расти


person rusty    schedule 12.06.2012    source источник


Ответы (2)


Используйте заведомо исправный инструмент, такой как ldapsearch, чтобы убедиться, что клиент LDAP действительно может запрашивать и получать требуемые записи и атрибуты. Например:

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

Используйте те же параметры, что и в коде клиента LDAP. Если вышеуказанный поиск завершается успешно, значит, сервер настроен правильно, записи присутствуют, а идентификатор аутентификации имеет разрешение на получение этих записей и настраиваемых атрибутов. В противном случае они могут быть проблемой в коде клиента LDAP.

смотрите также

person Terry Gardner    schedule 12.06.2012
comment
Привет, Терри, спасибо за предложение. Я использовал утилиту ldapsearch, установленную с OpenDS, и вроде все в порядке. Я также загрузил Apache Directory Studio, и у меня нет проблем с чтением настраиваемых атрибутов. Я начинаю думать, что стандартные библиотеки .net DirectoryServices просто не подходят для этого .... да. - person rusty; 12.06.2012

У меня была эта ошибка при попытке прочитать строку с несколькими значениями из базы данных Linux OpenLdap.

Это похоже на ошибку, поскольку я обнаружил, что ошибка возникает в XP и Server 2003, но один и тот же код в Windows 7 и Server 2008 возвращает значения, независимо от установленных версий .NET.

Однако я нашел обходной путь для C # с использованием более прямого доступа. В дополнение к Directory.Services вам нужно будет добавить ссылку, COM, «Библиотеку типов Active DS».

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);
}

Это было собрано для моих собственных простых нужд, вот полный вспомогательный класс, используемый в качестве справочника, а также AdsType Enums < / а>.

person WhoIsRich    schedule 22.08.2012