vinaykool Ответов: 1

LDAP-аутентификации пользователей через поисковик каталога в C#


We have an web application developed using c#(VS 2008/3.5 framework). The application uses the mode of authentication as "Windows" with a service account present in domain (Domain1) to run the application as ASP.Net user. We have authentication to be done for the users present in different domain (Domain 2). When authentication is done using the directory services(Directory searcher), we are able to connect to LDAP of domain1 and bind it, so that user is authenticated. Also, the user is able to be authenticated if the user has been migrated from domain1 to domain 2. However, if there is a user id directly created in domain 2, then application is not able to bind to Domain2 (during the LDAP authentication) and hence, this user is not being authenticated by the application. Please suggest the solution regarding the same.
<authentication mode="Windows" />
<identity impersonate="true" username="domain1\svc_acc" password="***" />

public bool ValidateUidPwdAndGetUserTypeGlobal(string TPXId, string password)
        {

            string strADPath = "LDAP://a.b.c/dc=a,dc=b,dc=c";
            try
            {
                DirectoryEntry objDirEntry = new DirectoryEntry(strADPath, TPXId, password);
                
                DirectorySearcher search = new DirectorySearcher(objDirEntry);
                search.Filter = "(samaccountname=" + TPXId + ")";
                SearchResult result = search.FindOne();
                if (null == result)
                {
                    return false;
                }
                else
                    return true;
            }
            catch (Exception ex)
            {
                return false;
            }
        }

Исключение, созданное во время аутентификации LDAP: Неизвестное имя пользователя или неверный пароль.

1 Ответов

Рейтинг:
0

David_Wimbley

Таким образом, похоже, что все, что вы хотите сделать, это аутентифицировать пользователя в active directory правильно? Если это так то этот фрагмент будет работать

Способ для объявлений авт

using System.DirectoryServices;

public static bool IsAuthenticated(string ldap, string usr, string pwd)
{
    bool authenticated = false;

    try
    {
        DirectoryEntry entry = new DirectoryEntry(ldap, usr, pwd);
        object nativeObject = entry.NativeObject;
        authenticated = true;
    }
    catch (DirectoryServicesCOMException cex)
    {
        Console.WriteLine(cex);
    }
    catch (Exception ex)
    {
        Console.WriteLine(ex);
    }
    return authenticated;
}


Затем, чтобы выполнить ваш сценарий, если пользователь использует первый сервер LDAP (domain1) и он не аутентифицируется, он автоматически попытается использовать второй сервер LDAP (domain2) для аутентификации. Первая строка LDAP-это то, что вы предоставили в своем примере, а затем предположите, что строка LDAP для domain2 отличается, а затем просто поместите ее в часть else if. Это затем аутентифицирует пользователя на первом сервере, терпит неудачу, затем аутентифицируется на втором сервере и предположительно проходит, если пользователь действителен.

bool returnAuth = false;
string returnServer = null;

if(IsAuthenticated("LDAP://a.b.c/dc=a,dc=b,dc=c", "domain2\user", "domain1pass"))
{
    returnAuth = true;
    returnServer = "Domain One Auth";
}
else if(IsAuthenticated("LDAP://a2.b2.c2/dc=a2,dc=b2,dc=c2", "domain2\user", "domain1pass"))
{
    returnAuth = true;
    returnServer = "Domain Two Auth";
}


Mukund Thakker

Дорогой Дэвид,

Как передать IP-адрес сервера домена вместе с моим доменным именем?

David_Wimbley

Если я правильно вас понимаю, вы проходите один или другой, а не оба. Пример: домен google.com сопоставление с IP-адресом. Используя DHCP, он сопоставит доменное имя с IP-адресом.

Если вы имеете в виду только домен экземпляра AD, то это будет "domain2" в имени пользователя.

Mukund Thakker

Я хочу обеспечить функциональность входа в приложение с несколькими доменами Active Directory.
Я получаю ниже ошибку, когда пытаюсь войти в систему (передавая доменное имя, имя пользователя, пароль) с доменом, который не находится в DNS по умолчанию,
Исключение :сервер не работает.
Стек : в системе at.Каталог.Класс directoryentry.Персонализация(логическое throwIfFail)
в системе.Каталог.Класс directoryentry.Персонализация()
в системе.Каталог.Класс directoryentry.get_NativeObject()

Поэтому я думаю, что домен не найден или, возможно, он не разрешен для отображения IP-адреса.

David_Wimbley

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