Введение в ASP.NET Identity

Система членства ASP.NET была введена с ASP.NET 2.0 еще в 2005 году, и с тех пор произошло много изменений в способах, которыми веб-приложения обычно обрабатывают проверку подлинности и авторизацию. ASP.NET Identity — это новый взгляд на систему членства при создании современных приложений для Интернета, телефона или планшета.

Общие сведения: членство в ASP.NET

Членство в ASP.NET

ASP.NET Членство было разработано для удовлетворения требований к членству на сайте, которые были распространены в 2005 году, включая проверку подлинности с помощью форм и базу данных SQL Server для имен пользователей, паролей и данных профилей. Сегодня существует гораздо более широкий набор вариантов хранения данных для веб-приложений, и большинство разработчиков хотят, чтобы их сайты использовали поставщиков удостоверений социальных сетей для проверки подлинности и авторизации. Ограничения структуры ASP.NET Membership затрудняют этот переход:

  • Схема базы данных была разработана для SQL Server, и вы не можете изменить ее. Вы можете добавить сведения о профиле, но дополнительные данные упаковываются в другую таблицу, что затрудняет доступ любым способом, кроме как через API поставщика профилей.
  • Система поставщика позволяет изменить резервное хранилище данных, но система разработана на основе предположений, подходящих для реляционной базы данных. Вы можете написать поставщик для хранения сведений о членстве в нереляционном механизме хранения, например в таблицах службы хранилища Azure, но затем необходимо обойти реляционную структуру, написав большой объем кода и множество исключений System.NotImplementedException для методов, которые не применяются к базам данных NoSQL.
  • Так как функции входа и выхода основаны на проверке подлинности с помощью форм, система членства не может использовать OWIN. OWIN включает компоненты ПО промежуточного слоя для проверки подлинности, включая поддержку входа с помощью внешних поставщиков удостоверений (например, учетных записей Майкрософт, Facebook, Google, Twitter) и входа с использованием учетных записей организации из локальная служба Active Directory или Azure Active Directory. OWIN также включает поддержку OAuth 2.0, JWT и CORS.

ASP.NET простое членство

ASP.NET простое членство было разработано как система членства для веб-страницы ASP.NET. Он был выпущен вместе с WebMatrix и Visual Studio 2010 с пакетом обновления 1 (SP1). Цель простого членства заключалась в том, чтобы упростить добавление функциональных возможностей членства в приложение веб-страниц.

Простое членство упростило настройку сведений профиля пользователя, но по-прежнему разделяет другие проблемы с ASP.NET членства и имеет некоторые ограничения:

  • Сохранить данные системы членства в нереляционном хранилище было трудно.
  • Его нельзя использовать с OWIN.
  • Она не работает с существующими поставщиками членства ASP.NET и не расширяема.

Универсальные поставщики ASP.NET

были разработаны универсальные поставщики ASP.NET, с тем чтобы обеспечить возможность сохранения информации о членстве в База данных SQL Microsoft Azure, и они также работают с SQL Server Compact. Универсальные поставщики были созданы на основе Entity Framework Code First, что означает, что универсальные поставщики можно использовать для сохранения данных в любом хранилище, поддерживаемом EF. С универсальные поставщики схема базы данных также была очищена довольно много.

Универсальные поставщики основаны на инфраструктуре членства ASP.NET, поэтому они по-прежнему имеют те же ограничения, что и у поставщика SqlMembership. То есть они были разработаны для реляционных баз данных, и их трудно настроить профиль и сведения о пользователях. Эти поставщики также по-прежнему используют проверку подлинности с помощью форм для входа и выхода.

ASP.NET Identity

По мере того как история членства в ASP.NET развивалась на протяжении многих лет, команда ASP.NET многое узнала на основе отзывов клиентов.

Предположение о том, что пользователи будут входить в систему, введя имя пользователя и пароль, которые они зарегистрировали в вашем приложении, больше не является допустимым. Интернет стал более социальным. Пользователи взаимодействуют друг с другом в режиме реального времени через социальные каналы, такие как Facebook, Twitter и другие социальные веб-сайты. Разработчики хотят, чтобы пользователи могли входить с помощью своих удостоверений социальных сетей, чтобы иметь богатый опыт работы на своих веб-сайтах. Современная система членства должна включать входы на основе перенаправления для поставщиков проверки подлинности, таких как Facebook, Twitter и другие.

По мере развития веб-разработки также развивались шаблоны веб-разработки. Модульное тестирование кода приложения стало основной задачей для разработчиков приложений. В 2008 году ASP.NET добавлена новая платформа, основанная на шаблоне модель—представление—контроллер (MVC), в частности, чтобы помочь разработчикам создавать модульные тестируемые приложения ASP.NET. Разработчики, которые хотели провести модульное тестирование логики приложения, также хотели иметь возможность сделать это с помощью системы членства.

Учитывая эти изменения в разработке веб-приложений, ASP.NET Identity была разработана со следующими целями:

  • Система удостоверений ASP.NET

    • ASP.NET Identity можно использовать со всеми платформами ASP.NET, такими как ASP.NET MVC, веб-формы, веб-страницы, веб-API и SignalR.
    • ASP.NET Identity можно использовать при создании веб-приложений, телефонов, магазинов или гибридных приложений.
  • Простота подключения данных профиля о пользователе

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

    • По умолчанию система удостоверений ASP.NET хранит все сведения о пользователе в базе данных. ASP.NET Identity использует Entity Framework Code First для реализации всего механизма сохраняемости.
    • Так как вы управляете схемой базы данных, часто выполняемые задачи, такие как изменение имен таблиц или тип данных первичных ключей, несложны.
    • Вы можете легко подключить различные механизмы хранения, такие как SharePoint, служба таблиц службы хранилища Azure, базы данных NoSQL и т. д., не вызывая System.NotImplementedExceptions исключений.
  • Возможность модульного тестирования

    • ASP.NET Identity делает веб-приложение более пригодным для модульного тестирования. Вы можете написать модульные тесты для частей приложения, использующих ASP.NET Identity.
  • Поставщик ролей

    • Существует поставщик ролей, который позволяет ограничить доступ к частям приложения по ролям. Вы можете легко создавать роли, например "Администратор", и добавлять пользователей в роли.
  • На основе утверждений

    • ASP.NET Identity поддерживает проверку подлинности на основе утверждений, где удостоверение пользователя представлено в виде набора утверждений. Утверждения позволяют разработчикам быть гораздо более выразительными при описании удостоверения пользователя, чем это позволяют роли. В то время как членство в роли является логическим (участником или не членом), утверждение может содержать подробные сведения об удостоверении и членстве пользователя.
  • Поставщики входа в социальные сети

    • Вы можете легко добавлять в приложение такие социальные входы, как учетная запись Майкрософт, Facebook, Twitter, Google и другие, и сохранять в приложении данные, относящиеся к конкретному пользователю.
  • Интеграция OWIN

    • ASP.NET проверка подлинности теперь основана на ПО промежуточного слоя OWIN, которое можно использовать на любом узле на основе OWIN. ASP.NET Identity не имеет никакой зависимости от System.Web. Это полностью совместимая платформа OWIN, которую можно использовать в любом размещенном приложении OWIN.
    • ASP.NET Identity использует проверку подлинности OWIN для входа и выхода пользователей на веб-сайте. Это означает, что вместо использования FormsAuthentication для создания файла cookie приложение использует OWIN CookieAuthentication.
  • Пакет NuGet

    • ASP.NET Identity распространяется в виде пакета NuGet, который устанавливается в ASP.NET MVC, веб-формы и веб-API, поставляемые с Visual Studio 2017. Этот пакет NuGet можно скачать из коллекции NuGet.
    • Выпуск ASP.NET Identity в виде пакета NuGet упрощает команде ASP.NET итерацию новых функций и исправлений ошибок и предоставляет их разработчикам в гибком режиме.

Начало работы с удостоверением ASP.NET

ASP.NET Identity используется в шаблонах проектов Visual Studio 2017 для ASP.NET MVC, веб-формы, веб-API и SPA. В этом пошаговом руководстве мы покажем, как шаблоны проектов используют ASP.NET Identity для добавления функциональных возможностей для регистрации, входа и выхода пользователя.

ASP.NET Identity реализуется с помощью следующей процедуры. Цель этой статьи — дать вам общий обзор ASP.NET identity; Вы можете выполнить его пошаговую инструкцию или просто прочитать подробные сведения. Более подробные инструкции по созданию приложений с помощью ASP.NET Identity, включая использование нового API для добавления пользователей, ролей и сведений профиля, см. в разделе Дальнейшие действия в конце этой статьи.

  1. Создайте приложение MVC ASP.NET с отдельными учетными записями. Удостоверение ASP.NET можно использовать в ASP.NET MVC, веб-формы, веб-API, SignalR и т. д. В этой статье мы начнем с ASP.NET приложения MVC.

    Изображение нового окна проекта ASP Dot Net

  2. Созданный проект содержит следующие три пакета для ASP.NET Identity.

    • Microsoft.AspNet.Identity.EntityFramework
      Этот пакет содержит реализацию Entity Framework ASP.NET Identity, которая будет сохранять данные и схему ASP.NET Identity для SQL Server.
    • Microsoft.AspNet.Identity.Core
      Этот пакет содержит основные интерфейсы для ASP.NET Identity. Этот пакет можно использовать для написания реализации для ASP.NET Identity, предназначенной для различных хранилищ сохраняемости, таких как хранилище таблиц Azure, базы данных NoSQL и т. д.
    • Microsoft.AspNet.Identity.OWIN
      Этот пакет содержит функциональные возможности, используемые для подключения проверки подлинности OWIN с помощью ASP.NET Identity в ASP.NET приложениях. Он используется при добавлении функции входа в приложение и вызове ПО промежуточного слоя OWIN Cookie Authentication для создания файла cookie.
  3. Создание пользователя.
    Запустите приложение и щелкните ссылку Зарегистрировать , чтобы создать пользователя. На следующем рисунке показана страница Регистрация, на которую собираются имя пользователя и пароль.

    Изображение создания учетной записи

    Когда пользователь нажимает кнопку Зарегистрировать , Register действие контроллера учетной записи создает пользователя путем вызова API ASP.NET удостоверений, как показано ниже:

    [HttpPost]
    [AllowAnonymous]
    [ValidateAntiForgeryToken]
    public async Task<ActionResult> Register(RegisterViewModel model)
    {
        if (ModelState.IsValid)
        {
            var user = new ApplicationUser() { UserName = model.UserName };
            var result = await UserManager.CreateAsync(user, model.Password);
            if (result.Succeeded)
            {
                await SignInAsync(user, isPersistent: false);
                return RedirectToAction("Index", "Home");
            }
            else
            {
                AddErrors(result);
            }
        }
    
        // If we got this far, something failed, redisplay form
        return View(model);
    }
    
  4. Войдите.
    Если пользователь успешно создан, он войдет в SignInAsync систему с помощью метода .

     [HttpPost]
     [AllowAnonymous]
     [ValidateAntiForgeryToken]
    public async Task<ActionResult> Register(RegisterViewModel model)
    {
        if (ModelState.IsValid)
        {
            var user = new ApplicationUser { UserName = model.Email, Email = model.Email };
            var result = await UserManager.CreateAsync(user, model.Password);
            if (result.Succeeded)
            {
                 await SignInManager.SignInAsync(user, isPersistent:false, rememberBrowser:false);
                        
                 // For more information on how to enable account confirmation and password reset please visit https://go.microsoft.com/fwlink/?LinkID=320771
                 // Send an email with this link
                 // string code = await UserManager.GenerateEmailConfirmationTokenAsync(user.Id);
                 // var callbackUrl = Url.Action("ConfirmEmail", "Account", new { userId = user.Id, code = code }, protocol: Request.Url.Scheme);
                 // await UserManager.SendEmailAsync(user.Id, "Confirm your account", "Please confirm your account by clicking <a href=\"" + callbackUrl + "\">here</a>");
    
                 return RedirectToAction("Index", "Home");
             }
             AddErrors(result);
         }
    
        // If we got this far, something failed, redisplay form
         return View(model);
     }
    

    Метод SignInManager.SignInAsync создает ClaimsIdentity. Так как ASP.NET Identity и OWIN Cookie Authentication являются системой на основе утверждений, платформа требует, чтобы приложение создавало ClaimsIdentity для пользователя. ClaimsIdentity содержит сведения обо всех утверждениях пользователя, например о ролях, к которому принадлежит пользователь.

  5. Выйдите из системы.
    Щелкните ссылку Выход, чтобы вызвать действие LogOff в контроллере учетной записи.

    // POST: /Account/LogOff
    [HttpPost]
    [ValidateAntiForgeryToken]
    public ActionResult LogOff()
    {
        AuthenticationManager.SignOut();
        return RedirectToAction("Index", "Home");
    }
    

    В выделенном выше коде показан метод OWIN AuthenticationManager.SignOut . Это аналогично методу FormsAuthentication.SignOut, используемому модулем FormsAuthentication в веб-формы.

Компоненты удостоверения ASP.NET

На схеме ниже показаны компоненты системы удостоверений ASP.NET (выберите ее или на схеме, чтобы увеличить ее). Зеленые пакеты составляют систему удостоверений ASP.NET. Все остальные пакеты — это зависимости, необходимые для использования системы удостоверений ASP.NET в ASP.NET приложениях.

Схема, показывающая компоненты системы удостоверений AS P Dot Net

Ниже приведено краткое описание пакетов NuGet, которые не упоминались ранее.

  • Microsoft.Owin.Security.Cookies
    ПО промежуточного слоя, которое позволяет приложению использовать проверку подлинности на основе файлов cookie, аналогичную ASP. Проверка подлинности с помощью форм NET.
  • EntityFramework
    Entity Framework — это рекомендуемая майкрософт технология доступа к данным для реляционных баз данных.

Переход от членства к удостоверению ASP.NET

Мы надеемся в скором времени предоставить рекомендации по переносу существующих приложений, использующих ASP.NET членство или простое членство, в новую систему удостоверений ASP.NET.

Next Steps