XACML: как найти длинную в списке длинных (список содержит) - PullRequest
1 голос
/ 20 марта 2020

Я пытаюсь выполнить проверку в политике XACML. У меня есть длинный в моей теме (urn: ch: xxxx: attribute: subject: 1.0: Participantid ) контекст, который я должен найти в списке длинных (urn: ch: xxxx: attribute) : ресурс: 1.0: Participantids ) в моем контексте ресурса. Я пытаюсь сделать это с помощью функции integer-is-in .

. Я уже пробовал:

<Apply FunctionId="urn:oasis:names:tc:xacml:1.0:function:integer-is-in">
  <SubjectAttributeDesignator AttributeId="urn:ch:xxxx:attribute:subject:1.0:participantid" DataType="http://www.w3.org/2001/XMLSchema#long" />
  <ResourceAttributeDesignator AttributeId="urn:ch:xxxx:attribute:resource:1.0:participantids" DataType="http://www.w3.org/2001/XMLSchema#long" />
</Apply>

Я проверял это и это сработало хорошо.

<Apply FunctionId="urn:oasis:names:tc:xacml:1.0:function:integer-is-in">
  <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#long">9000501</AttributeValue>
  <ResourceAttributeDesignator AttributeId="urn:ch:xxxx:attribute:resource:1.0:participantids" DataType="http://www.w3.org/2001/XMLSchema#long" />
</Apply>

Так как мне передать атрибут субъекта, чтобы он работал? Или функция целое число в неверно?

С уважением

Криштиану

1 Ответ

2 голосов
/ 21 марта 2020

AttributeDesignator считается сумкой в XACML, другими словами, он многозначен . Поэтому вы должны применить к нему функцию integer-one-only-only , прежде чем применять integer-is-in , потому что integer-is-in ожидает одно значение (например, AttributeValue) в качестве первого аргумента.

Кроме того, функции integer-in-in и integer-one-and-only работают только с типом данных integer (из * 1027) * схема) в стандарте XACML, а не long . Так что тот факт, что ваш второй пример работает хорошо говорит о том, что ваша реализация XACML не на 100% совместима с XACML.

Наконец, вы используете здесь синтаксис XACML 2.0, и я настоятельно рекомендую обновить в XACML 3.0, который исправляет и улучшает XACML в целом. В XACML 3.0 исправление будет выглядеть следующим образом:

<Apply FunctionId="urn:oasis:names:tc:xacml:1.0:function:integer-is-in">
    <Apply FunctionId="urn:oasis:names:tc:xacml:1.0:function:integer-one-and-only">
        <AttributeDesignator AttributeId="urn:ch:xxxx:attribute:subject:1.0:participantid" Category="urn:oasis:names:tc:xacml:1.0:subject-category:access-subject" DataType="http://www.w3.org/2001/XMLSchema#integer" MustBePresent="false" />
    </Apply>
    <AttributeDesignator AttributeId="urn:ch:xxxx:attribute:resource:1.0:participantids" Category="urn:oasis:names:tc:xacml:3.0:attribute-category:resource" DataType="http://www.w3.org/2001/XMLSchema#integer" MustBePresent="false" />
</Apply>
...