2015-07-29 8 views
1

Я написал базовый тестовый пример с XACML с помощью инструмента Simple Editor.WSO2 Idenity, XACML Simple Editor, Try It tool - Правила оценки

Мое правило: «Только врач может получить доступ к медицинской документации»

При использовании имя роли «администратора», все работает нормально, и ответ из запроса является «разрешение». Случай я обновляю роль как в политике, так и в запросе и устанавливаю ее в значение: «doctor», тогда механизм правил возвращает ошибочный «deny». Для тестирования я также записал имя роли пользователя со значением «доктор», которое является желаемым значением и добавило один идентификатор в консоли WSO2.

Почему XACML под WSO2 постоянно отрицает любой запрос на оценку при использовании другой роли, затем «врач»? (См получившиеся политики и запрос заявлений ниже)

Политика

<Policy xmlns="urn:oasis:names:tc:xacml:3.0:core:schema:wd-17" PolicyId="MedicalRecords" RuleCombiningAlgId="urn:oasis:names:tc:xacml:1.0:rule-combining-algorithm:first-applicable" Version="1.0"> 
    <Description>doctors</Description> 
    <Target> 
     <AnyOf> 
     <AllOf> 
      <Match MatchId="urn:oasis:names:tc:xacml:1.0:function:string-equal"> 
       <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">MedicalRecords</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="Rule-1"> 
     <Target> 
     <AnyOf> 
      <AllOf> 
       <Match MatchId="urn:oasis:names:tc:xacml:1.0:function:string-equal"> 
        <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">update</AttributeValue> 
        <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"/> 
       </Match> 
      </AllOf> 
     </AnyOf> 
     </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"/> 
      <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">doctor</AttributeValue> 
      <AttributeDesignator AttributeId="http://wso2.org/claims/role" Category="urn:oasis:names:tc:xacml:1.0:subject-category:access-subject" DataType="http://www.w3.org/2001/XMLSchema#string" MustBePresent="true"/> 
     </Apply> 
     </Condition> 
    </Rule> 
    <Rule Effect="Deny" RuleId="Deny-Rule"/> 
</Policy>   

Запрос

<Request xmlns="urn:oasis:names:tc:xacml:3.0:core:schema:wd-17" CombinedDecision="false" ReturnPolicyIdList="false"> 
<Attributes Category="urn:oasis:names:tc:xacml:3.0:attribute-category:action"> 
<Attribute AttributeId="urn:oasis:names:tc:xacml:1.0:action:action-id" IncludeInResult="false"> 
<AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">update</AttributeValue> 
</Attribute> 
</Attributes> 
<Attributes Category="urn:oasis:names:tc:xacml:1.0:subject-category:access-subject"> 
<Attribute AttributeId="urn:oasis:names:tc:xacml:1.0:subject:subject-id" IncludeInResult="false"> 
<AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">doctor</AttributeValue> 
</Attribute> 
</Attributes> 
<Attributes Category="urn:oasis:names:tc:xacml:3.0:attribute-category:resource"> 
<Attribute AttributeId="urn:oasis:names:tc:xacml:1.0:resource:resource-id" IncludeInResult="false"> 
<AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">MedicalRecords</AttributeValue> 
</Attribute> 
</Attributes> 
</Request> 

Спасибо за обратную связь и поддержку.

С уважением, Клод

ответ

0

Поскольку вы добавили http://wso2.org/claims/role как AttributeId для субъекта, следующие должны быть ваш запрос XACML

<?xml version="1.0" encoding="UTF-8"?> 
<Request xmlns="urn:oasis:names:tc:xacml:3.0:core:schema:wd-17" CombinedDecision="false" ReturnPolicyIdList="false"> 
    <Attributes Category="urn:oasis:names:tc:xacml:3.0:attribute-category:action"> 
     <Attribute AttributeId="urn:oasis:names:tc:xacml:1.0:action:action-id" IncludeInResult="false"> 
     <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">update</AttributeValue> 
     </Attribute> 
    </Attributes> 
    <Attributes Category="urn:oasis:names:tc:xacml:1.0:subject-category:access-subject"> 
     <Attribute AttributeId="http://wso2.org/claims/role" IncludeInResult="false"> 
     <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">doctor</AttributeValue> 
     </Attribute> 
    </Attributes> 
    <Attributes Category="urn:oasis:names:tc:xacml:3.0:attribute-category:resource"> 
     <Attribute AttributeId="urn:oasis:names:tc:xacml:1.0:resource:resource-id" IncludeInResult="false"> 
     <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">MedicalRecords</AttributeValue> 
     </Attribute> 
    </Attributes> 
</Request> 

значений XAML результаты против AttributeId, вы должны использовать тот же AttributeId. Butm вы использовали urn:oasis:names:tc:xacml:1.0:subject:subject-id в качестве атрибута в запросе.

+0

Спасибо, отлично работал. Не знал о необходимости ручной настройки AttributeId в запросе. Было бы неплохо, если бы инструмент мог создать шаблон. Тем не менее, еще одно сомнение от новичка: есть ли какая-либо команда трассировки, которая позволяет отслеживать шаги рассуждений механизма правил, которые генерируют окончательный результат: «Разрешить», «Запретить» или «Не применимо» в потоке политики? –

+0

Вы можете добавить 'log4j.logger.org.wso2.carbon.identity.entitlement = DEBUG 'в /repository/conf/log4j.properties. Поэтому вы можете видеть причину. Вам не нужно добавлять AttributeId вручную, если вы не модифицируете политику и не добавили этот пользовательский атрибут. –