LDAP — не удается получить доступ к каталогу

#c# #model-view-controller #ldap #directoryservices

#c# #модель-представление-контроллер #ldap #directoryservices

Вопрос:

У меня есть ASP.NET Проект MVC, использующий LDAP для аутентификации пользователей. На сервере разработки аутентификация работает, но в рабочей среде она не работает.

Я развернул проект до начала производства, проблем с LDAP нет. Затем я снова развернул, но перед развертыванием обновил весь пакет в диспетчере пакетов NuGet. Но это не работает.

Прежде чем я развернул новый проект с обновленным пакетом, я уже протестировал его на сервере разработки, ничего не пошло не так. Кажется, проблема в том, что я не могу получить доступ к пути LDAP на рабочем сервере.

Вот <appSettings> раздел:

 <appSettings>
    <add key="FolderPath" value="Files/" />
    <add key="DirectoryPath" value="LDAP://blabla.bla.bla:389/CN=Users,DC=blabla,DC=bla,DC=bla" />
    <add key="DirectoryDomain" value="bla" />
    <add key="UserPermission" value="blabla" />
</appSettings>
  

Вот код аутентификации

 public bool AuthenticateUser(string domain, string username, string password, string LdapPath, string userPermission)
{         
    string domainAndUsername = domain   @""   username;

    DirectoryEntry entry = new DirectoryEntry(LdapPath, domainAndUsername, password);

    try
    {
        Object obj = entry.NativeObject;

        DirectorySearcher search = new DirectorySearcher(entry);
        search.Filter = "(SAMAccountName="   userPermission   ")";
        search.PropertiesToLoad.Add("cn");

        SearchResult result = search.FindOne();

        if (null == result)
        {
            return false;
        }

        LdapPath = result.Path;
        string _filterAttribute = (String)result.Properties["cn"][0];

        if (_filterAttribute != userPermission) 
            return false;
    }
    catch (Exception ex)
    {
        return false;
        throw new Exception("Error authenticating user. "   ex.Message);
    }

    return true;
}
  

Единственными настройками различий между разработкой и производством являются значения DirectoryPath и UserPermission .

Извините за мой плохой английский.

Спасибо.

Комментарии:

1. Какую ошибку вы получаете при ее выполнении?

2. @Anand извините, я не зарегистрировал ошибку на рабочем сервере. Я думаю, что проблема в DirectoryEntry, потому что я пытался войти в систему 3 раза в новом проекте, затем я меняю проект на старый и снова вхожу в систему, тогда он работает. Я делаю это, потому что хочу посмотреть, передается ли DirectoryEntry в новом проекте, потому что, если я введу неправильный проход 3 раза в LDAP, учетная запись будет заблокирована, поэтому я не смогу войти в систему, даже если я изменю проект на новый. Надеюсь, вы понимаете. Спасибо.

Ответ №1:

Во-первых, глупый вопрос, используют ли разработчики и производственный сервер один и тот же DNS?
Если нет, можно ли разрешить «blabla.bla.bla» с помощью DNS, используемого рабочим сервером (просто попробуйте выполнить поиск «blabla.bla.bla»)?

Если DNS не может разрешить имя, ему не удастся подключиться.