Если у кого-то есть похожая история, пожалуйста, опубликуйте подробности ниже!
Я создаю веб-сайт ASP.NET, который должен поддерживать аутентификацию по LDAP.
В Windows аутентификация LDAP может выполняться через Active Directory (я не эксперт, но AD, кажется, просто особый вариант ldap). Я не управляю серверами AD и / или LDAP.
Я пробовал различные способы аутентификации, но я остановился на использовании одного DirectoryEntry
для каждой попытки аутентификации:
using (DirectoryEntry de = new DirectoryEntry(ldapPath, ldapUsername, password, AuthenticationTypes.ServerBind)) {
try {
// Bind to the native AdsObject to force authentication.
object obj = de.NativeObject;//not IDisposable
} catch(...
Извлечение NativeObject вызывает COMException
, если что-то пойдет не так, например, если аутентификация не удалась, исключение напоминает «Ошибка входа в систему: неизвестное имя пользователя или неверный пароль», и если сервер ldap недоступен или время что-то вроде «Сервер не работает.»
В принципе, это работает, но через переменное количество дней, которое всегда запускается первым утром, мы получаем «Сервер не работает». пока IIS не будет перезапущен. Очевидно, что это не очень хорошее долгосрочное решение, но, насколько я могу судить, ошибка кроется в Com-объекте, лежащем в основе DirectoryEntry, а не в том, что легко исправить.
Эта проблема не новая или неизвестная . Некоторые люди прошли через поддержку Microsoft со смешанными результатами; в основном ответы, похоже, сводятся к тому, чтобы «выбрать путь ldap и создать несколько эквивалентных альтернатив, и, возможно, один из них сработает». Каждый раз, когда вы пытаетесь или, конечно, в течение нескольких дней вы не узнаете, действительно ли это сработало, и пока не будет найдено реальное решение, мы вернемся к «перезагрузке Windows-серверов каждую ночь».
Для начала я попробовал пути ldap в формате
* "LDAP://server.uri:636"
* "LDAP://insecure.server.uri:389"
* "LDAP://server.uri:636/cn=username,ou=staff,o=myOrganisation,c=org"
Всегда с именем пользователя со следующим шаблоном:
* "cn=username,ou=staff,o=myOrganisation,c=org"
Все эти методы вначале работают, но перестают работать через переменное количество дней (и начинают работать после сброса IIS). Сервер работает под управлением IIS6 на win 2k3.
Если у кого-то еще есть такие проблемы, пожалуйста, напишите ниже, и, возможно, в конечном итоге мы найдем шаблон для работы или у нас будет достаточное количество примеров, чтобы убедить Microsoft исправить это.