Как использовать XACML и PIP в реальном приложении?
Как охватить следующий сценарий, используя XACML (с WSO2 PDP) и PIP (если требуется).
В приложении "Подержанный автомобиль", в частности, местоположение, продавцу разрешено просматривать и обновлять цену автомобиля. Они могут просматривать только автомобили, которые им назначены.
Теперь с точки зрения xacml мы можем создать политику для роли продавца и на основе местоположения скрыть определенные меню.
Но что делать с методом getCarDetails(Object User){...}
?
здесь на основе UserID
(продавец) мы покажем список.
Как спроектировать это с помощью спецификаций xacml?
Я понимаю это так: мы можем использовать Spring-Security и добавить роль "продавца" поверх этого метода. Но это только ограничит других пользователей от разных ролей. оттуда я запутался, что мы должны использовать вызов базы данных в соответствии с нашими традиционными приложениями с идентификатором пользователя и получить список автомобилей или есть способ получить детальный доступ с помощью xacml?
1 ответ
Ваш вопрос содержит 2 вопроса:
- Как мне смоделировать мою политику?
- Как мне защитить мое приложение? (Принять решения)
Прежде всего, давайте смоделируем вашу политику в ALFA:
Правило: продавец может просматривать автомобиль в том и только в том случае, если назначенный ему идентификатор продавца соответствует идентификатору запрашивающего пользователя.
В ALFA это становится:
namespace com.axiomatics{
/**
* A sales person can view a car if and only if the car's assigned salesperson
* identifier is equal to the requesting user's identity.
*/
policy viewCars{
target clause user.role=="sales person" and actionId == "view" and objectType=="car"
apply firstApplicable
/**
*
*/
rule allowAssignedUser{
permit
condition car.assignedSalesPerson==user.identifier
}
}
}
Это твое моделирование отсортировано.
Теперь по второму вопросу: как мне обеспечить авторизацию? Я бы поспорил против смешивания ролей, управляемых политиками Spring Security и XACML, если вы правильно не задокументируете их.
Есть два подхода, которые вы можете использовать.
- Используйте Multiple Decision Profile - это часть набора дополнительных профилей XACML 3.0, или
- Используйте подход обратного запроса - это относится только к аксиоматике. Я не уверен, что WSO2 поддерживает это.
Профиль множественного принятия решений (MDP) определяет, как вы можете отправлять несколько запросов авторизации, написанных в xacml, в точку принятия решений (PDP), используя один запрос. Это экономит вам несколько поездок туда и обратно. Ответ, который вы получите, будет содержать столько же решений, сколько и запросов на авторизацию в исходном отправленном запросе. Вы экономите на транспортировке и оценке. Используйте MDP, когда вы знаете, сколько предметов вы хотите защитить, и когда это число составляет от 1 до 1000, но не больше (хотя, конечно, всегда стоит попробовать). Вы можете прочитать больше о MDP в блоге Axiomatics. В вашем случае поток будет следующим:
- Вызов
getCarDetails(Object user)
, - Позвоните в базу данных, чтобы получить все машины
- Позвоните в PDP в режиме MDP для всех найденных записей, чтобы получить решение
- Вернуть только те записи, на которые у вас было разрешение
Основным недостатком является то, что вы можете получить тысячи, если не миллионы записей из базы данных. Использование MDP тогда нецелесообразно.
Подход обратного запроса интересен, хотя и специфичен для аксиоматики. Он определяет новый интерфейс поверх PDP XACML, который позволяет запрашивать механизм авторизации в обратном порядке. Вместо того, чтобы спрашивать:
- Может ли Алиса посмотреть машину № 123?
Обратный запрос позволяет вам спросить
- Какие машины может увидеть Алиса?
Вместо ответа, являющегося разрешением или запрещением, ответ является выражением фильтра, таким как оператор SQL, например
- ВЫБЕРИТЕ ИД ОТ АВТОМОБИЛЕЙ, ГДЕ НАЗНАЧЕН SP='Алиса';
Все, что вам нужно сделать, это использовать оператор SQL для вашей базы данных, чтобы запросить его и вернуть только соответствующие данные. Это работает независимо от того, сколько данных у вас есть в вашей базе данных. Вы можете найти больше информации о ARQ SQL через этот вебинар.