У меня есть встроенное веб-приложение, встроенное в ASP.NET 4
. Мы застряли в использовании API аутентификации, созданного другой командой. Если пользователь сайта успешно прошел аутентификацию для сайта, я хотел бы предоставить им доступ ко всему сайту.
В ASP.NET
дни WebForm я просто использовал для сохранения пользовательского объекта User в сеансе. Если этот объект был пустым, я знал, что пользователь не прошел проверку подлинности. Есть ли подобный, но улучшенный метод для этого в MVC
. Я не хочу, если возможно, создавать собственный поставщик модели членства ASP.NET. Каков самый простой способ сделать это?
Вы можете использовать Forms Authentication
в сочетании с Authorize
следующим образом:
Чтобы ограничить доступ к представлению:
Добавьте атрибут AuthorizeAttribute в объявление метода действия, как показано ниже,
[Authorize]
public ActionResult Index()
{
return View();
}
Настройка проверки подлинности форм в web.config
<authentication mode="Forms">
<forms loginUrl="~/Account/Login" timeout="2880" />
</authentication>
Вход в систему Действие: Установите файл cookie аутентификации, если он действителен.
[HttpPost]
public ActionResult Login(User model, string returnUrl)
{
//Validation code
if (userValid)
{
FormsAuthentication.SetAuthCookie(username, false);
}
}
Выход из системы Действие:
public ActionResult LogOff()
{
FormsAuthentication.SignOut();
return RedirectToAction("Index", "Home");
}
Вероятно, вы захотите создать настраиваемый фильтр авторизации. Вот пример: Пользовательские фильтры в MVC. Вы можете применить этот фильтр по всему миру в начале приложения (используя RegisterGlobalFilters
).
public class LegacyAuthorize : AuthorizeAttribute
{
public override void OnAuthorization(HttpActionContext actionContext)
{
if (HttpContext.Current.Session["User"] == null)
base.HandleUnauthorizedRequest(actionContext);
}
}
Тогда в вашем global.asax
у вас будет что-то вроде этого:
GlobalFilters.Filters.Add(new LegacyAuthorize());
Вы можете попробовать что-то вроде этого:
FormsAuthentication.SetAuthCookie(username, rememberMe);
чтобы установить cookie для аутентифицированного пользователя, просто используйте атрибут [Authorize]
на контроллере или действии, которые нуждаются в аутентификации.
Попробуйте искать по этой теме для получения дополнительной информации, вы найдете много информации об аутентификации и авторизации в MVC.
Все, что вы можете сделать в формах, которые вы можете сделать в MVC, просто установите переменную сеанса в действии входа в контроллер.
Или вы можете сделать это: В действии входа добавьте formsauthentication.setauthcookie("username")
После этого любое действие с ключевым словом [Authorize] позволит текущему пользователю.
Вы можете выполнить Аутентификацию сеанса, просто поместив значение переменной сеанса, когда логин будет успешным. Например,
public ActionResult Index(Models.Login login)
{
if (ModelState.IsValid)
{
Dal.Login dLogin = new Dal.Login();
string result = dLogin.LoginUser(login);
if (result == "Success")
Session["AuthState"] = "Authenticated";
}
return View();
}
Теперь трюк заключается в том, что у вас должна быть общая страница макета всех просмотров, на которые вы должны проверить наличие подлинности. И на этой странице макета просто проверяйте бритву таким образом -
<body>
@if (Session["AuthState"] != "Authenticated")
{
Response.Redirect("~/login");
}
// other html
</body>
Я использую этот метод в панели администрирования приложения.
FormsAuthenticationTicket
, вы можете использоватьRequest.IsAuthenticated
иUser.Identity
чтобы определить, вошел ли пользователь в систему. Также будет работать атрибутAuthorize
.