Запрос XACML 3.0 с дополнительным атрибутом соответствует, даже если этот атрибут отсутствует в правиле политики

У меня есть политика XACML 3.0, определенная следующим образом:

<?xml version="1.0" encoding="UTF-8"?>
<Policy 
  xmlns="urn:oasis:names:tc:xacml:3.0:core:schema:wd-17" 
  xmlns:xacml="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" PolicyId="Proposal-Rules" RuleCombiningAlgId="urn:oasis:names:tc:xacml:1.0:rule-combining-algorithm:deny-overrides" Version="1.0">
  <Description>Policy for any proposal.</Description>
  <PolicyDefaults>
    <XPathVersion>http://www.w3.org/TR/1999/REC-xpath-19991116</XPathVersion>
  </PolicyDefaults>
  <Target />
  <Rule Effect="Permit" RuleId="ApproveProposalByDepartmentChair-Rule13a">
    <Description>"Department Chair" can "Approve" a "Whole Proposal" when ApprovedByDepartmentChair = READYFORAPPROVAL and where condition check all department chairs are not approved.</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">Department Chair</AttributeValue>
            <AttributeDesignator AttributeId="urn:oasis:names:tc:xacml:1.0:subject:position.title" Category="urn:oasis:names:tc:xacml:1.0:subject-category:access-subject" DataType="http://www.w3.org/2001/XMLSchema#string" MustBePresent="false" />
          </Match>
          <Match MatchId="urn:oasis:names:tc:xacml:1.0:function:string-equal">
            <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">Whole Proposal</AttributeValue>
            <AttributeDesignator AttributeId="urn:oasis:names:tc:xacml:1.0:resource:proposal.section" Category="urn:oasis:names:tc:xacml:3.0:attribute-category:resource" DataType="http://www.w3.org/2001/XMLSchema#string" MustBePresent="false" />
          </Match>
          <Match MatchId="urn:oasis:names:tc:xacml:1.0:function:string-equal">
            <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">READYFORAPPROVAL</AttributeValue>
            <AttributeDesignator AttributeId="urn:oasis:names:tc:xacml:1.0:resource:ApprovedByDepartmentChair" Category="urn:oasis:names:tc:xacml:3.0:attribute-category:resource" DataType="http://www.w3.org/2001/XMLSchema#string" MustBePresent="false" />
          </Match>
          <Match MatchId="urn:oasis:names:tc:xacml:1.0:function:string-equal">
            <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">Approve</AttributeValue>
            <AttributeDesignator AttributeId="urn:oasis:names:tc:xacml:1.0:action:proposal.action" Category="urn:oasis:names:tc:xacml:3.0:attribute-category:action" DataType="http://www.w3.org/2001/XMLSchema#string" MustBePresent="false" />
          </Match>
        </AllOf>
      </AnyOf>
    </Target>
    <Condition>
      <Apply FunctionId="urn:oasis:names:tc:xacml:1.0:function:boolean-equal">
        <Apply FunctionId="urn:oasis:names:tc:xacml:1.0:function:boolean-one-and-only">
          <AttributeSelector MustBePresent="false" Category="urn:oasis:names:tc:xacml:3.0:attribute-category:resource" Path="//ak:signedByAllChairs/text()" DataType="http://www.w3.org/2001/XMLSchema#boolean"/>
        </Apply>
        <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#boolean">false</AttributeValue>
      </Apply>
    </Condition>
  </Rule>
</Policy>

Мой запрос XACML выглядит следующим образом с дополнительным AttributeId = "group", содержащим значение "Computer Engineering".

<Request xmlns="urn:oasis:names:tc:xacml:3.0:core:schema:wd-17" CombinedDecision="false" ReturnPolicyIdList="false">
                <Attributes Category="urn:oasis:names:tc:xacml:1.0:subject-category:access-subject">
                    <Attribute AttributeId="urn:oasis:names:tc:xacml:1.0:subject:position.title" IncludeInResult="false">
                        <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">Department Chair</AttributeValue>
                    </Attribute>
                    <Attribute AttributeId="urn:oasis:names:tc:xacml:1.0:subject:group" IncludeInResult="false">
                        <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">Computer Engineering</AttributeValue>
                    </Attribute>
                </Attributes>
                <Attributes Category="urn:oasis:names:tc:xacml:3.0:attribute-category:resource">
                    <Content>
                        <record xmlns:ak="http://akpower.org">
                            <proposal>  
                                <signedByAllChairs>false</signedByAllChairs>
                            </proposal>
                        </record>
                    </Content>
                    <Attribute AttributeId="urn:oasis:names:tc:xacml:3.0:content-selector" IncludeInResult="false">
                        <AttributeValue XPathCategory="urn:oasis:names:tc:xacml:3.0:attribute-category:resource" DataType="urn:oasis:names:tc:xacml:3.0:data-type:xpathExpression">//ak:record/ak:proposal</AttributeValue>
                    </Attribute>
                    <Attribute AttributeId="urn:oasis:names:tc:xacml:1.0:resource:ApprovedByDepartmentChair" IncludeInResult="false">
                        <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">READYFORAPPROVAL</AttributeValue>
                    </Attribute>
                    <Attribute AttributeId="urn:oasis:names:tc:xacml:1.0:resource:proposal.section" IncludeInResult="false">
                        <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">Whole Proposal</AttributeValue>
                    </Attribute>
                </Attributes>
                <Attributes Category="urn:oasis:names:tc:xacml:3.0:attribute-category:action">
                    <Attribute AttributeId="urn:oasis:names:tc:xacml:1.0:action:proposal.action" IncludeInResult="false">
                        <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">Approve</AttributeValue>
                    </Attribute>
                </Attributes>
    </Request>

Я надеялся, что PEP вернет NotApplicable, но, напротив, он возвращает следующий ответ: с PERMIT, хотя определенное правило политики не содержит атрибутов, называемых «группа», как Цель правила, в то время как запрос отправляет атрибут «группа» со значением «Компьютерная инженерия» и даже возвращает совпадение и РАЗРЕШИТЬ ответ!

<Response xmlns="urn:oasis:names:tc:xacml:3.0:core:schema:wd-17">
    <Result>
        <Decision>Permit</Decision>
        <Status>
            <StatusCode Value="urn:oasis:names:tc:xacml:1.0:status:ok" />
        </Status>       
    </Result>
</Response>

Что-то мне не хватает? Я не мог понять этого. В настоящее время я использую Balana в качестве реализации PEP для своего приложения.


person Milson    schedule 30.07.2016    source источник
comment
Вы только включили правило. У вас есть вся политика?   -  person David Brossard    schedule 31.07.2016
comment
Кстати, в вашем фрагменте отсутствует закрывающий элемент ‹Rule /›   -  person David Brossard    schedule 31.07.2016
comment
И вам нужно определить пространство имен для префикса ak   -  person David Brossard    schedule 31.07.2016
comment
Привет, @DavidBrossard, я обновляю всю Политику со всеми деталями для вашей справки. Меня беспокоит, почему запрос с атрибутом 2 субъектов не проверяется, даже если существует только один допустимый субъект, заставляет правило возвращать РАЗРЕШЕНИЕ, а не должно возвращать ответ NotApplicable   -  person Milson    schedule 01.08.2016
comment
У вас также неправильный фрагмент XML ... Вы написали ‹record xmlns: ak = akpower.org› ... но Разве это не должно быть ‹ak: record xmlns: ak = akpower.org›?   -  person David Brossard    schedule 01.08.2016
comment
Ваш XACML действительно полон ошибок. Вы писали это с помощью WSO2 IS? Это, например, не может быть логическим ... ‹AttributeSelector MustBePresent = false Category = urn: oasis: names: tc: xacml: 3.0: attribute-category: resource Path = // signedByAllChairs / text () DataType = w3.org/2001/XMLSchema#boolean / ›   -  person David Brossard    schedule 01.08.2016
comment
Также ваш запрос недействителен. Отсутствует закрывающий элемент ‹Request /›   -  person David Brossard    schedule 01.08.2016


Ответы (1)


Теперь мне удалось импортировать вашу политику в точку администрирования политики Axiomatics.

Основные вопросы

У вас было несколько ошибок:

  1. В ваших выражениях XPath используется префикс ak: (Path="//ak:signedByAllChairs/text()"), но XPath не содержит определения для ak:
  2. AttributeSelector помечен как логическое, но text () в XPath возвращает строку, а не логическое значение. Вам нужно перейти на строку.
  3. Часть XML-фрагмента запроса XACML <Content/> фактически не использует префикс ak :. Он определяет пространство имен с этим префиксом, но никогда его не использует.

Представление политики в APS

Представление политики

Моделирование политики

Я смоделировал вашу политику и не получил разрешения. Я получаю неопределенный. Вот след оценки. Что-то не так с WSO2 IS, или вы забыли развернуть новую политику.

Трассировка оценки - Сервер политики Axiomatics

Теперь, если я очищу отправленный вами XML, чтобы получить именно это:

<record xmlns:ak="http://akpower.org">
    <proposal>                  
        <signedByAllChairs>false</signedByAllChairs>                    
    </proposal>
</record>

Затем я получаю разрешение от политики.

person David Brossard    schedule 01.08.2016
comment
: Пожалуйста, прочтите мое разъяснение по упомянутым вами вопросам для 1 и 3: Я уже включил xmlns: ak в качестве пространства имен, которое определено на корневом уровне ‹Request xmlns = .., поэтому нет необходимости писать xmlns: ak просто ak отлично работает и XpathExpression возвращает точные данные содержимого для 2. Я не думаю, что это проблема, потому что я уже тестировал, и он сравнивает false как логическое значение, а не строку. Если вы знаете, дайте мне знать, как получить логическое значение аналогично ключевому слову text (). Или, если вы думаете, что это проблема, мне нужно отправлять строковое значение в запросе для всех логических типов! - person Milson; 01.08.2016
comment
Не могли бы вы повторно запустить моделирование с измененной политикой (обновлено в вопросе с удаленными пробелами). На самом деле, я думал, что результат должен быть неопределенным, поскольку у запроса есть дополнительный атрибут group, который не соответствует никаким правилам в политике. - person Milson; 01.08.2016