Аутентификация в ASP.NET Core: сервисы и промежуточное ПО¶
Процесс аутентификации выглядит примерно следующим образом:
- Клиент отправляет в приложение идентификатор и секрет, определяющий текущего пользователя.
- Приложение проверяет, соответствует ли идентификатор известному пользователю, и что секрет правильный.
- Если идентификатор и секрет допустимы, приложение может задать принципала для текущего запроса, и сохраняет эти данные для последующих запросов. В традиционных веб-приложениях используется хранение зашифрованной версии принципала в файле cookie.
Рассмотрим процедуру входа и последующие запросы подробнее.
Вход в приложение ASP.NET Core¶

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

После получения запроса с cookie аутентификации, Kestrel создает по умолчанию анонимного принципала и назначает его HttpContext.User. Любое промежуточное ПО, работающее до AuthenticationMiddleware, будет считать, что аутентификация не пройдена.
AuthenticationMiddleware вызывает сервис аутентификации, который считывает cookie из запроса, расшифровывает его и десериализует, чтобы получить ClaimPrincipal. AuthenticationMiddleware задает проверенного принципала в HttpContext.User.
При этом AuthenticationMiddleware не несет ответственности за перенаправление не прошедших проверку запросов на страницу входа или отклонение неавторизованных запросов — это задача AuthorizationMiddleware.
Дата создания : 5 октября 2022 г.