Я думаю, что вы ищете аутентификация в смешанном режиме.
Подобные вопросы были заданы, вот так. и принятый ответ - это невозможно, однако я знаю, что это можно сделать, потому что я делал проект в смешанном режиме. аутентификация тоже.
То, что я сделал, было:
В глобальном 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.
}