XACML: x500Name-regexp-match
fcorneli Aug 10, 2014 3:09 AMHi,
I'm trying to use x500Name-regexp-match within a XACML 2.0 policy document as follows:
<?xml version="1.0" encoding="UTF-8"?> <Policy xmlns="urn:oasis:names:tc:xacml:2.0:policy:schema:os" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="urn:oasis:names:tc:xacml:2.0:policy:schema:os http://docs.oasis-open.org/xacml/2.0/access_control-xacml-2.0-policy-schema-os.xsd" PolicyId="whatever" RuleCombiningAlgId="urn:oasis:names:tc:xacml:1.0:rule-combining-algorithm:deny-overrides"> <Target /> <Rule RuleId="whatever" Effect="Permit"> <Target> <Subjects> <Subject> <SubjectMatch MatchId="urn:oasis:names:tc:xacml:2.0:function:x500Name-regexp-match"> <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">SERIALNUMBER=79102520991,.*</AttributeValue> <SubjectAttributeDesignator AttributeId="urn:oasis:names:tc:xacml:1.0:subject:subject-id" DataType="urn:oasis:names:tc:xacml:1.0:data-type:x500Name" /> </SubjectMatch> </Subject> </Subjects> <Resources> <Resource> <ResourceMatch MatchId="urn:oasis:names:tc:xacml:1.0:function:anyURI-equal"> <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#anyURI">urn:dss</AttributeValue> <ResourceAttributeDesignator AttributeId="urn:oasis:names:tc:xacml:1.0:resource:resource-id" DataType="http://www.w3.org/2001/XMLSchema#anyURI" /> </ResourceMatch> </Resource> </Resources> <Actions> <Action> <ActionMatch MatchId="urn:oasis:names:tc:xacml:1.0:function:string-equal"> <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">sign</AttributeValue> <ActionAttributeDesignator AttributeId="urn:oasis:names:tc:xacml:1.0:action:action-id" DataType="http://www.w3.org/2001/XMLSchema#string" /> </ActionMatch> </Action> </Actions> </Target> </Rule> </Policy>
which should result in a PERMIT against the following request:
<?xml version="1.0" encoding="UTF-8"?> <Request xmlns="urn:oasis:names:tc:xacml:2.0:context:schema:os" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="urn:oasis:names:tc:xacml:2.0:context:schema:os http://docs.oasis-open.org/xacml/2.0/access_control-xacml-2.0-context-schema-os.xsd"> <Subject> <Attribute AttributeId="urn:oasis:names:tc:xacml:1.0:subject:subject-id" DataType="hturn:oasis:names:tc:xacml:1.0:data-type:x500Name"> <AttributeValue>SERIALNUMBER=79102520991, GIVENNAME=Frank Henri, SURNAME=Cornelis, CN=Frank Cornelis (Signature), C=BE</AttributeValue> </Attribute> </Subject> <Resource> <Attribute AttributeId="urn:oasis:names:tc:xacml:1.0:resource:resource-id" DataType="http://www.w3.org/2001/XMLSchema#anyURI"> <AttributeValue>urn:dss</AttributeValue> </Attribute> </Resource> <Action> <Attribute AttributeId="urn:oasis:names:tc:xacml:1.0:action:action-id" DataType="http://www.w3.org/2001/XMLSchema#string"> <AttributeValue>sign</AttributeValue> </Attribute> </Action> <Environment /> </Request>
but the following junit test:
@Test
public void testXACML3() throws Exception {
PDPConfig config = new PDPConfig(null, null, null);
PolicyFinder policyFinder = config.getPolicyFinder();
Set<PolicyFinderModule> modules = new HashSet<PolicyFinderModule>();
List<String> policyList = new LinkedList<String>();
policyList.add(XACMLTest.class.getResource("/xacml/policy-3.xml")
.toString());
PolicyFinderModule policyFinderModule = new StaticPolicyFinderModule(
policyList);
modules.add(policyFinderModule);
policyFinder.setModules(modules);
PDP pdp = new PDP(config);
RequestContext requestContext = RequestResponseContextFactory
.createRequestCtx();
requestContext.readRequest(XACMLTest.class
.getResourceAsStream("/xacml/request-3.xml"));
RequestCtx requestCtx = (RequestCtx) requestContext
.get(XACMLConstants.REQUEST_CTX);
ResponseCtx responseCtx = pdp.evaluate(requestCtx);
ResponseContext responseContext = RequestResponseContextFactory
.createResponseContext();
responseContext.set(XACMLConstants.RESPONSE_CTX, responseCtx);
LOG.debug("decision: " + responseContext.getDecision());
assertEquals(XACMLConstants.DECISION_PERMIT,
responseContext.getDecision());
}
gives me:
org.jboss.security.xacml.sunxacml.ParsingException: Unknown MatchId ... Caused by: org.jboss.security.xacml.sunxacml.UnknownIdentifierException: functions of type urn:oasis:names:tc:xacml:2.0:function:x500Name-regexp-match are not supported by this factory at org.jboss.security.xacml.sunxacml.cond.BaseFunctionFactory.createFunction(BaseFunctionFactory.java:266)
Any idea what I'm doing wrong? Could someone give me a simple example of how to use:
urn:oasis:names:tc:xacml:2.0:function:x500Name-regexp-match
within a SubjectMatch element?
Kind Regards,
Frank.