2013-03-01 2 views
3

У меня вопрос о правилах XACML, которые я использую с библиотекой WSO2 Balana.Политика XACML - это правильно?

Наличие политики:

<Policy xmlns="urn:oasis:names:tc:xacml:3.0:core:schema:wd-17" PolicyId="Policy1" RuleCombiningAlgId="urn:oasis:names:tc:xacml:1.0:rule-combining-algorithm:first-applicable" Version="1.0"> 
    <Target> 
     <AnyOf> 
      <AllOf> 
       <Match MatchId="urn:oasis:names:tc:xacml:1.0:function:string-equal"> 
        <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">MyApp</AttributeValue> 
        <AttributeDesignator AttributeId="urn:oasis:names:tc:xacml:1.0:resource:resource-id" 
            Category="urn:oasis:names:tc:xacml:3.0:attribute-category:resource" DataType="http://www.w3.org/2001/XMLSchema#string" MustBePresent="true"/> 
       </Match>    
      </AllOf> 
     </AnyOf> 
    </Target> 
    <Rule Effect="Permit" RuleId="RuleFor_user1_myapp"> 
     <Target> 
      <AnyOf> 
       <AllOf> 
        <Match MatchId="urn:oasis:names:tc:xacml:1.0:function:string-equal"> 
         <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">user1</AttributeValue> 
         <AttributeDesignator AttributeId="http://example.site.com/id/user" 
             Category="urn:oasis:names:tc:xacml:1.0:subject-category:access-subject" 
             DataType="http://www.w3.org/2001/XMLSchema#string" MustBePresent="true"/> 
        </Match> 
       </AllOf>   
      </AnyOf> 
     </Target> 
     <Apply FunctionId="urn:oasis:names:tc:xacml:1.0:function:string-at-least-one-member-of"> 
      <Apply FunctionId="urn:oasis:names:tc:xacml:1.0:function:string-bag"> 
       <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">READ</AttributeValue>         
      </Apply> 
      <AttributeDesignator AttributeId="urn:oasis:names:tc:xacml:1.0:action:action-id" Category="urn:oasis:names:tc:xacml:3.0:attribute-category:action" DataType="http://www.w3.org/2001/XMLSchema#string" MustBePresent="true"/> 
     </Apply> 
    </Rule> 
</Policy> 

Он должен определить, что user1 только разрешение на чтение MyApp.

У меня есть запрос на оценку, который спрашивает, имеет ли пользователь1 разрешения READ, и я получаю «Разрешение» в ответе, что в порядке.

Но когда у меня есть запрос на оценку, который спрашивает, имеет ли пользователь1 разрешения WRITE, я получаю также «Разрешить» вместо «Не применимо».

Может ли кто-нибудь сказать мне, что политика правильная, чтобы произвести результат, который я только что описал?

Спасибо заранее!

С наилучшими пожеланиями, Jurica Крижанич

ответ

3

Вы можете использовать http://validator.xacml.eu/, чтобы проверить, соответствует ли ваша политика XACML XACML 2.0 или XACML 3.0.

Кроме того, я бы рекомендовал вам использовать ALFA для написания политик - это проще и интегрируется с Eclipse.

АЛЬФА код выглядит следующим образом:

namespace sample{ 
    // Import standard XACML attributes 
    import Attributes.* 

    /** 
    * Define custom attributes here 
    */ 
    attribute user{ 
     category = subjectCat 
     id = "http://example.site.com/id/user" 
     type = string 
    } 

    /** 
    * MyApp Policy 
    */ 
    policy Policy1{ 
     target clause resourceId=="MyApp" 
     apply firstApplicable 
     /** 
     * This rule grants READ access for user 1 
     */ 
     rule RuleFor_user1_myapp{ 
      target clause user=="user1" and actionId=="READ" 
      permit 
     } 
    } 
} 

И сгенерированный XACML 3.0 выглядит следующим образом:

<?xml version="1.0" encoding="UTF-8"?> 
<!--This file was generated by the ALFA Plugin for Eclipse from Axiomatics AB (http://www.axiomatics.com). 
Any modification to this file will be lost upon recompilation of the source ALFA file--> 
<xacml3:Policy xmlns:xacml3="urn:oasis:names:tc:xacml:3.0:core:schema:wd-17" 
    PolicyId="http://axiomatics.com/alfa/identifier/sample.Policy1" 
    RuleCombiningAlgId="urn:oasis:names:tc:xacml:1.0:rule-combining-algorithm:first-applicable" 
    Version="1.0"> 
    <xacml3:Description>MyApp Policy</xacml3:Description> 
    <xacml3:PolicyDefaults> 
     <xacml3:XPathVersion>http://www.w3.org/TR/1999/REC-xpath-19991116</xacml3:XPathVersion> 
    </xacml3:PolicyDefaults> 
    <xacml3:Target> 
     <xacml3:AnyOf> 
      <xacml3:AllOf> 
       <xacml3:Match MatchId="urn:oasis:names:tc:xacml:1.0:function:string-equal"> 
        <xacml3:AttributeValue 
         DataType="http://www.w3.org/2001/XMLSchema#string">MyApp</xacml3:AttributeValue> 
        <xacml3:AttributeDesignator 
         AttributeId="urn:oasis:names:tc:xacml:1.0:resource:resource-id" 
         DataType="http://www.w3.org/2001/XMLSchema#string" 
         Category="urn:oasis:names:tc:xacml:3.0:attribute-category:resource" 
         MustBePresent="false" 
        /> 
       </xacml3:Match> 
      </xacml3:AllOf> 
     </xacml3:AnyOf> 
    </xacml3:Target> 
    <xacml3:Rule 
      Effect="Permit" 
      RuleId="http://axiomatics.com/alfa/identifier/sample.Policy1.RuleFor_user1_myapp"> 
     <xacml3:Description>This rule grants READ access for user 1</xacml3:Description> 
     <xacml3:Target> 
      <xacml3:AnyOf> 
       <xacml3:AllOf> 
        <xacml3:Match MatchId="urn:oasis:names:tc:xacml:1.0:function:string-equal"> 
         <xacml3:AttributeValue 
          DataType="http://www.w3.org/2001/XMLSchema#string">user1</xacml3:AttributeValue> 
         <xacml3:AttributeDesignator 
          AttributeId="http://example.site.com/id/user" 
          DataType="http://www.w3.org/2001/XMLSchema#string" 
          Category="urn:oasis:names:tc:xacml:1.0:subject-category:access-subject" 
          MustBePresent="false" 
         /> 
        </xacml3:Match> 
        <xacml3:Match MatchId="urn:oasis:names:tc:xacml:1.0:function:string-equal"> 
         <xacml3:AttributeValue 
          DataType="http://www.w3.org/2001/XMLSchema#string">READ</xacml3:AttributeValue> 
         <xacml3:AttributeDesignator 
          AttributeId="urn:oasis:names:tc:xacml:1.0:action:action-id" 
          DataType="http://www.w3.org/2001/XMLSchema#string" 
          Category="urn:oasis:names:tc:xacml:3.0:attribute-category:action" 
          MustBePresent="false" 
         /> 
        </xacml3:Match> 
       </xacml3:AllOf> 
      </xacml3:AnyOf> 
     </xacml3:Target> 
    </xacml3:Rule> 
</xacml3:Policy> 
+0

Веб-сайт валидатора XACML больше не работает. Есть ли другие валидаторы, которые я могу использовать? – Ozkan

+1

Просто используйте схему XACML 3.0 и стандартный инструмент проверки XML, например. Notepad ++ или XML Spy ... –

3

Первое состоит в том, политика не является действительным один со схемой XACML3. Вы должны иметь элемент, который заключен в элементе Apply в правиле. Правило в основном содержит элемент «Цель и условие». Балана не выполняет проверку схемы с вашей политикой. Он создает модуль объекта с помощью элемента политики. Поскольку он не может найти элемент в правиле, он игнорирует ваши элементы. Таким образом, ваше правило фактически имеет только целевой элемент, который оценивает только атрибут subject. Пожалуйста, используйте следующее. Также когда вы загружаете политику на сервер удостоверения WSO2, он выполняет проверку схемы. Вы можете просто загрузить или создать политику с ней легко.

+0

Спасибо за указание на это. –

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