Перейти к содержанию

Аутентификация в ASP.NET Core: сервисы и промежуточное ПО

Процесс аутентификации выглядит примерно следующим образом:

  1. Клиент отправляет в приложение идентификатор и секрет, определяющий текущего пользователя.
  2. Приложение проверяет, соответствует ли идентификатор известному пользователю, и что секрет правильный.
  3. Если идентификатор и секрет допустимы, приложение может задать принципала для текущего запроса, и сохраняет эти данные для последующих запросов. В традиционных веб-приложениях используется хранение зашифрованной версии принципала в файле cookie.

Рассмотрим процедуру входа и последующие запросы подробнее.

Вход в приложение ASP.NET Core

Pasted image 20220601193957.png
Когда запрос только поступает, Kestrel создает анонимного принципала и назначает его свойству HttpContext.User. Затем запрос маршрутизируется на страницу Login.cshtml, которая считывает адрес электронной почты и пароль из запроса, используя привязку модели.
Далее SignInManager выполняет загрузку сущности пользователя из БД, и выполняет проверку верности пароля.
Если пароль верен, SignInManager создает новый объект ClaimsPrincipal из пользовательской сущности, и добавляет соответствующие утверждения. Затем старый анонимный принципал заменяется вновь созданным.
Наконец, SignInManager сериализует принципал, шифрует его и сохраняет в виде файла cookie.

Аутентификация пользователей для последующих запросов

При последующих запросах браузер отправляет содержимое cookie с зашифрованным принципалом вместе с запросом.
ASP.NET Core использует этот файл для восстановления объекта ClaimsPrincipal и задания значения HttpContext.User. Важно отметить, что происходит этот процесс в компоненте AuthenticationMiddleware.
Pasted image 20220601195031.png
После получения запроса с cookie аутентификации, Kestrel создает по умолчанию анонимного принципала и назначает его HttpContext.User. Любое промежуточное ПО, работающее до AuthenticationMiddleware, будет считать, что аутентификация не пройдена.
AuthenticationMiddleware вызывает сервис аутентификации, который считывает cookie из запроса, расшифровывает его и десериализует, чтобы получить ClaimPrincipal. AuthenticationMiddleware задает проверенного принципала в HttpContext.User.
При этом AuthenticationMiddleware не несет ответственности за перенаправление не прошедших проверку запросов на страницу входа или отклонение неавторизованных запросов — это задача AuthorizationMiddleware.


Последнее обновление : 4 мая 2023 г.
Дата создания : 5 октября 2022 г.

Комментарии

Комментарии