Почему в обязательствах XACML атрибут fillOn зарезервирован только для Permit & Deny?

Интересно, почему структура WSO2 Balana в заявлениях Obligations принимает только аргумент fillOn для условий «Разрешить» или «Запретить», но игнорирует результат «Неприменимо», который также может быть интересно перехватить и задокументировать в логическом потоке, чтобы помочь процесс отладки политики.

В исходниках Balana ObligationExpression.java находим:

if("Permit".equals(effect)){
            fulfillOn = Result.DECISION_PERMIT;
        } else if("Deny".equals(effect)){
            fulfillOn = Result.DECISION_DENY;
        } else {
            throw new ParsingException("Invalid FulfillOn : " + effect);
        }

Каково ваше мнение по этому поводу, правильно ли работает эта логика?


person Claude Falbriard    schedule 18.11.2015    source источник


Ответы (1)


Это по спец. Спецификация XACML позволяет возвращать обязательства и рекомендации только при разрешении или отказе. Вы должны помнить об этом, когда строите свою политику. См. ниже и здесь.

7.18 Обязательства и рекомендации

Правило, политика или набор политик могут содержать одно или несколько выражений обязательств или рекомендаций. Когда оценивается такое правило, политика или набор политик, выражение обязательства или рекомендации ДОЛЖНО оцениваться как обязательство или рекомендация соответственно, которые ДОЛЖНЫ быть переданы на следующий уровень оценки (включающая или ссылающаяся политика, набор политик или решение об авторизации) только в том случае, если результат оцениваемого правила, политики или набора политик совпадает со значением атрибута FulfillOn обязательства или атрибута AppliesTo рекомендации. Если какое-либо из выражений присвоения атрибутов в выражении обязательства или совета с соответствующим атрибутом FulfillOn или AppliesTo оценивается как «Неопределенный», то все правило, политика или набор политик ДОЛЖНЫ быть «Неопределенными». Если атрибут FulfillOn или AppliesTo не соответствует результату алгоритма объединения или оценки правила, то любая неопределенность в выражении обязательства или совета не действует. Как следствие этой процедуры никакие обязательства или рекомендации НЕ ДОЛЖНЫ быть возвращены PEP, если правила, политики или наборы политик, из которых они взяты, не оцениваются или если их оцененный результат является «Неопределенным» или «Неприменимо», или если решение, полученное в результате оценки правила, политики или набора политик, не совпадает с решением, полученным в результате оценки прилагаемого набора политик. Если оценку PDP рассматривать как дерево правил, наборов политик и политик, каждая из которых возвращает «Разрешить» или «Запретить», то набор обязательств и рекомендаций, возвращаемых PDP PEP, будет включать только обязательства и рекомендации. связаны с теми путями, где результат на каждом уровне оценки совпадает с результатом, возвращаемым PDP. В ситуациях, когда любое отсутствие детерминизма неприемлемо, следует использовать детерминированный алгоритм комбинирования, такой как упорядоченное-запрещенное-переопределение. См. также раздел 7.2.

Разрешение обязательств и советов по NotApplicable было бы грязным. Представьте себе следующую структуру политики:

  • PolicySet Main Policy
    • Policy Allow managers to view documents + obligation A on NotApplicable
    • Политика Разрешить сотрудникам просматривать документы в своем отделе + обязательство B в отношении неприменимо
    • Политика Разрешить издателям просматривать и публиковать документы + обязательство C по разрешению

Представьте, что приходит запрос:

  • Запрос: может ли издатель Алиса опубликовать документ №123?

В вашем мире ответ будет (может быть): Разрешение + обязательства A, B, C

Это действительно не имеет никакого смысла.

person David Brossard    schedule 25.11.2015