XACML: как контролировать доступ к свойствам ресурса
Я понимаю, что XACML может дать точный контроль доступа к ресурсу на основе различных категорий, таких как тема, ресурс, окружающая среда и действия.
Но как только оценка сделана и решено извлечь ресурс, можем ли мы контролировать, к каким полям / свойствам ресурса может обратиться пользователь / субъект?
Например, есть ресурс под названием Customer со следующими полями.
клиент: {имя, isVip, номер телефона}
Теперь, если у меня есть торговый агент, имеющий доступ к этой информации, я хочу показать phoneNumber VIP-клиента только нескольким выбранным торговым агентам.
Это должен быть ответ на API информации о клиенте GET:
вызывается обычным агентом по продажам: {name, isVip}
вызывается выбранным агентом по продажам: { name, isVip, phoneNumber}
Могу ли я достичь этого с помощью XACML? Если да, то как?
1 ответ
Да, ты можешь!
Все зависит от того, как вы определяете свои ресурсы и как вы пишете политики для них. В вашем случае у вас есть объект типа "Клиент", и у вас есть объекты типа "поле". Name, isVip и phoneNumber - это все поля объекта Customer.
Вы можете написать следующие политики:
- Торговые агенты могут просматривать объект клиента в том же регионе
- Торговые агенты могут просматривать поле phoneNumber клиента, если они назначены этому клиенту
Как будет работать принуждение? То, что вы должны видеть, - это то, что вы можете выполнять принудительные меры по дороге... и по дороге. Другими словами, вы могли бы спросить
- Может ли торговый агент Алиса просмотреть запись клиента № 123?
- Разрешать
Затем приложение получает запись. Когда запись возвращается из базовой системы через PEP, вы затем проверяете запись, обнаруживаете, что у вас есть 3 раздела, которые стоит контролировать, и затем вы спрашиваете PDP:
- Может ли Алиса торговый агент просмотреть разделы № 1, № 2, № 3 из записи клиента № 123?
- Разрешить, Запретить, Запретить
Кстати, последний является примером запроса множественного решения. Вы можете прочитать больше о MDP здесь и здесь.