Аутентификация против AD LDS - PullRequest
3 голосов
/ 14 февраля 2012

Я только что установил AD LDS на моем ПК разработчика, и все работает найти, я даже создал пользователя "abc" через ADSI Edit.

Моя цель - протестировать мой ASP.NET Mvc 3веб-приложение с моим тестовым экземпляром AD LDS.

Как я могу заставить приложение аутентифицировать пользователя на этом экземпляре?Должен ли я написать собственный поставщик членства?(переопределяет некоторые вещи в стандартном поставщике членства AD?)

Спасибо за любую помощь!

Ответы [ 2 ]

0 голосов
/ 20 ноября 2012

Поскольку вы используете AD LDS, я не думаю, что режим аутентификации "Windows" будет таким полезным. Я считаю, что вам необходимо создать вид входа в систему (здесь / Аккаунт / Вход в систему) и использовать режим аутентификации «Формы».

Введите следующую информацию в web.config

<authentication mode="Forms">
  <forms name=".ADAuthCookie" loginUrl="~/Account/Logon" timeout="30" slidingExpiration="false" protection="All"/>
</authentication>

<authorization>
  <deny users="?"/>
</authorization>    

Аутентификация пользователя может быть выполнена с помощью System.DirectoryServices.AccountManagement. Код контроллера должен выглядеть примерно так:

public ActionResult Logon(LogonModel model)
{
    if (model.Username != null && model.Password != null)
    {

        string container = "CN=...,DC=....,DC=...."; //Your container in LDS 
        string ldapserver = "server:port"; //LDS server

        PrincipalContext context = new PrincipalContext(
            ContextType.ApplicationDirectory, 
            ldapserver, 
            container, 
            ContextOptions.SimpleBind);


        bool authenticate = context.ValidateCredentials(string.Format("CN={0},{1}", model.Username, container), model.Password, ContextOptions.SimpleBind);

        if (authenticate)
        {
            FormsAuthentication.RedirectFromLoginPage(model.Username, false);
        }
        else
        {
            System.Threading.Thread.Sleep(5000);
            this.ModelState.AddModelError("Password", "Wrong username or password");
        }
    }

    return View("Logon", new LogonModel { Username = model.Username });
}

Обратите внимание, что это ТОЛЬКО решает аутентификацию, а не авторизацию.

Вы также можете использовать членство поставщиков, но если вы ищете простое решение, я думаю, что это должно сработать.

0 голосов
/ 20 ноября 2012

Вам не нужно выполнять какую-либо аутентификацию, поскольку она обрабатывается iis.Все, что вам нужно сделать, это изменить режим аутентификации на Windows.

   <system.web>
      <authentication mode="Windows" />
   </system.web>

Не забудьте либо установить iis после после установки AD, либо зарегистрировать его вручную.

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