Ресурсы XACML
Я пытаюсь написать код, который позволит пользователям получать доступ к контенту с веб-сайта на основе ролей безопасности. Таким образом, некоторые пользователи могут видеть весь контент, а некоторые могут видеть только URL с определенными расширениями.
Большая часть моего кода работает, но у меня проблемы с доступом к 3 подкатегориям.
<Rule Effect="Permit" RuleId="accesses">
<Description>Permission for lower clearance</Description>
<Target>
<Resources>
<Resource>
<ResourceMatch
MatchId="urn:oasis:names:tc:xacml:1.0:function:regexp-string-match">
<AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">home.html
</AttributeValue>
<ResourceAttributeDesignator
AttributeId="urn:oasis:names:tc:xacml:1.0:resource:resource-id"
DataType="http://www.w3.org/2001/XMLSchema#string" Issuer="policy-admin@website.com"
MustBePresent="true" />
</ResourceMatch>
</Resource>
<Resource>
<ResourceMatch
MatchId="urn:oasis:names:tc:xacml:1.0:function:regexp-string-match">
<AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">localweather.html
</AttributeValue>
<ResourceAttributeDesignator
AttributeId="urn:oasis:names:tc:xacml:1.0:resource:resource-id"
DataType="http://www.w3.org/2001/XMLSchema#string" Issuer="policy-admin@website.com"
MustBePresent="true" />
</ResourceMatch>
</Resource>
<Resource>
<ResourceMatch
MatchId="urn:oasis:names:tc:xacml:1.0:function:regexp-string-match">
<AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">about.html
</AttributeValue>
<ResourceAttributeDesignator
AttributeId="urn:oasis:names:tc:xacml:1.0:resource:resource-id"
DataType="http://www.w3.org/2001/XMLSchema#string" Issuer="policy-admin@website.com"
MustBePresent="true" />
</ResourceMatch>
</Resource>
</Resources>
</Target>
<Condition>
<Apply FunctionId="urn:oasis:names:tc:xacml:1.0:function:regexp-string-match">
<Apply FunctionId="urn:oasis:names:tc:xacml:1.0:function:string-one-and-only">
<SubjectAttributeDesignator AttributeId="AccessLevel"
DataType="http://www.w3.org/2001/XMLSchema#string" Issuer="policy-admin@website.com"
MustBePresent="true" />
<AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">Clear</AttributeValue>
</Apply>
</Apply>
</ Condition >
</Rule>
У меня есть эти 3 ресурса, и когда я запускаю программу, я получаю "неопределенный" ответ. Могу ли я иметь только 1 ресурс на правило? Что-то еще бросает исключение?
2 ответа
Вы можете иметь древовидные ресурсы для цели. Согласно вашему правилу они будут действовать как "ИЛИ". Проверьте с помощью своего запроса XACML, может быть, вы отправляете запрос, который не соответствует политике (policy имеет MustBePresent="true", это означает, что если атрибут отсутствует, PDP может создать неопределенную ошибку). Пожалуйста, измените их на "false" и посмотреть.
Это была проблема состояния. Все ресурсы были файлами конечного уровня. У меня не было правильного набора значений атрибутов пользователя для моей политики. Я сравнил его со своей схемой LDAP и получил его работать.