Идентификация, аутентификация и авторизация пользователей

Введение

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

Начало

Вся эта функциональность уже реализована для 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
предлагает нам выбрать один из типов аутентификации:

ASP.NET Identity

Нажав на кнопку Change Authentication, мы можем изменить тип аутентификации, выбрав одно из следующих:

Оставим значение по умолчанию, то есть Individual User Accounts и создадим проект.

Созданный проект уже по умолчанию имеет всю необходимую для авторизации инфраструктуру: модели, контроллеры, представления. Если мы заглянем в узел
References (Библиотеки), то увидим там ряд ключевых библиотек, которые и содержит необходимые для авторизации и аутентификации классы:

Библиотеки для аутентификации  через ASP.NET Identity

Это ряд библиотек OWIN, которые добавляют функциональность OWIN в проект, а также три библиотеки собственно ASP.NET Identity:

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

Регистрация через ASP.NET Identity

После регистрации логин будет отображаться в правом верхнем углу веб-страницы веб-приложения. Осуществив регистрацию, мы можем разлогиниться, нажав
на LogOff, и снова войти в систему. Таким образом, мы можем уже начать пользоваться встроенной системой аутентификации в приложении ASP.NET MVC 5. Теперь же рассомотрим ее основные моменты.

Во-первых, где это все хранится? Куда попадают данные зарегистрированных пользователей?

В данном случае используется подход Code First. В файле web.config уже имеется строка подключения по умолчанию, которая задает каталог базы данных.
Если мы раскроем папку App_Data, то сможем увидеть созданную базу данных:

Идентификация, аутентификация и авторизация пользователей

Если вдруг в папке база данных не видна, нажмем вверху окна Solution Explorer на кнопку Show All Files (Показать все файлы).

Мы можем открыть эту базу данных в окне Server Explorer и увидеть ее содержимое:

База данных в ASP.NET Identity

По умолчанию при регистрации первого пользователя создается следующий набор таблиц:

Ключевыми объектами в 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 и адаптировать его для использования в приложении с многослойной архитектурой.

Похожее:  Автоматический вход в систему Windows 7 без ввода пароля или в домен -

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *