SmartQuery /ВОПРОС → ПРИМЕР → ПОНЯТНЫЙ ОТВЕТ
Сети и безопасность

LDAP в ASP.NET Core: проверка учётных данных и вход в приложение

LDAP даёт доступ к каталогу; веб-приложение отдельно решает, как хранить факт входа пользователя и проверять права. В ASP.NET Core нет универсального встроенного обработчика с именем LdapAuthenticationHandler: такой пользовательский класс нужно полностью реализовать, а не просто зарегистрировать.

Версия и клиент

Материал относится к старому запросу о .NET6, поддержка которого завершена. Для нового проекта выберите поддерживаемый выпуск .NET и совместимую LDAP-библиотеку. Не смешивайте System.DirectoryServices.Protocols и Novell API: классы могут называться одинаково, но иметь разные сигнатуры.

Проверка каталога

  1. Установите защищённое соединение LDAPS либо StartTLS с проверкой сертификата. Передавать пароль простым bind по незашифрованной сети нельзя.
  2. Отклоните пустой пароль до bind: успешный anonymous/unauthenticated bind не доказывает личность.
  3. Если нужен поиск DN, используйте отдельную учётную запись только с необходимыми правами.
  4. Экранируйте значение username по правилам LDAP search filter. Непроверенная интерполяция (uid={username}) допускает инъекцию.
  5. После однозначного поиска выполните bind от имени найденного пользователя и обработайте отказ/таймаут.

Сеанс приложения

После проверки создайте только необходимые claims и используйте выбранную схему, например защищённую authentication cookie. Подключите authentication middleware перед authorization и применяйте [Authorize]/policies к нужным действиям. Отдельно защищайте форму входа от CSRF и перебора.

Не помещайте пароль администратора каталога в исходник, не отключайте проверку TLS и не пишите пароль в лог. До эксплуатации проверьте неверный/пустой пароль, специальный символ в имени, неоднозначный поиск и недоступность каталога. Эти проверки важнее неполного «готового» handler из статьи.

Документация