WSO2 Identity Server - Как написать политику 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\">tony@br.red.com</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 и его расширения, обращаясь к новым поля, добавленные кодом.

2 ответа

Решение

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

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

Ура, Дэвид.

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

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

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

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

Ниже приведена очень простая политика, которая была протестирована с помощью кода расширения 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">tony@br.red.com</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>
Другие вопросы по тегам