LDAP в ASP.NET Core: проверка учётных данных и вход в приложение
LDAP даёт доступ к каталогу; веб-приложение отдельно решает, как хранить факт входа пользователя и проверять права. В ASP.NET Core нет универсального встроенного обработчика с именем LdapAuthenticationHandler: такой пользовательский класс нужно полностью реализовать, а не просто зарегистрировать.
Версия и клиент
Материал относится к старому запросу о .NET6, поддержка которого завершена. Для нового проекта выберите поддерживаемый выпуск .NET и совместимую LDAP-библиотеку. Не смешивайте System.DirectoryServices.Protocols и Novell API: классы могут называться одинаково, но иметь разные сигнатуры.
Проверка каталога
- Установите защищённое соединение LDAPS либо StartTLS с проверкой сертификата. Передавать пароль простым bind по незашифрованной сети нельзя.
- Отклоните пустой пароль до bind: успешный anonymous/unauthenticated bind не доказывает личность.
- Если нужен поиск DN, используйте отдельную учётную запись только с необходимыми правами.
- Экранируйте значение username по правилам LDAP search filter. Непроверенная интерполяция (uid={username}) допускает инъекцию.
- После однозначного поиска выполните bind от имени найденного пользователя и обработайте отказ/таймаут.
Сеанс приложения
После проверки создайте только необходимые claims и используйте выбранную схему, например защищённую authentication cookie. Подключите authentication middleware перед authorization и применяйте [Authorize]/policies к нужным действиям. Отдельно защищайте форму входа от CSRF и перебора.
Не помещайте пароль администратора каталога в исходник, не отключайте проверку TLS и не пишите пароль в лог. До эксплуатации проверьте неверный/пустой пароль, специальный символ в имени, неоднозначный поиск и недоступность каталога. Эти проверки важнее неполного «готового» handler из статьи.