dir.by  
  Поиск  
Программирование, разработка, тестирование
ASP.NET MVC (web сайт на архитектуре Model-View-Controller)
Что такое аутентификация (login/register/logout) в ASP.NET MVC ?
  Посмотрели 6888 раз(а)    
 Что такое аутентификация (login/register/logout) в ASP.NET MVC ? 
последнее обновление: 13 января 2019
Аутентификация - процесс идентификации пользователя т.е. это login/register/logout
Аутентификация в ASP.NET сводится, по сути, к заполнению HttpContext.User.Identity

Для идентификации пользователя в ASP.NET 5 специально добавлен интерфейс IIdentity.
Этот интерфейс имеет три свойства (AuthenticationType, IsAuthenticated и Name),
Эти свойства должны быть реализованы в вашем классе.

Очень много самописанных способов для реализации IIdentity
Вы можете написать свой собственный способ.
Все в своих проектах используют IIdentity по своему.
Аутентификация в приложении ASP.NET MVC
Способ 1
Использовать класс WebSecurity
WebSecurity сохраняет информаию о пользователе в свои таблицы в базе данных.

Минусы:
WebSecurity может работать только с Microsoft SQL Server базами данных.
Он не может работать с MySQL, NoSQL, поскольку использует специфичные для MS SQL Server выражения SQL.
WebSecurity создает 5 таблиц в базе данных (мне кажется это излишне)
Способ 2
ASP.NET Forms Auth

Работает так:

• Вызов FormsAuthentication.SetAuthCookie или FormsAuthentication.RedirectFromLoginPage выставляет cookie, в котором лежит зашифрованный username.

• Глобальный HTTP Module просматривает все запросы и если види куку - аутентифицирует запрос.

Минусы:
• Подвержен атаке CSRF - любой левый сайт может отрендерить форму, которая сделает POST в ваше приложение, и этот POST пройдет. Для не-апи от этого спасает стандартный механизи Anti Forgery. Для API - не спасает ничего.

• Не дает сохранить в куку ничего, кроме username. Поэтому вы вынуждены или на каждом запросе вычитывать дополнительные данные для юзера из базы, или вписывать вместо username что-то свое.

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

Пример:
Аутентификация (login/register/logout) в ASP.NET MVC используя аутентификацию форм FormsAuthentication.SetAuthCookie(model.Name, true);
Способ 3
Cookie Authentication из ASP.NET Core Identity

По сути, исправленная версия Forms Auth. Несмотря на то, что является частью ASP.NET Identity, может быть использован и без него.

Работает по тому же принципу, что FormsAuth, но исправляет основную проблему:

Позволяет сохранять в cookie не просто username, а набор claims (утверждений, вида имя: а, роль: б, id пользователя: 5), что позволяет приложению не лезть в базу на каждом запросе и не использовать хитрые схемы сериализации JWT в username.

При этом cookie все равно вечные, неотзывные (валидация "отозвано/не отозвано" лежит на разработчике, через событие ValidatePrincipal).
Способ 4
OAuth Bearer Tokens

Механизим, позволяющий надежно аутентифицировать пользователя на основе заголовка Authentication: Bearer. Предназначен для API и для SPA приложений.

Решает проблемы CSRF и проблему отзыва.

CSRF: Вместо cookie используется http header, который клиентская часть должна сама добавлять в каждый запрос. Нет подставляемой автоматически cookie - нет CSRF.

Отзыв: токены разделяются на два вида:
access_token - короткоживущий, stateless, используется для аутентификации.
refresh_token - должгоживущий, обычно statefull, используется для выдачи новых access_token.
Минус - не применим в не-SPA приложении, т.к. браузер сам не шлет соответствующий заголовок.

Процесс подключения:

В качестве основы можно взять стандартный не-core шаблон ASP.NET Web App): Cоответствующий middleware уже будет подключен в самом шаблоне, вызовом app.UseOAuthBearerTokens(OAuthOptions).

Если у вас отдельная, не SPA страница логина, то со стороны бэкенда - все готово (наиболее вероятный случай)
• Редиректите всех подряд (до логина) на /Account/Authorize?client_id=web&response_type=token&state=
• Пользователю показывает страницу логина
• После логина - его редиректит на /#access_token=nRUQN1j-wVFoMQ....
• Берете токен и шлете его в заголовке вида Authentication: Bearer nRUQN1j-wVFoMQ....

И выставляете лайфтайм токена таким, чтобы он не заканчивался в течении одной пользовательской сессии (в смысле одного посещения приложения).

По сути вы получаете Cookies Auth для приложения + OAuth для API.

Если у вас интегрированная в SPA страница логина - вам придется получать токены ajax-запросом к '/token', предъявляя grant (в вашем случае - password):
• На сервере: переопределяете ApplicationOAuthProvider.GrantResourceOwnerCredentials так, чтобы он проверял имя и пароль, и пропускал тех, кого нужно.

• На клиенте: отправляете имя и пароль в виде
Content-Type: application/x-www-form-urlencoded
grant_type=password&username=johndoe&password=A3ddj3w

• Получаете токен, шлете его в каждом запросе.

Вывод: Сторонний SSO -по сути сводится к тому, что ваше приложение проверяет аутентификацию/авторизацию пользователя где-то на стороне, и по ее прохождению залогинивает пользователя в самого себя, используя механизи Cookie Auth. Т.е. случай "подключен SSO" с точки зрения работы с Web API сводится к случаю "Cookies Auth для приложения + OAuth для API" выше.
 
← Предыдущая тема
Entity Framework в приложении ASP.NET MVC. Используем Code First (пишем c# код, а таблицы в базе данных создаются сами)
 
Следующая тема →
Пример: Аутентификация (login/register/logout) в ASP.NET MVC используя аутентификацию форм FormsAuthentication.SetAuthCookie(model.Name, true);
 
Ваши Отзывы ... комментарии ...
   
Вашe имя
Ваш комментарий (www ссылки может добавлять только залогиненный пользователь)

  Объявления  
  Объявления  
 
Что такое MVC в ASP.NET ?
Создаем новое приложение ASP.NET MVC
Контроллер (Controller)
Передаем данные из контроллера в представление в ASP.NET MVC. Используем ViewBag, ViewData, TempData, Model (строго типизированное представление)
Представление (View)
Что такое View (представление) и операторы Razor в ASP.NET MVC
Создаем переменную и выводим на экран во View в ASP.NET MVC
@using внутри View в ASP.NET MVC
@foreach(var item in arr) {...} внутри View в ASP.NET MVC
@DateTime.Now внутри View в ASP.NET MVC
Как узнать имя контроллера внутри View в ASP.NET MVC
Отображаем [DateTime | только Date | только Time] в нужном формате в ASP.NET MVC
Разновидности представлений (View)
Строго типизированное представление (Strongly-typed-view) в ASP.NET MVC
...
Мастер представление (Master View) с использованием @RenderBody() в ASP.NET MVC
Мастер представление (Master View) с использованием @RenderBody() и дополнительных секций @RenderSection в ASP.NET MVC
...
Частичное представление (Partial View) в ASP.NET MVC. Встраиваем частичное представление @Html.Partial("My1") и @{ Html.RenderPartial("My1");}
При нажатии submit внутри partial view происходит ajax вызов метода controller. Метод controller должен возвращать PartialView(model) | ASP.NET MVC
...
Строго типизированное частичное представление (Strongly-typed partial view) в ASP.NET MVC
Создаем папку ViewModels. Это хороший стиль программирования для передачи данных из Controller во View
Создаем папку ViewModels. Создаем свой класс в папке ViewModels. Это хороший стиль программирования для передачи данных из Controller во View. Web приложение ASP.NET MVC
Атрибуты. Используем атрибуты во ViewModels(чтобы показать кнопки, combo в представлении). Используем атрибуты в Controller (чтобы улучшить методы)
Аттрибут [Display(Name = "...")] описывается в C# классе и используется в @Html.LabelFor, @Html.DisplayNameFor в ASP.NET MVC
Аттрибут [Required(ErrorMessage = "Пожалуйста, введите название")] описывается для свойства в C# классе и требует чтобы свойство было заполнено, если не заполнено на экране ошибка ErrorMessage в ASP.NET MVC
Аттрибут [Remote("IsValidAuthor", "Home", ErrorMessage = "Enter correct author of book")] описывается для свойства в C# классе и проверяет это свойство на правильность на сервере через метод IsValidAuthor в conroller Home, если метод возвращает false, то на экране будет ошибка ErrorMessage в ASP.NET MVC
Аттрибут [HiddenInput(DisplayValue = false)] описывается в C# классе и используется в @Html.HiddenFor в ASP.NET MVC
Маршрутизация
Ссылки и перенаправления в представлении
@Html.ActionLink внутри View в ASP.NET MVC
@Html.RouteLink внутри View в ASP.NET MVC
@Url.Action внутри View в ASP.NET MVC
@Url.RouteUrl внутри View в ASP.NET MVC
@Url.Content внутри View в ASP.NET MVC
Bootstrap в MVC
Добавляем и подключаем Bootstrap (css, js файлы) в ASP.NET MVC проект
JQuery в МVС
Подключаем JQuery в ASP.NET MVC проект
С помощью JQuery получаем содержимое View (представления) в ASP.NET MVC. Пример: $.get("/Home/Index", function (data) {...}) ...
Класс AjaxExtensions в МVС (асинхронное получение данных)
Подключаем jQuery & AJAX в ASP.NET MVC проект
С помощью Ajax.ActionLink получаем содержимое View (представления) и вставляем в div в ASP.NET MVC
Объект Ajax (это класс AjaxExtensions) в ASP.NET МVС
База данных (Entity Framework) в ASP.NET MVC
Entity Framework в приложении ASP.NET MVC. Используем Code First (пишем c# код, а таблицы в базе данных создаются сами)
Аутентификация (login/register/logout)
Что такое аутентификация (login/register/logout) в ASP.NET MVC ?
Пример: Аутентификация (login/register/logout) в ASP.NET MVC используя аутентификацию форм FormsAuthentication.SetAuthCookie(model.Name, true);
Авторизация (admin/user/...)
Что такое авторизация (admin/user/...) в ASP.NET MVC ?
Пример: Авторизация (admin/user/...) в ASP.NET MVC используя провайдер ролей RoleProvider
Пишем приложение "Планирование дел, задач" в ASP.NET MVC
Создаем пустое приложение "Планирование дел, задач" | ASP.NET MVC | Visual Studio 2017
Добавляем библиотеки Bootstrap & jQuery в приложение "Планирование дел, задач" | ASP.NET MVC | Visual Studio 2017
Создаем мастер-представление (главное меню & логин кнопки используя Bootstrap) в приложении "Планирование дел, задач" | ASP.NET MVC | Visual Studio 2017
Добавляем контроллер "Home" и представление "Index" (главная страница в приложении "Планирование дел, задач" | ASP.NET MVC | Visual Studio 2017
Добавляем библиотеку Entity Framework и создаем соединиение с Базой данных в приложении "Планирование дел, задач" | ASP.NET MVC | Visual Studio 2017
Аутентификация (login/register/logout) в приложении "Планирование дел, задач" | ASP.NET MVC | Visual Studio 2017
Добавляем класс "Task" для сохранения дел, задач в базу данных в приложении "Планирование дел, задач" | ASP.NET MVC | Visual Studio 2017
Добавление nUnit в приложении "Планирование дел, задач" | ASP.NET MVC | Visual Studio 2017
Дополнительные темы, вопросы
Чем ASP.NET MVC лучше ASP.NET Web Forms ?
Выбор между ASP.NET Core и ASP.NET ?
Как выбрать интернет браузер чтобы в нем запускался .NET проект
Как узнать локальный адрес и порт вашего ASP.NET MVC приложения ?
Scripts\index.d.ts(8,1): error TS1008: Build:Unexpected token; 'module, class, interface, enum, import or statement' expected. Scripts\index.d.ts(8,13): error TS1005: Build:';' expected. в Visual Studio 2017 в приложении ASP.NET MVC
Error "unable to connect to web server "iis express" | ASP.NET MVC | Visual Studio 2017
Error "This site can't be reached" when run ASP.NET application | Solution: Recreate the Self-Signed HTTPS Certificate for localhost in IIS Express
WWW сайты для изучения ASP.NET MVC
Cайты для изучения ASP.NET MVC

  Ваши вопросы присылайте по почте: info@dir.by  
Яндекс.Метрика