Возможно ли иметь проверку подлинности на основе Active Directory и откат к проверке подлинности на основе форм в ASP.NET MVC 3 - PullRequest
1 голос
/ 17 ноября 2011

У меня есть редизайн сайта, который я делаю на работе.Частью редизайна было переключение на фреймворк (MVC3), и я надеюсь добавить, что в защищенной области веб-сайта есть возможность автоматической аутентификации пользователей на основе нашего активного сервера каталогов.Тем не менее, у нас также есть клиенты, которым нужен доступ в определенные районыЯ хочу иметь откат к стандартной странице входа, которая вызывается только в том случае, если она не может пройти аутентификацию с помощью AD.Кто-нибудь делал это / вы нашли проблемы / etc ...

В настоящее время мы просто выполняем стандартные процедуры входа в систему, но я хотел бы упростить это для внутренних сотрудников.

РЕДАКТИРОВАТЬ: IВы рассматривали возможность создания отдельного проекта mvc3, который просто предназначен для внутреннего использования, но интересовался, возможно ли это для удобства обслуживания.

1 Ответ

3 голосов
/ 18 ноября 2011

Я думаю, что вы ищете аутентификация в смешанном режиме.

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

То, что я сделал, было:

В глобальном web.config (а не в views\web.config) введите:

<authentication mode="Forms">
  <forms loginUrl="~/Account/LogOn" timeout="2880" />
</authentication>

Так что по умолчанию это будет делать ваш контроллер аккаунта.

Тогда это мой контроллер:

[HttpGet]
public ActionResult LogOn()
{
    var loggedinUser = User.Identity.Name;

    // If the logged in user is not empty, the session is not new. 
    // so the user wants to manually log in.
    if (!string.IsNullOrEmpty(loggedinUser))
    {
        new SessionHelper(this).CleanupLeftoverCookies();
        return View();
    }

    // Else try to get the windows login name.
    loggedinUser = Request.ServerVariables["LOGON_USER"];

    // I stored my active directory domain in the settings file, you can probably do this programmatically too
    var domainName = Settings.Default.LDAPDomain;

    loggedinUser = loggedinUser.Replace(string.Format(CultureInfo.InvariantCulture, "{0}\\", domainName), string.Empty);

    // If there is no windows authentication either, let them login manually.
    if (string.IsNullOrWhiteSpace(loggedinUser))
    {
        return View();
    }

    // Else store the windows Authentication in a cookie
    if (ActiveDirectoryAuthentication(loggedinUser, false))
    {
        return RedirectToAction("Index", "Home");
    }
    else
    {
        ModelState.AddModelError(string.Empty, string.Format(CultureInfo.InvariantCulture, "Login using your windows account {0} failed. Please log in manually", loggedinUser));
        return View();
    }
    // And go back home.
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...