Данное руководство устарело. Актуальное руководство: Руководство по ASP.NET Core 7
ASP.NET Identity представляет встроенную в ASP.NET систему аутентификации и авторизации. Данная система позволяет пользователям создавать учетные записи, аутентифицироваться, управлять учетными записями или использовать для входа на сайт учетные записи внешних провайдеров, таких как Facebook, Google, Microsoft, Twitter и других.
Так, создадим новый проект ASP.NET Core по типу ASP.NET Core Web App (Model-View-Controller) с типом аутентификации Individual User Accounts.:
Для выбора типа аутентификации в окне выбора типа проекта в секции Authentication нажмем на ссылку Change. При нажати на эту ссылку откроется окно установки типа аутентифкации:
В этом окне соответственно надо указать Individual User Accounts и в центральной части Store user accounts in-app - сохранение учетных данных пользователей в локальной базе данных.
В итоге будет следующий проект:
По большому счету сообственно от Identity здесь по умолчанию добавлено не так много функционала. В частности, добавлен класс ApplicationDbContext - контекст данных для работы с Identity. В папке Areas->Identity->Pages можно найти файл _ViewStart.cshtml. И есть некоторые изменения в файле Startup.
Однако в отличие от предыдущих версий ASP.NET Core в проект по умолчанию не добавляется никаких контроллеров, моделей, представлений, которые обеспечили бы нам полноценную работу с Identity сразу после создания проекта. И весь этот функционал необходимо добвлять самим. Но тем не менее Visual Studio позволяет добавить весь необходимый функционал. Для этого нажмем на название проекта правой кнопкой мыши и в контекстном меню выберем пункт Add -> New Scaffolded Item
Далее в открывшемся окне выберем Idenity:
Затем отроется окно, где необходимо указать, какой именно функционал будет добавлен. Здесь очень много различных опций:
В частности, к примеру, я отметил пункты Account/Login
и Account/Register
, то есть функционал для регистрации и входа в приложение.
Кроме того, в поле Data context class
надо указать класс контекста данных. По умолчанию при создании в проект уже добавляется
класс контекста, который можно указать в этом поле.
Опционально также можно указать путь внутри проекта к мастер-станице и класс пользователя. Но можно также оставить эти поля пустыми, как в моем случае.
После указания всех настроек нажмем на кноку Add, и в проект будет добавлен весь указанный функционал.
Поскольку я отметил пункты Account/Login
и Account/Register
, то в папке Areas/Idenity/Pages/Account
можно будет найти Razor-страницы Login и Register, выполняющих соответствующие функции.
Вне зависимости от того, какие функции мы отметили при добавлении Identity, весь функционал по работе с учетными записями помещается в папку Areas/Identity. Начиная с версии ASP.NET Core 2.1 это страницы Razor Pages, которые выполняют какую-то определенную задачу - вход в систему, регистрацию и так далее.
Но чтобы все эти станицы могли выполнять свою роль, в классе Startup добавляется конфигурация Identity. В его методе ConfigureServices()
в приложение добавляются сервисы Identity:
public void ConfigureServices(IServiceCollection services) { //....................... // добавление ApplicationDbContext для взаимодействия с базой данных учетных записей services.AddDbContext<ApplicationDbContext>(options => options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection"))); // добавление сервисов Idenity services.AddDefaultIdentity<IdentityUser>(options => options.SignIn.RequireConfirmedAccount = true) .AddEntityFrameworkStores<ApplicationDbContext>(); //........................ }
Во-первых, здесь добавляются сервисы Entity Framework, которые используются для работы с базой данных, хранящей учетные записи. Все настройки подключения
заданы в файле appsettings.json в узле ConnectionStrings
.
А в методе Configure()
функционал аутентификации и авторизации на основе системы Identity становится доступным через вызовы методов UseAuthentication
и app.UseAuthorization(), как и в любой системе аутентификации и авторизации в ASP.NET Core:
public void Configure(IApplicationBuilder app, IHostingEnvironment env) { //.......................... app.UseAuthentication(); app.UseAuthorization(); //................................. }
При начале работы с проектом нам надо учитывать, что он использует Entity Framework, поэтому прежде всего нам надо выполнить миграции, чтобы создать базу данных. В проекте уже по умолчанию есть миграции, которые нам осталось применить. Для этого откроем окно Package Manager Console и введем в командную строку следующую команду:
Update-Database
Запустим проект на выполнение. И в меню веб-страницы мы увидим дополнительные пункты для регистрации и входа на сайт:
Нажмем на кнопку регистрации и перед нами откроется форма для регистрации нового пользователя. Введем в нее какие-нибудь данные:
И после регистрации в базу данных будет добавлен новый пользователь, а нас перенаправят на страницу подтверждения регистрации:
На этой странице нажмем на ссылку "Click here to confirm your account". По умолчанию при создании пользователя в базе данных в таблице пользователей в поле "EmailConfirmed" устанавливается значение False. От этого зависит возможности пользователя. В частности, пока он не подтвердит свой email, он даже не сможет войти в приложение. По умолчанию, в приложении нет конечно никаких возможностей по подтверждению через электонную почту. И нажатие на данную ссылку как раз симулирует подтверждение аккаунта.
Далее с логином и паролем созданного пользователя мы сможем заходить в приложение.
При желании мы можем найти базу данных в окне SQL Server Object Explorer по имени, заданному в файле appsettings.json. В частности, в таблице dbo.AspNetUsers, которая предназначена для хранения пользователей, мы как раз сможем обнаружить данные добавленного пользователя.