Да, можно использовать несколько PIP таким образом, чтобы атрибут, разрешенный PIP, мог использоваться как вход для другого PIP.
Основываясь на архитектуре XACML , PDP должен решить, как разрешать атрибуты с помощью PIP.
Как это работает на высоком уровне:
- Входной запрос (от PEP) к PDP содержит атрибут скажем
Subject-ID=Alice
- PDP оценивает политику XACMLна основе атрибутов из входного запроса.Например, политика гласит: разрешить , если
Action-ID=Read
- Поскольку в политике не определено
Subject-ID
, PDP пытается запросить PIP или PIP для разрешения Action-ID
и предоставляет PIP.значение, которое оно имеет Subject-ID
(из запроса ввода).Например, допустим, у нас есть 2 PIP - PIP A может разрешить resource-ID
из Subject-ID
и PIP B может разрешить Action-ID
из resource-ID
- Здесь происходит то, что PDP сначала разрешает
resource-ID
на основе Subject-ID
из запроса ввода, используя PIP A , а затем использует resource-ID
для разрешения Action-ID
, используя PIP B , чтозатем используется PDP для оценки политики.Если PIP B вернет Алису, вы получите permit
решение, иначе это будет NotApplicable
Обратите внимание, что это зависит от того, как реализован PDP для разрешения атрибутов с использованием цепочек PIP, как в вашем случае использования.
PDP от компании под названием Axiomatics способен выполнять цепной поиск PIP.
Disclosure : я работаю в Axiomatics , где мы предоставляем решения для контроля доступа на основе XACML