Аутентификация Active Directory - PullRequest
       22

Аутентификация Active Directory

1 голос
/ 26 августа 2011

Я сделал одно веб-приложение на asp.net. В моем проекте аутентификация была выполнена путем сопоставления имени пользователя и пароля в базе данных. Но теперь клиент запрашивает у меня автоматический вход в приложение с помощью аутентификации Active Directory. Спросите клиента, предложите мне использовать идентификатор электронной почты пользователя в AD для аутентификации.

Я пытался получить записи в AD, я мог получить полное имя пользователя, но не смог получить идентификатор электронной почты,

Я попробовал код:

 System.Security.Principal.WindowsIdentity wi = System.Security.Principal.WindowsIdentity.GetCurrent();
  string[] a = Context.User.Identity.Name.Split('\\');

  System.DirectoryServices.DirectoryEntry ADEntry = new System.DirectoryServices.DirectoryEntry("WinNT://" + a[0] + "/" + a[1]);
  string Name = ADEntry.Properties["FullName"].Value.ToString();

Более того, я использую DirectorySearcher, но он генерирует ошибку «Ошибка при поиске записи на клиентском сервере».

Ответы [ 2 ]

1 голос
/ 29 июля 2015

У меня была точно такая же ситуация при создании портала для компании.Если они не хотят, чтобы вы входили в их AD, тогда вы можете запросить NTLogins людей, которым будет предоставлен доступ к порталу.создайте простую таблицу с NTLogin и просто авторизуйтесь, используя систему, из которой осуществляется доступ к порталу.Посмотрите пример кода, который я использовал.

// Checking if the user opening this page is listed in the allowed user list against their NT login.
        String sUser = Request.ServerVariables["LOGON_USER"].ToLower();
        sUser = sUser.Replace("wt\\", "");

        //Authentication using a custom auth method.
        DatabaseOperations authenticateUser = new DatabaseOperations();
        if (!authenticateUser.authenticate(sUser))
        {
            //unauthorized users will be redirected to access denied page.
            Server.Transfer("AccessDenied.aspx", true);
        }

И убедитесь, что у вас есть режим аутентификации для окон в вашем файле web.config

<authentication mode="Windows"></authentication>

Надеюсь, это поможет.

0 голосов
/ 26 августа 2011

Для чтения данных AD я использую этот класс. Это настройка для нашей AD, но в основном вы можете просто передать все «поля», которые вы хотите найти, в параметрах. Но вам нужно знать, какое поле содержит адрес электронной почты. Sysinternals сделал довольно хороший инструмент для просмотра AD, чтобы выяснить, что вы ищете, под названием ADExplorer.

Но я не понимаю, зачем тебе искать в AD? Разве вы не можете предположить, что пользователь уже прошел проверку подлинности, если он находится в сети, а затем полагаться на идентичность Windows?

    public static Hashtable GetAttributes(string initials, params string[] Attribute)
{
    DirectoryEntry directoryEntry = new DirectoryEntry("LDAP://ADNAME");
    DirectorySearcher ADSearcher = new DirectorySearcher(directoryEntry);
    ADSearcher.Filter = "(sAMAccountName=" + initials + ")";
    foreach (string para in Attribute)
    {
        ADSearcher.PropertiesToLoad.Add(para);
    }
    SearchResult adSearchResult = ADSearcher.FindOne();

    Hashtable hshReturns = new Hashtable();
    foreach (string para in Attribute)
    {
        string strReturn = "";
        if (adSearchResult.Properties[para].Count == 0)
            strReturn = "";
        else
            strReturn = ((ResultPropertyValueCollection)adSearchResult.Properties[para])[0].ToString();
        hshReturns.Add(para, strReturn);
    }
    return hshReturns;
}
...