#authorization #access-control #xacml #abac #xacml2
#авторизация #контроль доступа #xacml #abac #xacml2
Вопрос:
Как я могу оценить многозначные атрибуты в XACML 2.0? У меня есть следующая политика и запрос XACML 2.0. Пользователь получает разрешение, если он находится в роли суперадминистратора. При наличии нескольких ролей в качестве <AttributeValue>
элементов в пределах одного и того же атрибута subject для оценки извлекается только первый <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>
Комментарии:
1. Какой движок вы используете?
2. Вам следует переключиться на AuthZForce (с открытым исходным кодом) или Axiomatics (коммерческий)
3. Я использую WSO2 identity server 5.4.1.
4. Хммм, они должны быть в порядке, а также быть на XACML 3.0 к настоящему времени
5. Это работает нормально, когда я разбиваю список <AttributeValue> на отдельные элементы <Attribute>, каждый из которых имеет одно <AttributeValue> .
Ответ №1:
По замыслу, в XACML атрибуты всегда считаются многозначными. Это то, что мы называем пакетами. Значения атрибута не имеют порядка. Это означает, что:
- Пример 1: роль = [«менеджер»]
- Пример 2: роль = [«менеджер», «уборщик»]
- Пример 3: роль = [«уборщик», «менеджер»]
- Пример 4: роль = [«уборщик», «менеджер», «manager»]
все ли допустимые значения для роли атрибута. Обратите внимание, что даже однозначный атрибут по-прежнему представляет собой набор значений. Примеры 2 и 3 одинаковы, заданный порядок в пакетах не имеет значения. Наконец, значения могут повторяться в пакете. Я не могу придумать вескую причину, почему, но технически они могут (как в примере 4).
Если по какой-то причине используемый вами PDP учитывает только первое значение, то в его реализации имеется серьезная ошибка.