Реализация блокировки учетной записи ActiveDirectory после n попыток в WCF
Я разрабатываю службу WCF, которая может использоваться мобильными приложениями для аутентификации пользователей в корпоративной экстрасети ActiveDirectory. Я использую настроенную версию этой реализации от Microsoft. Мне нужно реализовать логику блокировки учетной записи, чтобы после n попыток учетная запись в ActiveDirectory блокировалась.
Я попытался с помощью службы WCF с полным состоянием, чтобы отслеживать неудачные входы в систему. Но клиент может начать со следующего сеанса и продолжить атаку.
Я знаю, что политика ActiveDirectory может быть установлена для принудительного применения этого, но просто запрос AD - как решение Microsoft делает для аутентификации пользователя - не блокирует пользователя.
Итак, я с нетерпением жду решения, которое будет работать, как при входе в Windows с неверным паролем в течение n раз, когда учетная запись будет заблокирована в соответствии с политикой, установленной в AD.
2 ответа
Есть два основных способа сделать это:
- Вы продолжаете метод поиска в каталоге, который используете, но отслеживаете количество входов в систему для каждого пользователя в пользовательской базе данных и проверяете эту базу данных перед выполнением поиска в каталоге.
- Вместо этого используйте логин Windows и положитесь на AD, чтобы заблокировать пользователя. Описание процедуры проверки: Active Directory (LDAP) - проверка учетной записи заблокирована / срок действия пароля истек
редактировать
После просмотра комментария marc_s я не уверен, что поиск по каталогу будет заблокирован или нет. На самом деле это была бы серьезная дыра в безопасности, если бы вы могли попробовать бесконечное количество раз. Но вам потребуется учетная запись, которой разрешено запрашивать AD, прежде чем вы сможете ее использовать.
Код, на который вы ссылались, содержал эту строку
object obj = entry.NativeObject
Который должен был заставить аутентификацию. Вы включили эту строку?
Я не видел ваш код. Я предполагаю, что у вас есть подобное решение, которое реализовано в этом примере, посмотрите на эту ссылку
В приведенном выше примере, пожалуйста, посмотрите на строку
DirectoryEntry entry = new DirectoryEntry(_path, domainAndUsername, pwd);
этот объект записи будет использоваться для аутентификации при выполнении поискового вызова в активном каталоге.
Если вы используете пользователя / пароль, который вы хотите аутентифицировать, вам не нужно беспокоиться о блокировке его вашим кодом. Политики Active Directory будет достаточно.
Но после прочтения вашего комментария, я думаю, у вас есть один конкретный пользователь, который вы используете для поиска пользователей мобильных приложений, чтобы проверить, существуют ли они в вашем активном каталоге или нет. Если это действительно так, вы никогда не проходите аутентификацию на мобильных пользователях, поэтому эти пользователи никогда не будут блокироваться автоматически.
Мне было бы интересно узнать ваш ответ.