LDAP Создайте двух пользователей с одинаковыми именами в разных подразделениях. - PullRequest
0 голосов
/ 22 мая 2018

В моем AD я не могу войти после того, как создал двух пользователей с одним и тем же именем пользователя - Alex в другом OU.Они имеют разные sAMAccountName.

Ошибка:

Метод вызова - auehtnticateUser.System.DirectoryServices.DirectoryServicesCOMException (0x8007052E): Неверное имя пользователя или пароль.

в System.DirectoryServices.DirectoryEntry.Bind (Boolean throwIfFail) в System.DirectoryServices.DirectoryEntry.Bind ()
в системеАтрибутПохоже, можно иметь одно и то же имя пользователя в разных подразделениях на основе этой ссылки Требование уникального имени в AD А у моих пользователей уникальные DN.

Проблема исчезла, как только я удалил однопользователей в любом подразделении.

Мой код выглядит следующим образом:

public string AuthenticateUser(string ldapPath, string dn, string
userName, string pwd, bool isAuthenticated)
    {
            string entryPath = (dn.Trim() == string.Empty) ? ldapPath : entryPath = ldapPath + '/' + dn;

            StringBuilder sb = new StringBuilder();
            AuthenticationTypes checkState;
            DirectoryEntry searchRoot;
            if (isAuthenticated)
            {
                checkState = AuthenticationTypes.Secure;
                searchRoot = new DirectoryEntry(entryPath, userName, pwd, checkState);
            }
            else
            {
                checkState = AuthenticationTypes.None;
                searchRoot = new DirectoryEntry(entryPath, "", "", checkState);
            }

            // Here starts the query
            DirectorySearcher search = new DirectorySearcher(searchRoot)
            {
                SearchScope = System.DirectoryServices.SearchScope.Subtree,
                Filter = "(&" +
                    "(objectClass=person)" +
                    "(cn=" + userName + ")" + 
                ")"
            };
            search.PropertiesToLoad.Add("dn");
            search.PropertiesToLoad.Add("cn");
            search.PropertiesToLoad.Add("distinguishedname");
            SearchResult result = search.FindOne();
           //the rest is how the result being handled.

Строка поиска.FindOne () - это место, где выдается ошибка.Я пытался:

  1. Использование точного DN для аутентификации Например, OU = Team1, OU = DepartmentA, DC = RMS, DC = com (только один Алекс)

  2. Снимите фильтр для поискового прицела.

Может ли кто-нибудь поделиться некоторым светом, если вы уже сталкивались с этим раньше.Спасибо

1 Ответ

0 голосов
/ 22 мая 2018

Действия выглядят согласованными, поскольку FindOne () говорит:

Если во время поиска найдено более одной записи, возвращается только первая запись.Если не найдено записей, соответствующих критериям поиска, возвращается пустая ссылка (Nothing в Visual Basic).

Итак, как узнать, какая запись найдена?(т.е. совпадают ли ваши пароли Алекса?)

Вам необходимо определить стратегию для обработки двух идентификаторов пользователей с одинаковыми значениями cn (RDN).

Как правило, это не очень хорошая идеяКогда Alex (1) не может войти в систему, он может запросить сброс пароля. Хотя он знает свой пароль, но его вход в систему идет против Alex (2).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...