Как решить проблему согласованности управления авторизацией одностраничного приложения и .NET Core WebAPI?

В настоящее время мы разрабатываем веб-приложение со следующей архитектурой.

  • Одностраничное приложение на основе Angular 7.
  • Серверная часть на основе .NET Core WebAPI.

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

Авторизация на стороне клиента

  • SPA принимает JWT после входа в систему.
  • Авторизацией маршрутов будет заниматься охрана маршрутизации в Angular. Например, у пользователя есть роль reportviewer, пользователю будут разрешены маршруты для просмотра компонентов, связанных с отчетом.
  • Пункты меню будут отображаться в соответствии с информацией на JWT. Например, если у пользователя есть роль просмотра отчетов, он увидит пункты меню, связанные с отчетами.

Сторона сервера

JWT будет содержать некоторую информацию об авторизации (например, утверждения ролей). Атрибуты авторизации будут использоваться для авторизации WebAPI.

Я разработал страницу редактирования пользователя, чтобы определить пользователя и назначить необходимые роли.

Вопрос

Авторизация пунктов меню, защита маршрутизации и веб-API могут быть определены разработчиками непоследовательно. Как я могу создать согласованную структуру авторизации для решения этой проблемы для такого рода приложений?

Заранее спасибо.

Ихсан


person İhsan Akin    schedule 29.03.2019    source источник


Ответы (2)


Ваш вопрос отличный:

Как я могу создать согласованную структуру авторизации для решения этой проблемы для такого рода приложений?

Ответ заключается в том, чтобы полагаться на внешнюю структуру авторизации. Есть несколько вариантов достижения этого. Некоторые из них специфичны для .NET, некоторые — общего назначения.

В целом это поле известно как управление доступом на основе атрибутов (ABAC). Что дает вам ABAC:

  • архитектура
  • язык политики для выражения вашей авторизации (например, «руководители могут просматривать документы в своих отделах»)
  • протокол запроса/ответа, в котором можно отправлять запросы разрешения/запрета авторизации.

Архитектура АБАК

Архитектура и поток ABAC/XACML

На этом рисунке показано, как работает ABAC: у вас есть понятие перехватчика или точки принуждения (PEP), которая перехватывает поток между пользователем и приложением. Эта точка принудительного исполнения будет проверять, может ли пользователь получить доступ к тому, к чему он хочет получить доступ (данные, вызов API, виджет...). Идея состоит в том, что PEP является локальным по отношению к тому, что вы защищаете, но принятие решений централизовано, и именно это даст вам согласованную авторизацию. У вас могут быть PEP для SPA, для API... И они могут последовательно применять одни и те же политики авторизации.

PDP или точка принятия решения о политике — это та, которая обрабатывает запросы на авторизацию и оценивает их по сравнению с набором политик, которые вы написали бы ранее. Языковые политики обычно записываются следующим образом: alfa или xacml.

PIP (Policy Information Point) — это абстрактное представление ваших источников данных и пользовательских каталогов (AD, DB...), где вы можете хранить дополнительную информацию о пользователях и ресурсах. Они могут быть полезны, чтобы помочь принять правильное решение.

Опции

Вы можете либо использовать реализации с открытым исходным кодом, например. AuthZForce или коммерческие реализации, например. Axiomatics (где я работаю). .NET Core также имеет на основе политик. авторизация, но это не поможет вам с вашим SPA.

person David Brossard    schedule 12.04.2019
comment
Привет, Дэвид! Я просмотрел довольно много ваших сообщений о XAML и нашел почти все их очень информативными. У меня был один вопрос по внедрению такой внешней системы в поток запросов. Какую задержку это обычно добавляет к запросам? - person ccriveteanu; 14.04.2019
comment
Рад слышать. Ре. задержка, вы смотрите на диапазон мс (1-10 мс) в зависимости от дизайна вашей системы. Я хотел бы отметить, что внешняя авторизация делает производительность (или ее отсутствие) видимой, что означает, что мы можем затем улучшить ее. - person David Brossard; 14.04.2019

Вы можете использовать авторизацию на основе политик в ASP.NET Core.

Использование описано Дино Эспозито здесь: https://docs.microsoft.com/en-us/archive/msdn-magazine/2017/october/cutting-edge-policy-based-authorization-in.-asp-net-core

person Tito    schedule 14.11.2019