Введение
Но, прежде чем приступить к основной теме, разберемся с терминологией. Глобально предоставление доступа к ограниченным ресурсам в веб-приложениях проходит в три этапа: идентификации, аутентификации и авторизации.
Начало
Вся эта функциональность уже реализована для ASP.NET Core — проект с открытым исходным кодом под названием Identity 3.0. Для настройки окружения вам понадобится установить:
- Visual Studio 2022;
- Update 3 для VS 2022;
- .NET Core tools for Visual Studio.
Инструкцию по установке и ссылки можно найти здесь.
Авторизация и аутентификация в mvc 5
Данное руководство устарело. Актуальное руководство: Руководство по ASP.NET Core
Последнее обновление: 31.10.2022
Релиз ASP.NET MVC 5 ознаменовался выходом новой системой авторизации и аутентификации в .NET приложениях под названием ASP.NET Identity.
Эта система пришла на смену провайдерам Simple Membership, которые были введены в ASP.NET MVC 4.
Рассмотрим систему авторизации и аутентификации ASP.NET Identity на примере приложения MVC 5. Итак, при создании приложения MVC 5 Visual Studio
предлагает нам выбрать один из типов аутентификации:
Нажав на кнопку Change Authentication, мы можем изменить тип аутентификации, выбрав одно из следующих:
Оставим значение по умолчанию, то есть Individual User Accounts и создадим проект.
Созданный проект уже по умолчанию имеет всю необходимую для авторизации инфраструктуру: модели, контроллеры, представления. Если мы заглянем в узел
References (Библиотеки), то увидим там ряд ключевых библиотек, которые и содержит необходимые для авторизации и аутентификации классы:
Это ряд библиотек OWIN, которые добавляют функциональность OWIN в проект, а также три библиотеки собственно ASP.NET Identity:
Поскольку вся инфраструктура уже имеется в проекте, запустим проект, на отобразившейся в браузере странице найдем ссылку Register и нажмем на
нее. На открывшейся странице регистрации введем какие-нибудь данные:
После регистрации логин будет отображаться в правом верхнем углу веб-страницы веб-приложения. Осуществив регистрацию, мы можем разлогиниться, нажав
на LogOff, и снова войти в систему. Таким образом, мы можем уже начать пользоваться встроенной системой аутентификации в приложении ASP.NET MVC 5. Теперь же рассомотрим ее основные моменты.
Во-первых, где это все хранится? Куда попадают данные зарегистрированных пользователей?
В данном случае используется подход Code First. В файле web.config уже имеется строка подключения по умолчанию, которая задает каталог базы данных.
Если мы раскроем папку App_Data, то сможем увидеть созданную базу данных:
Если вдруг в папке база данных не видна, нажмем вверху окна Solution Explorer на кнопку Show All Files (Показать все файлы).
Мы можем открыть эту базу данных в окне Server Explorer и увидеть ее содержимое:
По умолчанию при регистрации первого пользователя создается следующий набор таблиц:
Ключевыми объектами в AspNet Identity являются пользователи и роли.
Вся функциональность по созданию, удалению пользователей, взаимодействию с хранилищем пользователей хранится в классе UserManager.
Для работы с ролями и их управлением в AspNet Identity определен класс RoleManager. Классы UserManager и RoleManager находятся в библиотеке Microsoft.AspNet.Identity.Core.
Каждый пользователь для UserManager представляет объект интерфейса IUser. А все операции по управлению пользователями производятся через хранилище, представленное объектом IUserStore.
Каждая роль представляет реализацию интерфейса IRole, а управление ролями классом RoleManager происходит через хранилище IRoleStore.
Непосредственную реализацию интерфейсов IUser, IRole, IUserStore и IRoleStore предоставляет пространство имен Microsoft.AspNet.Identity.EntityFramework:
Класс IdentityUser является реализацией интерфейса IUser. А класс хранилища пользователей – UserStore реализует интерфейс IUserStore.
Подобным образом класс IdentityRole реализует интерфейс IRole, а класс хранилища ролей – RoleStore реализует интерфейс IRoleStore.
А для взаимодействия с базой данных в пространстве имен Microsoft.AspNet.Identity.EntityFramework определен класс контекста IdentityDbContext
В приложении ASP.NET MVC мы не будем работать напрямую с классами IdentityUser и IdentityDbContext. По умолчанию в проект в папку Models добавляется файл
IdentityModels.cs, который содержит определения классов пользователей и контекста данных:
public class ApplicationUser : IdentityUser { public async Task<ClaimsIdentity> GenerateUserIdentityAsync (UserManager<ApplicationUser> manager) { var userIdentity = await manager.CreateIdentityAsync(this, DefaultAuthenticationTypes.ApplicationCookie); return userIdentity; } } public class ApplicationDbContext : IdentityDbContext<ApplicationUser> { public ApplicationDbContext() : base("DefaultConnection", throwIfV1Schema: false) { } public static ApplicationDbContext Create() { return new ApplicationDbContext(); } }
В приложении мы не работаем напрямую с классами IdentityUser и IdentityDbContext, а имеем дело с классами-наследниками.
Класс ApplicationUser наследует от IdentityUser все свойства. И кроме того добавляет метод GenerateUserIdentityAsync()
,
в котором с помощью вызова UserManager.CreateIdentityAsync
создается объект ClaimsIdentity. Данный объект содержит информацию
о данном пользователе.
Подобная архитектура позволяет взять уже готовый функционал и при необходимости добавить новый, например, добавить для пользователя новое свойство
или добавить новую таблицу в бд.
Я не буду подробно расписывать весь функционал AspNet Identity, который по умолчанию добавляется в проект, обозначу вкратце лишь основные возможности.
Во-первых, чтобы задействовать AspNet Identity, в проект в папку App_Start добавляются два файла. Файл Startup.Auth.cs содержит
класс запуска приложения OWIN. Поскольку AspNet Identity использует инфраструктуру OWIN, то данный класс является одним из ключевых и необходимых для работы.
Файл IdentityConfig.cs содержит ряд дополнительных вспомогательных классов: сервисы для двухфакторной валидации
с помощью email и телефона EmailService
и SmsService
, класс менеджера пользователей ApplicationUserManager
, добавляющий к
UserManager ряд дополнительных функций, и класс ApplicationSignInManager
, используемый для входа и выхода с сайта.
Базовая функциональность системы аутентификации и управления учетными записями расположена в двух контроллерах: AccountController
и ManageController
В AccountController определены методы для логина, регистрации, верификации кода, отправленного по email или по смс, сброс пароля, напоминание пароля, вход на сайт с помощью внешних сервисов.
Контроллер ManageController используется для управления учетной записью и предполагает возможности по смене пароля и управлению телефонными номерами в системе.
Для обоих контроллеров уже по умолчанию генерируются все необходимые представления и специальные модели представлений.
Несмотря на то, что по умолчанию нам уже предоставляется готовый функционал, однако в ряде случаев, например, для отправки смс или
электронной почты необходима дополнительная настройка. Теперь рассмотрим основные моменты системы AspNet Identity.
НазадСодержаниеВперед
Как это работает
В ходе нехитрых манипуляций по созданию проекта мы получили полностью рабочую систему аутентификации и авторизации. Приложение готово к работе и можно уже зарегистрировать нового пользователя и войти под ним в систему.
В ASP.NET Core за настройку обработки запросов отвечает метод Configure класса Startup. При создании проекта с использованием шаблона по умолчанию в этот метод добавится строка app.UseIdentity () ; отвечающая за аутентификацию для потока запросов, основанную на куки.
Также в метод ConfigureServices этого же класса Startup будут добавлены Identity сервисы.
Это позволит использовать их в приложении с помощью встроенной системы внедрения зависимостей.
Теперь при обработке каждого запроса будет проводиться аутентификация пользователя. А авторизацию будет контролировать атрибут Authorize, который можно добавить перед контроллером и отдельным методом в MVC фреймворке.
ASP.NET Core был сильно изменен по сравнению с прошлыми версиями, не остался в стороне и Identity 3.0. Структура БД для Identity 3.0 имеет следующий вид:
Пример
Пусть для доступа к некоторому ресурсу в приложении пользователь должен иметь российское гражданство. Для начала зарегистрируем политику RussianСitizenship в ConfigureService файла startup.cs:
Связанные понятия
— комплексное программное обеспечение, включающее в себя приложения для планирования задач, составления расписания, контроля цены и управления бюджетом, распределения ресурсов, совместной работы, общения, быстрого управления, документирования и администрирования системы, которое используются совместно для управления крупными проектами.
(ДБО) — общий термин для технологий предоставления банковских услуг на основании распоряжений, передаваемых клиентом удаленным образом (то есть без его визита в банк), чаще всего с использованием компьютерных и телефонных сетей. Для описания технологий ДБО используются различные в ряде случаев пересекающиеся по значению термины: Клиент-Банк, Банк-Клиент, Интернет-Банк, Система ДБО, Электронный банк, Интернет-Банкинг, on-line banking, remote banking, direct banking…
приложения ( англ. Application Security ) включает в себя меры, принимаемые для повышения безопасности приложения, часто путем обнаружения, исправления и предотвращения уязвимостей в безопасности. Для выявления уязвимостей на разных этапах жизненного цикла приложений, таких как проектирование, разработка, развертывание, обновление, обслуживание, используются различные методы.
с партнерами (PRM, PRM-система, сокращение от англ. англ. Partner relationship management) – система методологий, стратегий, программного обеспечения и веб-возможностей, предназначенных для автоматизации взаимодействия с партнерами (дилерами, филиалами, дистрибьюторами). В частности – для роста продаж по партнерской схеме, оптимизации финансового и оперативного учета работы с партнерами, повышения качества сервиса, автоматизации вычисления агентских платежей…
(англ. logging) — форма автоматической записи в хронологическом порядке операций в информационных технологиях, процесс записи информации о происходящих в рамках какого-либо процесса с некоторым объектом событиях, например, в файл регистрации или в базу данных. В некоторых программный комплексах используется термин “аудит”, что является не верным, поскольку аудит подразумевает сравнение чего-то с чем-то, чего-то на предмет соответствия, например, требованиям, иными словами это корреляционный…
Выводы
Это была обзорная статья, из которой видно, что Identity 3.0 является мощным инструментом, , который поддерживает:
- авторизацию на основе ролей,
- Claim-Based авторизацию,
- аутентификацию через соцсети,
- двухфакторную аутентификацию с подтверждением по смс или по электронной почте и др.
Для большинства сайтов этого достаточно для полноценной работы.
https://www.youtube.com/watch?v=oCkg-j4oZxo
В следующей статье я постараюсь немного кастомизировать Identity и адаптировать его для использования в приложении с многослойной архитектурой.