Оценка многозначного атрибута в политике XACML 2.0

Как я могу оценить многозначные атрибуты в XACML 2.0? У меня есть следующая политика и запрос XACML 2.0. Пользователь получает разрешение, если он находится в роли суперадминистратора. Имея несколько ролей как <AttributeValue> элементов в одном и том же атрибуте-субъекте, для оценки извлекается только первый <AttributeValue> элемент. Как я могу получить и проверить все эти значения в моей политике?

Политика

<Policy xmlns="urn:oasis:names:tc:xacml:2.0:policy:schema:os"  PolicyId="a-user-role-policy" RuleCombiningAlgId="urn:oasis:names:tc:xacml:1.0:rule-combining-algorithm:first-applicable">
   <Description>Sample XACML Authorization Policy</Description>
   <Target></Target>
   <Rule Effect="Permit" RuleId="primary-group-rule">
      <Target>
         <Actions>
            <Action>
               <ActionMatch MatchId="urn:oasis:names:tc:xacml:1.0:function:string-equal">
                  <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">read</AttributeValue>
                  <ActionAttributeDesignator AttributeId="urn:oasis:names:tc:xacml:1.0:action:action-id" DataType="http://www.w3.org/2001/XMLSchema#string"></ActionAttributeDesignator>
               </ActionMatch>
            </Action>
         </Actions>
      </Target>
      <Condition>
         <Apply FunctionId="urn:oasis:names:tc:xacml:1.0:function:any-of">
            <Function FunctionId="urn:oasis:names:tc:xacml:1.0:function:string-equal"></Function>
            <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">super-admin</AttributeValue>
            <SubjectAttributeDesignator AttributeId="group" DataType="http://www.w3.org/2001/XMLSchema#string"></SubjectAttributeDesignator>
         </Apply>
      </Condition>
   </Rule>
   <Rule Effect="Deny" RuleId="deny-rule"></Rule>
</Policy>

Запрос

<Request xmlns="urn:oasis:names:tc:xacml:2.0:context:schema:os"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <Subject>
        <Attribute AttributeId="group"
            DataType="http://www.w3.org/2001/XMLSchema#string">
            <AttributeValue>admin</AttributeValue>
            <AttributeValue>super-admin</AttributeValue>
        </Attribute>
    </Subject>
    <Resource>
        <Attribute AttributeId="urn:oasis:names:tc:xacml:1.0:resource:resource-id"
            DataType="http://www.w3.org/2001/XMLSchema#string">
            <AttributeValue>http://localhost:8280/services/echo/</AttributeValue>
        </Attribute>
    </Resource>
    <Action>
        <Attribute AttributeId="urn:oasis:names:tc:xacml:1.0:action:action-id"
            DataType="http://www.w3.org/2001/XMLSchema#string">
            <AttributeValue>read</AttributeValue>
        </Attribute>
    </Action>
    <Environment />
</Request>

person user098    schedule 20.03.2019    source источник
comment
Какой движок вы используете?   -  person David Brossard    schedule 20.03.2019
comment
Вам следует перейти на AuthZForce (открытый код) или Axiomatics (коммерческий)   -  person David Brossard    schedule 20.03.2019
comment
Я использую сервер идентификации WSO2 5.4.1.   -  person user098    schedule 20.03.2019
comment
Хммм, они должны быть в порядке и теперь уже на XACML 3.0   -  person David Brossard    schedule 20.03.2019
comment
Он отлично работает, когда я разбиваю список ‹AttributeValue› на отдельные элементы ‹Attribute›, каждый из которых имеет одно ‹AttributeValue›.   -  person user098    schedule 20.03.2019
comment
Что ж, это серьезная ошибка, имхо. Вы можете выразить просьбу любым способом. Они эквивалентны.   -  person David Brossard    schedule 20.03.2019


Ответы (1)


По дизайну в XACML атрибуты всегда считаются многозначными. Это то, что мы называем сумками. Значения атрибутов не имеют порядка. Это означает, что:

  • Пример 1: role = ["manager"]
  • Пример 2: role = ["manager", "janitor"]
  • Пример 3: role = ["уборщик", "менеджер"]
  • Пример 4: role = ["уборщик", "менеджер", "менеджер"]

все допустимые значения для роли атрибута. Обратите внимание, что даже однозначный атрибут по-прежнему представляет собой набор значений. Примеры 2 и 3 одинаковы, порядок в мешках не имеет значения. Наконец, значения можно повторять в сумке. Я не могу придумать вескую причину, почему, но технически они могут (как в примере 4).

Если по какой-то причине используемый вами PDP учитывает только первое значение, значит, в его реализации есть серьезная ошибка.

person David Brossard    schedule 20.03.2019