2016-02-29 8 views
1

Я не могу понять, как написать правило, которое разрешило бы это требование:XACML правила проверки между ресурсами и объекта с помощью XPath

Давайте предположим, что у меня есть этот запрос:

<Request> 
    <Attributes Category="urn:oasis:names:tc:xacml:1.0:subject-category:access-subject"> 
    <Content> 
     <Categories> 
     <Category name="cat1"> 
      <CategoryValue>A</CategoryValue> 
      <CategoryValue>B</CategoryValue> 
      <CategoryValue>C</CategoryValue> 
     </Category> 
     <Category name="cat2"> 
      <CategoryValue>B</CategoryValue> 
      <CategoryValue>E</CategoryValue> 
      <CategoryValue>F</CategoryValue> 
     </Category> 
     </Categories> 
    </Content> 
    </Attributes> 
    <Attributes Category="urn:oasis:names:tc:xacml:3.0:attribute-category:resource"> 
    <Content> 
     <Categories> 
     <Category name="cat1"> 
      <CategoryValue>A</CategoryValue> 
     </Category> 
     <Category name="cat2"> 
      <CategoryValue>A</CategoryValue> 
      <CategoryValue>E</CategoryValue> 
      <CategoryValue>F</CategoryValue> 
      <CategoryValue>G</CategoryValue> 
     </Category> 
     </Categories> 
    </Content> 
    </Attributes> 
</Request> 

Я хочу написать политику, которая содержит правило с разрешением на эффект, когда для каждого из Category элементов ресурса, субъект имеет Category с тем же @nameи, если оба из этих элементов Category имеют в л восточный один общий CategoryValue.

В этом примере выше:

  • Ресурс имеет "cat1" с "A" - Предмет имеет "cat1" с одним значением, которое A: Разрешение
  • Ресурс имеет "КАТ2" с "A" , "E", "F", "G" - Субъект имеет "КАТ2" со значением Е (или F): разрешение
  • Окончательный результат этого правила: разрешение

Мой вопрос не на котором functionId Я должен использовать, но как я могу объединить эти условия? o что правило ведет себя так, как я описал? Как сравнить элементы GenericValue узлов с тем же @name?

Я думаю, что мне нужно будет использовать функцию string-at-least-one-member-of между значениями предмета и ресурсом «cat1», а затем между объектом и ресурсом «cat2», но реальная трудность заключается в том, что PDP не имеет понятия о @name элементов Category, поэтому я не могу его жестко закодировать в правиле, и я не знаю, как их выбрать, в частности, для выполнения проверки.

Любая идея по этому вопросу?

ответ

0

Прежде всего, ваш запрос недействителен. Вам не хватает некоторых элементов, например.

  • ReturnPolicyIdList = "истинный"
  • CombinedDecision = "истинный"

Во-вторых, я рекомендовал бы вам не использовать XPath в XACML. Это делает вашу политику трудной для написания (следовательно, ваш вопрос), трудно поддерживать и трудно читать (аудит). Это в какой-то мере побеждает цель XACML. Пусть PEP выполняет тяжелую обработку XML и отправляет атрибуты со значениями атрибутов, а не с XML-контентом.

Кроме того, вы не можете контролировать итерацию по различным значениям элементов/атрибутов в XML в XACML. Я могу реализовать ваш прецедент с определенным значением @name, но я не могу сделать это над массивом значений.

Предполагая, что одно значение, вы должны выполнить условие следующим образом:

<xacml3:Rule RuleId="axiomatics-example-xacml30" Effect="Permit" xmlns:xacml3="urn:oasis:names:tc:xacml:3.0:core:schema:wd-17"> 
    <xacml3:Target/> 
    <xacml3:Condition > 
      <xacml3:Apply FunctionId="urn:oasis:names:tc:xacml:1.0:function:string-at-least-one-member-of"> 
       <xacml3:AttributeSelector Path="/Categories/Category[@name='cat1']/CategoryValue/text()" DataType="http://www.w3.org/2001/XMLSchema#string" MustBePresent="false" Category="urn:oasis:names:tc:xacml:1.0:subject-category:access-subject"/> 
       <xacml3:AttributeSelector Path="/Categories/Category[@name='cat1']/CategoryValue/text()" DataType="http://www.w3.org/2001/XMLSchema#string" MustBePresent="false" Category="urn:oasis:names:tc:xacml:3.0:attribute-category:resource"/> 
      </xacml3:Apply> 
    </xacml3:Condition> 
</xacml3:Rule> 

Но вы не можете перебирать различные значения

+0

ок, я буду делать, как вы говорите по предварительной обработке XML в PEP. Спасибо за этот ответ :) – Kwoinkwoin

 Смежные вопросы

  • Нет связанных вопросов^_^