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

Пользовательская аутентификация и ASP.NET MVC

У меня есть встроенное веб-приложение, встроенное в ASP.NET 4. Мы застряли в использовании API аутентификации, созданного другой командой. Если пользователь сайта успешно прошел аутентификацию для сайта, я хотел бы предоставить им доступ ко всему сайту.

В ASP.NET дни WebForm я просто использовал для сохранения пользовательского объекта User в сеансе. Если этот объект был пустым, я знал, что пользователь не прошел проверку подлинности. Есть ли подобный, но улучшенный метод для этого в MVC. Я не хочу, если возможно, создавать собственный поставщик модели членства ASP.NET. Каков самый простой способ сделать это?

4b9b3361

Ответ 1

Вы можете использовать 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");
}

Ответ 2

Вероятно, вы захотите создать настраиваемый фильтр авторизации. Вот пример: Пользовательские фильтры в 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());

Ответ 3

Вы можете попробовать что-то вроде этого:

FormsAuthentication.SetAuthCookie(username, rememberMe);

чтобы установить cookie для аутентифицированного пользователя, просто используйте атрибут [Authorize] на контроллере или действии, которые нуждаются в аутентификации.

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

Ответ 4

Все, что вы можете сделать в формах, которые вы можете сделать в MVC, просто установите переменную сеанса в действии входа в контроллер.

Или вы можете сделать это:   В действии входа добавьте formsauthentication.setauthcookie("username")

После этого любое действие с ключевым словом [Authorize] позволит текущему пользователю.

Ответ 5

Вы можете выполнить Аутентификацию сеанса, просто поместив значение переменной сеанса, когда логин будет успешным. Например,

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>

Я использую этот метод в панели администрирования приложения.