Подтвердить что ты не робот

ASP.NET MVC - аутентифицировать пользователей в Active Directory, но требует ввода имени пользователя и пароля

Я разрабатываю приложение MVC3, которое потребует от пользователя аутентификации против AD. Я знаю, что в MVC3 есть возможность создать приложение Intranet, которое автоматически аутентифицирует пользователя против AD, но использует Windows Authentication и автоматически регистрирует их. Это приложение может быть доступно на рабочих станциях "Открыть", где пользователю необходимо будет ввести свое имя пользователя и пароль. Любые примеры или онлайн-учебник были бы замечательными. Примерный проект будет исключительным.

4b9b3361

Ответ 1

Вы можете использовать стандартный шаблон интернет-приложения с проверкой подлинности форм и вставить ActiveDirectoryMembershipProvider в web.config:

<connectionStrings>
    <add name="ADConnectionString" connectionString="YOUR_AD_CONN_STRING" />
</connectionStrings>

<system.web>
    <authentication mode="Forms">
        <forms name=".ADAuthCookie" loginUrl="~/Account/LogOn" timeout="15" slidingExpiration="false" protection="All" />
    </authentication>
    <membership defaultProvider="MY_ADMembershipProvider">
        <providers>
            <clear />
            <add name="MY_ADMembershipProvider" type="System.Web.Security.ActiveDirectoryMembershipProvider" connectionStringName="ADConnectionString" attributeMapUsername="sAMAccountName" />
        </providers>
    </membership>
</system.web>

Таким образом вы получаете форму входа в шаблон интернет-приложения, и она проверяет наличие AD для вас.

Затем это просто вопрос очистки AccountController для удаления reset пароля/изменения пароля/регистрации, оставляя только вход в систему.

Ответ 2

Как упоминалось выше, вы можете использовать поставщик членства, определенный в файле web.config.

Код ниже находится в реализации "AccountController" из кода шаблона MVC 3 и был слегка изменен для работы с ActiveDirectory:

 [HttpPost]
    public ActionResult LogOn( LogOnModel model, string returnUrl )
    {
      if( ModelState.IsValid )
      {
        // Note: ValidateUser() performs the auth check against ActiveDirectory
        // but make sure to not include the Domain Name in the User Name
        // and make sure you don't have the option set to use Email Usernames.
        if( MembershipService.ValidateUser( model.UserName, model.Password ) )
        {
            // Replace next line with logic to create FormsAuthenticationTicket
            // to encrypt and return in an Http Auth Cookie or Session Cookie
            // depending on the 'Remember Me' option.
            //FormsService.SignIn( model.UserName, model.RememberMe );

            // Fix this to also check for other combinations/possibilities
            if (!String.IsNullOrEmpty(returnUrl))
            {
                return Redirect(returnUrl);
            }
            else
            {
                return RedirectToAction("Index", "Home");
            }
        }
        else
        {
            ModelState.AddModelError("", "The user name or password provided is incorrect.");
        }
    }

Если вы используете .NET 3.5 - прочитайте эту статью для альтернативы: