Сервер идентификации WSO2 - Как написать политику XACML для расширенного PIP

Код расширения PIP с использованием класса RedAttributeFinder теперь работает. Он правильно регистрирует свои утверждения на дисплее консоли расширения WSO2 PDP.

Я начинаю создавать политику XACML сейчас, обращаясь к полю, которое возвращает значение динамических данных, предоставляемое программой расширения (например, поле с именем "http://w3.red.com/subject/employeeCountryCode ").

Ключевое поле для поиска данных: urn:oasis:names:tc:xacml:1.0:resource:resource-id, которое отображает идентификатор пользователя в формате электронной почты.

Вопрос 1: Как выполняется вызов метода «getAttributesValues» в классе «RedAttributeFinder», зарегистрированном в начале WSO2. Что вызывает вызов метода из процесса PDP (или его входящих запросов)?

В примере кода, а также в моей реализации ключевым полем является идентификатор ресурса, который загружается как часть реализации запроса PEP.

..
myRequest += "<Attributes Category=\"urn:oasis:names:tc:xacml:1.0:subject-category:access-subject\">" + "\n"; 
myRequest += "<Attribute AttributeId=\"urn:oasis:names:tc:xacml:1.0:subject:subject-id\" IncludeInResult=\"false\">" + "\n"; 
myRequest += "<AttributeValue DataType=\"http://www.w3.org/2001/XMLSchema#string\">[email protected]</AttributeValue>" + "\n"; 
myRequest += "</Attribute>" + "\n";  
myRequest += "</Attributes>" + "\n"; 
myRequest += "<Attributes Category=\"urn:oasis:names:tc:xacml:3.0:attribute-category:resource\">" + "\n"; 
myRequest += "<Attribute AttributeId=\"urn:oasis:names:tc:xacml:1.0:resource:resource-id\" IncludeInResult=\"true\">" + "\n"; 
.. 

Это ключевой ввод для «getAttributesValues ​​()», который возвращает код страны (аналогично определению роли [синий, серебристый, золотой] в примере кода WSO2 [доступно здесь https://svn.wso2.org/repos/wso2/carbon/platform/trunk/components/identity/org.wso2.carbon.identity.samples.entitlement.pip/].

В примере я вижу, что требуемое разрешение значения ролей, например «синий», является частью определения цели политики.

Вопрос 2: Это размещение внутри целевого раздела является требованием для вызова динамического поиска PIP, по одному для каждого запроса, или его также можно разместить в других частях политики, например, внутри правила ?

Я смог протестировать взаимодействие PEP с PDP с определением правила, только путем определения статических переменных, получения «разрешения», правила, которое я хотел бы изменить на динамические данные, полученные из реализации PIP и его расширения, обращаясь к новому поля, добавленные кодом.


person Claude Falbriard    schedule 24.09.2015    source источник


Ответы (2)


В стандартной реализации, соответствующей стандарту XACML, PDP будет вызывать PIP каждый раз, когда он находит указатель атрибута в своих политиках, который также публикуется PIP (это означает, что PIP должен объявлять, какие атрибуты он может предоставить, например, он предоставляет роль , гражданство ...).

PDP может решить не вызывать PIP и вместо этого использовать кэш атрибутов. Размещение атрибута в политике не имеет значения. Используется ли атрибут внутри цели или в условии, не имеет значения - по крайней мере, в соответствии со спецификацией - и именно так работают механизмы Axiomatics, SunXACML и ATT.

Ура, Дэвид.

person David Brossard    schedule 25.09.2015

Я нашел полезную опцию отладки в настройке WSO2, добавив эту строку в файл log4j.properties:

log4j.logger.org.wso2.carbon.identity.entitlement=DEBUG

Эта команда начала отслеживать запросы, отправленные в PIP, включая вызов класса расширения PIP (по указателю атрибута) и возвращаемые поля данных.

Это подтвердило, что PIP динамически вызывается PDP, а также функция Try-It. Приведенная ниже политика дала ожидаемые результаты «разрешать» и «запрещать», тем самым подтверждая надлежащее функционирование программы расширения PIP.

Ниже очень простая политика, которая была протестирована с кодом расширения PIP, получая значение переменной данных с именем: employeeCountryCode.

Политика

<Policy xmlns="urn:oasis:names:tc:xacml:3.0:core:schema:wd-17"  PolicyId="RedLDAPPolicy1" RuleCombiningAlgId="urn:oasis:names:tc:xacml:3.0:rule-combining-algorithm:permit-overrides" Version="1.0">
<Target>
</Target>
<Rule Effect="Permit" RuleId="Permit-Rule1">
<Target>
<AnyOf>
<AllOf>
<Match MatchId="urn:oasis:names:tc:xacml:1.0:function:string-equal">
<AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">631</AttributeValue>
<AttributeDesignator AttributeId="http://w3.red.com/subject/employeeCountryCode" Category="urn:oasis:names:tc:xacml:1.0:subject-category:access-subject" DataType="http://www.w3.org/2001/XMLSchema#string" MustBePresent="true">
</AttributeDesignator>
</Match>
</AllOf>
</AnyOf>
<AnyOf>
<AllOf>
<Match MatchId="urn:oasis:names:tc:xacml:1.0:function:string-equal">
<AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">ldap</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">
</AttributeDesignator>
</Match>
</AllOf>
</AnyOf>
<AnyOf>
<AllOf>
<Match MatchId="urn:oasis:names:tc:xacml:1.0:function:string-equal">
<AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">read</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">
</AttributeDesignator>
</Match>
</AllOf>
</AnyOf>
</Target>
</Rule>
<Rule Effect="Deny" RuleId="Deny-Rule">
</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">read</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">[email protected]</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="true">
<AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">ldap</AttributeValue>
</Attribute>
</Attributes>
</Request>
person Claude Falbriard    schedule 25.09.2015