ASP.NET Core Identity

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

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

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

ASP.NET Identity представляет встроенную в ASP.NET систему аутентификации и авторизации. Данная система позволяет пользователям создавать учетные записи, аутентифицироваться, управлять учетными записями или использовать для входа на сайт учетные записи внешних провайдеров, таких как Facebook, Google, Microsoft, Twitter и других.

Так, создадим новый проект ASP.NET Core по типу ASP.NET Core Web App (Model-View-Controller) с типом аутентификации Individual User Accounts.:

ASP.NET Core Identity в Visual Studio

Для выбора типа аутентификации в окне выбора типа проекта в секции Authentication нажмем на ссылку Change. При нажати на эту ссылку откроется окно установки типа аутентифкации:

ASP.NET Core Identity и тип аутентификации

В этом окне соответственно надо указать Individual User Accounts и в центральной части Store user accounts in-app - сохранение учетных данных пользователей в локальной базе данных.

В итоге будет следующий проект:

ASP NET Core Idenity 2.1

По большому счету сообственно от Identity здесь по умолчанию добавлено не так много функционала. В частности, добавлен класс ApplicationDbContext - контекст данных для работы с Identity. В папке Areas->Identity->Pages можно найти файл _ViewStart.cshtml. И есть некоторые изменения в файле Startup.

Однако в отличие от предыдущих версий ASP.NET Core в проект по умолчанию не добавляется никаких контроллеров, моделей, представлений, которые обеспечили бы нам полноценную работу с Identity сразу после создания проекта. И весь этот функционал необходимо добвлять самим. Но тем не менее Visual Studio позволяет добавить весь необходимый функционал. Для этого нажмем на название проекта правой кнопкой мыши и в контекстном меню выберем пункт Add -> New Scaffolded Item

Scaffold ASP.NET Core Identity

Далее в открывшемся окне выберем Idenity:

Добавление в проект ASP.NET Core Identity

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

ASP.NET Core Identity Razor Pages

В частности, к примеру, я отметил пункты 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

Запустим проект на выполнение. И в меню веб-страницы мы увидим дополнительные пункты для регистрации и входа на сайт:

Create Application with ASP.NET Core Identity

Нажмем на кнопку регистрации и перед нами откроется форма для регистрации нового пользователя. Введем в нее какие-нибудь данные:

Регистрация в ASP.NET Core Identity

И после регистрации в базу данных будет добавлен новый пользователь, а нас перенаправят на страницу подтверждения регистрации:

Подтверждение регистрации в ASP.NET Core Identity

На этой странице нажмем на ссылку "Click here to confirm your account". По умолчанию при создании пользователя в базе данных в таблице пользователей в поле "EmailConfirmed" устанавливается значение False. От этого зависит возможности пользователя. В частности, пока он не подтвердит свой email, он даже не сможет войти в приложение. По умолчанию, в приложении нет конечно никаких возможностей по подтверждению через электонную почту. И нажатие на данную ссылку как раз симулирует подтверждение аккаунта.

Далее с логином и паролем созданного пользователя мы сможем заходить в приложение.

Login in ASP.NET Core Identity Вход в систему ASP.NET Core MVC Identity

При желании мы можем найти базу данных в окне SQL Server Object Explorer по имени, заданному в файле appsettings.json. В частности, в таблице dbo.AspNetUsers, которая предназначена для хранения пользователей, мы как раз сможем обнаружить данные добавленного пользователя.

Помощь сайту
Юмани:
410011174743222
Перевод на карту
Номер карты:
4048415020898850