2014-12-08 2 views
0

Я разрабатываю политику XACML, и я использую библиотеку sun.xacml. Я хочу сравнить два атрибута: один для темы и один для ресурса, разрешающий доступ к ресурсам.Сравнение атрибутов внутри политики XACML

Я создал этот XACML файл

<?xml version="1.0"?> 
 
<Policy PolicyId="GeneratedPolicy" RuleCombiningAlgId="urn:oasis:names:tc:xacml:1.0:rule-combining-algorithm:permit-overrides"> 
 
    <Description>Policy che permette la lettura del file ai client che hanno un livello di permesso maggiore o uguale al livello di permesso del file richiesto</Description> 
 
    <Target> 
 
<Subjects> 
 
    <AnySubject/> 
 
</Subjects> 
 
<Resources> 
 
    <AnyResource/> 
 
</Resources> 
 
<Actions> 
 
    <Action> 
 
\t <ActionMatch MatchId="urn:oasis:names:tc:xacml:1.0:function:string-equal"> 
 
\t <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">read</AttributeValue> 
 
\t <ActionAttributeDesignator AttributeId="urn:oasis:names:tc:xacml:1.0:action:action-id" DataType="http://www.w3.org/2001/XMLSchema#string"/> 
 
\t </ActionMatch> 
 
    </Action> 
 
</Actions> 
 
    </Target> 
 
    <Rule RuleId="canRead" Effect="Permit"> 
 
<Target> 
 
    <Subjects> 
 
\t <AnySubject/> 
 
    </Subjects> 
 
    <Resources> 
 
\t <AnyResource/> 
 
    </Resources> 
 
    <Actions> 
 
\t <Action> 
 
\t <ActionMatch MatchId="urn:oasis:names:tc:xacml:1.0:function:string-equal"> 
 
\t \t <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">read</AttributeValue> 
 
\t \t <ActionAttributeDesignator AttributeId="urn:oasis:names:tc:xacml:1.0:action:action-id" DataType="http://www.w3.org/2001/XMLSchema#string"/> 
 
\t </ActionMatch> 
 
\t </Action> 
 
    </Actions> 
 
</Target> 
 
<Condition FunctionId="urn:oasis:names:tc:xacml:1.0:function:string-greater-than-or-equal"> 
 
    <Apply FunctionId="urn:oasis:names:tc:xacml:1.0:function:string-one-and-only"> 
 
\t <SubjectAttributeDesignator AttributeId="level-permission" DataType="http://www.w3.org/2001/XMLSchema#string"/> 
 
    </Apply> 
 
    <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">4</AttributeValue> 
 
</Condition> 
 
    </Rule> 
 
    <Rule RuleId="FinalRule" Effect="Deny"/> 
 
</Policy>

Проблема заключается в том, что ресурс имеет уровень-разрешение и я хочу, чтобы сравнить уровень-разрешения субъекта и уровень-разрешение ресурса, но я не знаю, как это сделать.

большое спасибо

+0

Я не уверен, я понимаю, что именно вы пытаетесь сделать. На что вы ссылаетесь на «уровень-разрешение»? Это какой-то уровень доступа, как у вас в модели MLS, где каждый субъект будет иметь (максимальный) уровень доступа (секретный, секретный, ...), и каждый ресурс будет иметь (минимальный) уровень доступа как Что ж? –

+0

Можете ли вы выразить на простом старом английском (или итальянском), какова ваша конечная цель? Например: пользователь с ролью == manager хочет выполнить действие == представление на документах типа X, если и только классификация документов <пользовательское оформление. –

+0

Кроме того, это выглядит как политика XACML 1.1 или XACML 2.0. Что вы использовали для создания политики? Вы заглянули в ALFA? –

ответ

0

Вы почти находитесь. Всякий раз, когда вам нужно сравнить два атрибута вместе, например. user-clearance и resource-classification, вам необходимо использовать XACML Condition. Вы попытались сделать это в своем примере, но вы сравнили атрибут со статическим значением.

Вот простой пример в ALFA (Axiomatics Language for Authorization).

policy documentAccess{ 
    apply firstApplicable 
    rule allowAccessIfClearanceSufficient{ 
     condition user.clearance>document.classification 
     permit 
    } 
} 

Я определяю свои атрибуты следующим образом:

attribute classification{ 
     category = resourceCat 
     id = "document.classification" 
     type = integer 
    } 

и

attribute clearance{ 
     category = subjectCat 
     id = "user.clearance" 
     type = integer 
    } 

Обратите внимание, что я использую целое здесь вместо строки. Это более эффективно и безопаснее.

Выход в 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/example.documentAccess" 
    RuleCombiningAlgId="urn:oasis:names:tc:xacml:1.0:rule-combining-algorithm:first-applicable" 
    Version="1.0"> 
    <xacml3:Description /> 
    <xacml3:PolicyDefaults> 
     <xacml3:XPathVersion>http://www.w3.org/TR/1999/REC-xpath-19991116</xacml3:XPathVersion> 
    </xacml3:PolicyDefaults> 
    <xacml3:Target /> 
    <xacml3:Rule 
      Effect="Permit" 
      RuleId="http://axiomatics.com/alfa/identifier/example.documentAccess.allowAccessIfClearanceSufficient"> 
     <xacml3:Description /> 
     <xacml3:Target /> 
     <xacml3:Condition> 
      <xacml3:Apply FunctionId="urn:oasis:names:tc:xacml:1.0:function:any-of-any"> 
       <xacml3:Function FunctionId="urn:oasis:names:tc:xacml:1.0:function:string-greater-than"/> 
       <xacml3:AttributeDesignator 
        AttributeId="user.clearance" 
        DataType="http://www.w3.org/2001/XMLSchema#string" 
        Category="urn:oasis:names:tc:xacml:1.0:subject-category:access-subject" 
        MustBePresent="false" 
       /> 
       <xacml3:AttributeDesignator 
        AttributeId="document.classification" 
        DataType="http://www.w3.org/2001/XMLSchema#string" 
        Category="urn:oasis:names:tc:xacml:3.0:attribute-category:resource" 
        MustBePresent="false" 
       /> 
      </xacml3:Apply> 
     </xacml3:Condition> 
    </xacml3:Rule> 
</xacml3:Policy> 
Смежные вопросы