Авторизация пользователей в ASP.NET Identity

Данное руководство устарело. Актуальное руководство: Руководство по ASP.NET Core

Последнее обновление: 07.12.2015

Для создания инфраструктуры для входа пользователей на сайт вначале добавим в проект в папку Models специальную модель LoginModel:

public class LoginModel
{
    [Required]
    public string Email { get; set; }
    [Required]
    [DataType(DataType.Password)]
    public string Password { get; set; }
}

В прошлой теме у нас уже был добавлен контроллер AccountController. Теперь же добавим в него следующие строки:

private IAuthenticationManager AuthenticationManager
{
    get
    {
        return HttpContext.GetOwinContext().Authentication;
    }
}

public ActionResult Login(string returnUrl)
{
    ViewBag.returnUrl = returnUrl;
    return View();
}

[HttpPost]
[ValidateAntiForgeryToken]
public async Task<ActionResult> Login(LoginModel model, string returnUrl)
{
    if (ModelState.IsValid)
    {
        ApplicationUser user = await UserManager.FindAsync(model.Email, model.Password);
        if (user == null)
        {
            ModelState.AddModelError("", "Неверный логин или пароль.");
        }
        else
        {
            ClaimsIdentity claim = await UserManager.CreateIdentityAsync(user, 
									DefaultAuthenticationTypes.ApplicationCookie);
            AuthenticationManager.SignOut();
            AuthenticationManager.SignIn(new AuthenticationProperties
            {
                IsPersistent = true
            }, claim);
			if (String.IsNullOrEmpty(returnUrl))
                return RedirectToAction("Index", "Home");
            return Redirect(returnUrl);
        }
    }
    ViewBag.returnUrl = returnUrl;
    return View(model);
}
public ActionResult Logout()
{
    AuthenticationManager.SignOut();
    return RedirectToAction("Login");
}

Вначале определяется новое свойство, представляющее объект IAuthenticationManager, с помощью которого мы будем управлять входом на сайт. Для этого интерфейс IAuthenticationManager определяет два метода:

  • SignIn(): создает аутентификационные куки

  • SignOut(): удаляет аутентификационные куки

В Get-версии метода Login мы получаем адрес для возврата и передаем его в преставление.

В Post-версии метода Login получаем данные из представления в виде модели LoginModel и по ним пытаемся получить пользователя из бд с помощью метода UserManager.FindAsync(model.Email, model.Password). Этот метод возвращает объект ApplicationUser в случае успеха поиска.

AspNet Identity использует аутентификацию на основе объектов claim. Поэтому нам надо сначала создать объект ClaimsIdentity, который представляет реализацию интерфейса IIdentity в AspNet Identity. Для создания ClaimsIdentity применяется метод CreateIdentityAsync()

И на финальном этапе вызывается метод AuthenticationManager.SignIn(), в который передается объект конфигурации аутентификации AuthenticationProperties, а также ранее созданный объект ClaimsIdentity. Свойство IsPersistent позволяет сохранять аутентификационные данные в браузере даже после закрытия пользователем браузера.

И метод Logout просто удаляет аутентификационные куки в браузере, как бы делая выход из системы.

Представление логина может выглядеть так:

@model AspNetIdentityApp.Models.LoginModel

@{
    ViewBag.Title = "Login";
}

<h2>Вход на сайт</h2>


@using (Html.BeginForm()) 
{
    @Html.AntiForgeryToken()
    
    <div>
        @Html.ValidationSummary()
        <input type="hidden" name="returnUrl" value="@ViewBag.returnUrl" />
        <p>
            <label>Email</label><br />
            @Html.EditorFor(x => x.Email)
        </p>
        <p>
            <label>Пароль</label><br />
            @Html.EditorFor(x => x.Password)
        </p>
        <p><button type="submit">Войти</button></p>
    </div>
}
Логин в Asp.Net Identity
Помощь сайту
Юмани:
410011174743222
Перевод на карту
Номер карты:
4048415020898850