Код расширения 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 и его расширения, обращаясь к новому поля, добавленные кодом.