Аутентификация отвечает на вопрос "кто пришёл?"
За аутентификцию отвечает AuthentificationMiddleware. Для его добавления применяется метод UseAuthentication(). Он должен добавляться до любых других компонентов, которые используют аутентификацию.
Для выполнения аутентификации этот компонент использует сервисы аутентификации такой как IAuthenticationService, регистрируется он с помощью метода AddAuthentication(). Для него необходимо установить схему аутентификации, самые ходовые "Coockies" и "Bearer", на основе куки и jwt-токенов соответственно. Вместо строковых значений можно использовать CookieAuthenticationDefaults.AuthenticationScheme и JwtBearerDefaults.AuthenticationScheme. Обработчик аутентификации выполняет непосредственную аутентификацию пользователей на основе данных в запросах и схемы аутентификации.
Авторизация отвечает на вопрос "что он может делать?". К каким ресурсам пользователь имеет право доступа и какие права имеет.
Для применения авторизации необходим компонент AuthorizationMiddleware. Его можно подключить методом UseAuthorization(). Так же необходимо зарегестрировать методы авторизации с помощью метода AddAuthorization().
Аттрибуты
Ограничить доступ к ресурсам можно с помощью атрибута AuthorizeAttribute. Если мы попробуем зайти не авторизованными на страницу с атрибутом [Authorize], то страница выдаст ошибку.
Аутентификация с помощью Jwt Jwt-токен - это веб-стандарт определяющий способ передачи данных о пользователе в формате JSON в зашифрованном виде.
Jwt-токен состоит из
- Header - JSON содержащий информацию о типе токена и алгоритме шифрования
- Payload - JSON содержащий данных для авторизации пользователя (логин пароль)
- Signature - строка для верификации токена, создаётся с помощью секретного кода Header и Payload
Для создания токена применяется конструктор JwtSecurityToken. Одним из параметров служит список объектов Claim. Объекты Claim служат для хранения некоторых данных о пользователе, описывают пользователя. Затем эти данные можно применять для аутентификации.
Для доступа к ресурсам в header запросов нужно добавлять "Authorization": "Bearer " + token // token - полученный ранее jwt-токен
Авторизация с помощью jwt
ClaimPrincipal, ClaimsIdentity, HttpContext.User
Данные, которые идентифицируют пользователя хранятся в свойстве Identity класса ClaimPrincipal.
Claim - это информация о пользователе и его правах, которая утверждается веб-приложением. Claim объект содержит свойства: Issuer - название системы, которая выдала этот claim Subject - возвразщает информацию о пользователе в виде объекта ClaimsIdentity Type - возвращает тип объекта claim Value - возвращает значение объекта claim