Я хотел бы получить некоторую помощь по имеющемуся у меня проекту ABAC, XACML, где я пытаюсь получить запрос и ответ от сервера, одновременно разговаривая с ним через скрипт PHP, как показано ниже.
<?php
$postdata = '<xacml-ctx:Request ReturnPolicyIdList="true" CombinedDecision="true" xmlns:xacml-ctx="urn:oasis:names:tc:xacml:3.0:core:schema:wd-17">
<xacml-ctx:Attributes Category="urn:oasis:names:tc:xacml:1.0:subject-category:access-subject" >
<xacml-ctx:Attribute AttributeId="http://www.axiomatics.com/acs/role" IncludeInResult="true">
<xacml-ctx:AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">Jimi</xacml-ctx:AttributeValue>
</xacml-ctx:Attribute>
</xacml-ctx:Attributes>
<xacml-ctx:Attributes Category="urn:oasis:names:tc:xacml:3.0:attribute-category:action" >
<xacml-ctx:Attribute AttributeId="urn:oasis:names:tc:xacml:1.0:action:action-id" IncludeInResult="true">
<xacml-ctx:AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">view</xacml-ctx:AttributeValue>
</xacml-ctx:Attribute>
</xacml-ctx:Attributes>
<xacml-ctx:Attributes Category="urn:oasis:names:tc:xacml:3.0:attribute-category:environment" >
</xacml-ctx:Attributes>
<xacml-ctx:Attributes Category="urn:oasis:names:tc:xacml:3.0:attribute-category:resource" >
<xacml-ctx:Attribute AttributeId="urn:oasis:names:tc:xacml:1.0:resource:resource-id" IncludeInResult="true">
<xacml-ctx:AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">bank account</xacml-ctx:AttributeValue>
</xacml-ctx:Attribute>
</xacml-ctx:Attributes>
</xacml-ctx:Request>';
Эта часть является запросом, политика, которую я сохранил в точке администрирования политики, является следующей:
$ch = curl_init();
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-type: application/xml'));
curl_setopt($ch, CURLOPT_URL, 'http://localhost:8080/pdp/?type=config');
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $postdata);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$data = curl_exec($ch);
curl_close($ch);
echo $data;<xacml3:Policy xmlns:xacml3="urn:oasis:names:tc:xacml:3.0:core:schema:wd-17" PolicyId="http://www.axiomatics.com/automatic-unique-id/5ec8c01d-456c-4800-b28b-ad3d289ecba3" Version="1.0" RuleCombiningAlgId="urn:oasis:names:tc:xacml:3.0:rule-combining-algorithm:deny-unless-permit">
<xacml3:PolicyDefaults><xacml3:XPathVersion>http://www.w3.org/TR/1999/REC-xpath-19991116</xacml3:XPathVersion></xacml3:PolicyDefaults>
<xacml3:Target>
<xacml3:AnyOf>
<xacml3:AllOf>
<xacml3:Match MatchId="urn:oasis:names:tc:xacml:1.0:function:string-equal">
<xacml3:AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">bank account</xacml3:AttributeValue>
<xacml3:AttributeDesignator Category="urn:oasis:names:tc:xacml:3.0:attribute-category:resource" AttributeId="urn:oasis:names:tc:xacml:1.0:resource:resource-id" DataType="http://www.w3.org/2001/XMLSchema#string" MustBePresent="false"/>
</xacml3:Match>
<xacml3:Match MatchId="urn:oasis:names:tc:xacml:1.0:function:string-equal">
<xacml3:AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">view</xacml3:AttributeValue>
<xacml3:AttributeDesignator Category="urn:oasis:names:tc:xacml:3.0:attribute-category:action" AttributeId="urn:oasis:names:tc:xacml:1.0:action:action-id" DataType="http://www.w3.org/2001/XMLSchema#string" MustBePresent="false"/>
</xacml3:Match>
<xacml3:Match MatchId="urn:oasis:names:tc:xacml:1.0:function:string-equal">
<xacml3:AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">Jimi</xacml3:AttributeValue>
<xacml3:AttributeDesignator Category="urn:oasis:names:tc:xacml:1.0:subject-category:access-subject" AttributeId="http://www.axiomatics.com/acs/role" DataType="http://www.w3.org/2001/XMLSchema#string" MustBePresent="false"/>
</xacml3:Match>
</xacml3:AllOf>
</xacml3:AnyOf>
</xacml3:Target>
<xacml3:Rule RuleId="51179cb3-5319-4a35-a13e-ac1db27b5d93" Effect="Permit">
<xacml3:Description>doctor can view medicalrecord</xacml3:Description>
<xacml3:Target/>
</xacml3:Rule>
<xacml3:Rule RuleId="a2af1648-41c0-4843-ba4f-c1284d367957" Effect="Deny">
<xacml3:Target/>
</xacml3:Rule>
</xacml3:Policy>
Первоначальный запрос был с именем «кассир». Всякий раз, когда я меняю имя в кассире, система отвечает: «разрешить». Теперь моя проблема заключается в том, когда я изменяю имя в политике, которая хранится в PAP, и в сценарии php на «jimi». Я получаю следующую ошибку:
<?xml version="1.0" encoding="UTF-8"?>
<Response xmlns="urn:oasis:names:tc:xacml:3.0:core:schema:wd-17" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="urn:oasis:names:tc:xacml:3.0:core:schema:wd-17 http://docs.oasis-open.org/xacml/3.0/xacml-core-v3-schema-wd-17.xsd">
<Result>
<Decision>Indeterminate</Decision>
<Status>
<StatusCode Value="urn:oasis:names:tc:xacml:1.0:status:processing-error"/>
<StatusMessage>No matching root policy found</StatusMessage>
</Status>
</Result>
</Response>
Всякий раз, когда я меняю политику, я не получаю «отказ», но нет соответствующей корневой политики. Хотя я четко изменил имя в политике на мое ..
Что я здесь не так делаю? Где еще можно было бы назвать имя кассира вместо моего имени?
Я проверил вашу политику с помощью редактора политики Axiomatics, и вот что вернулось:
Мой первый комментарий заключается в том, что вы должны добавить описания ко всем своим правилам. Здесь вы можете видеть, что у вас есть 1 политика с алгоритмом объединения deny-if-allow. Политика содержит правило Permit и правило Deny.
Теперь, если мы проверим родительскую политику, мы увидим, что есть целевой набор. Цель заявляет, что политика будет применяться, если роль входящего пользователя — Jimi, выполняющий действие в банковском счете с идентификатором ресурса. Это не имеет смысла, учитывая, что первое правило в политике касается врачей и медицинских карт. Кажется, что описание правила старое, учитывая, что цель правила пуста. Кроме того, не имеет смысла иметь 2 пустых правила, как у вас. Вы должны это исправить
Я загрузил ваш первый запрос в инструмент моделирования Axiomatics и получил это:
Если я запускаю запрос, я получаю Разрешать.
Теперь, если я изменю запрос на пользователя teller
вместо Jimi
тогда я получаю NotApplicable
,
Какой PDP вы используете? Получение Indeterminate не соответствует спецификации.
Других решений пока нет …