top of page

авторизация /аутентификация в asp.net (core)

  • Фото автора: Алик Ким
    Алик Ким
  • 23 сент.
  • 2 мин. чтения

немножко поразбирался, как работает авторизация в asp.net core. а то не было полной картины в голове. итак:

схема авторизации - это что-то вроде названия этапа авторизации.

этапы есть такие:

- аутентификация - попытка чтения ранее сохраненной информации о текущем пользователе (в случае куки-обработчика - чтение и расшифровка куки, десериализация в User; в случае JWT-обработчика - чтение инфы из JWT-заголовка, его расшифровка и десериализация). происходит каждый раз при обработке запроса (если авторизация добавлена приложение).

- challenge - процесс аутентификации. запускается в случае попытки доступа к авторизованному ресурсу неаутентифицированным пользователем. или может вызываться вручную (ссылка "залогиниться"). в обоих случаях это - некий процесс, итогом которого будет вызов HttpContext.SignInAsync, которому параметром передается созданный программно ClaimsPrincipal (кстати, "Challenge" в Asp.net - это чуть другое, чем Challenge в HTTP)

- Sign In - начинается после вызова HttpContext.SignInAsync. может иметь своего отдельного обработчика. в случае с куки-обработчиком - шифруется (подписывается?) и сохраняется в куки. JWT-обработчик Challenge и SignIn не поддерживают, в этом случае просто вернется 401 на этапе challenge.

- есть еще SignOut, вызывается нами программно. наверное, не имеет смысл для него иметь другого обработчика, чем имеет SignIn.


хмм, получается, этап SignIn по факту используется только куки-провайдером сейчас (ну, кроме какой то экзотики и чего нибудь самописного))


цель всего этого процесса - заполнить объект ClaimsPrincipal - чтото типа синглтона для текущего запроса, который доступен через Controller.User, на который потом и смотрим авторизация.


на этот объект мы можем смотреть программно, так же туда смотрят атрибуты типа [Authorize] на контроллере или действии.


обработчики этапов настраиваются через опции AddAuthentication

например, "options.DefaultChallengeScheme = GoogleDefaults.AuthenticationScheme" - задает для этапа челленджа гугл. при чем GoogleDefaults.AuthenticationScheme - это строковая константа, определяемая самим провайдером (не копал, как это работает под капотом)

DefaultScheme - единая настройка для всех этапов (используется, если настройка конкретного этапа не задана)


ClaimsPrincipal реализует интерфейс IPrincipal. видимо, когда то раньше предполагалось, что будут разные его реализации. но сейчас в ControllerBase свойство User прям имеет тип ClaimsPrincipal. так что, наверное, на эту абстракцию можно смело забивать, смело приводить типы, если где то встретится IPrincipal

 
 
 

Недавние посты

Смотреть все

Комментарии


Околокомпьютерный блог Алика

  • alt.text.label.Facebook

© Околокомпьютерный блог Алика , 2022. Сайт создан на Wix.com

bottom of page