Data model of AuthZForce PDP configuration.
XML schema versioning: the version attribute of the root schema element identifies the Major.Minor version of this schema. The Minor version is used for any backwards-compatible change. The Major version is incremented after any change that is NOT backwards-compatible. The Major version part must be suffix of the target namespace - but not the Minor version - to separate namespaces that are not backwards-compatible.
URI of an XACML attribute datatype to be added to supported datatypes. Policies require datatypes for function arguments and AttributeAssignment expressions. For every datatype, there must be one and only one Java class on the classpath - say com.example.FooValueFactory - implementing interface org.ow2.authzforce.core.pdp.api.value.AttributeValueFactory with zero-arg constructor, and this URI must match the one returned by new com.example.FooValueFactory().getId().
More info about Attribute Data-types is available on AuthzForce wiki.
More info about Functions is available on AuthzForce wiki.
More info about Policy and Rule Combining Algorithms is available on AuthzForce wiki.
XACML Policy Provider that resolves Policy(Set)IdReferences. There must be one and only one Java class on the classpath - say com.example.FooPolicyProviderFactory - implementing interface org.ow2.authzforce.core.pdp.api.policy.CLoseablePolicyProvider.Factory<CONF_T> with zero-arg constructor, where CONF_T is the JAXB type bound to this XML element type.
More info about Policy Providers (how to make/use one) is available on AuthzForce wiki.
Implementation classes can use org.ow2.authzforce.pd.api.EnvironmentProperties#replacePlaceholders() method to replace ${property_name} placeholders with such properties. You may use ! (exclamation mark) as a separating character between the placeholder property name and a default value that is used if the property is undefined. E.g. ${PARENT_DIR!/home/foo/conf} will be replaced with /home/foo/conf if PARENT_DIR is undefined. In the location, you may use placeholders enclosed between ${ and } for the following properties:
Decision cache that, for a given request, provides the XACML policy evaluation result from a cache if there is a cached result for the given request. There must be one and only one Java class on the classpath - say com.example.FooDecisionCacheFactory -implementing interface org.ow2.authzforce.core.pdp.api.DecisionCache.Factory<CONF_T> with zero-arg constructor, where CONF_T is the JAXB type bound to this XML element type.
More info about Decision Cache extensions is available on AuthzForce wiki.
true iff we want strict Attribute Issuer matching and we require that all AttributeDesignators set the Issuer field.
Strict Attribute Issuer matching means that an AttributeDesignator without Issuer matches only request Attributes without Issuer. This mode is not fully compliant with XACML 3.0, §5.29, in the case that the Issuer is not present in the Attribute Designator, but it performs better and is recommended when all AttributeDesignators have an Issuer (best practice). Indeed, the XACML 3.0 Attribute Evaluation section §5.29 says: If the Issuer is not present in the AttributeDesignator, then the matching of the attribute to the named attribute SHALL be governed by AttributeId and DataType attributes alone. Therefore, if strictAttributeIssuerMatch is false, since policies may use AttributeDesignators without Issuer, if the requests are using matching Attributes but with none, one or more different Issuers, this PDP engine has to gather all the values from all the attributes with matching Category/AttributeId but with any Issuer or no Issuer. Therefore, in order to stay compliant with §5.29 and still enforce best practice, when strictAttributeIssuerMatch = true, we also require that all AttributeDesignators set the Issuer field.
XACML Attribute Provider that provides attributes not already provided in the XACML request from PEP, e.g. from external sources. There must be one and only one Java class on the classpath - say com.example.FooAttributeProviderFactory - implementing interface org.ow2.authzforce.core.pdp.api.CloseableDesignatedAttributeProvider.Factory<CONF_T> with zero-arg constructor, where CONF_T is the JAXB type bound to this XML element type. This Attribute Provider may also depend on previously defined attributeProviders, to find dependency attributes, i.e. attributes that this Provider does not support itself, but requires to find its supported attributes. Therefore, if an attributeProvider AP1 requires/depends on an attribute A that is not to be provided in the XACML request from the PEP, another attributeProvider AP2 providing this attribute A must be declared before AP1.
More info about Attribute Providers (how to make/use one) is available on AuthzForce wiki.
Such configurations (XML instances of this schema) may use placeholders enclosed between ${ and } for the following properties:
Implementation classes can use org.ow2.authzforce.pd.api.EnvironmentProperties#replacePlaceholders() to replace ${property_name} placeholders with such properties. You may use ! (exclamation mark) as a separating character between the placeholder property name and a default value that is used if the property is undefined. E.g. ${PARENT_DIR!/home/foo/conf} will be replaced with /home/foo/conf if PARENT_DIR is undefined.
In the location, you may use placeholders enclosed between ${ and } for the following properties:
Defines the source for the standard environment attributes specified in §10.2.5: current-time, current-date and current-dateTime. The options are:
Pair of compatible PDP input/output processors - resp. requestPreproc and resultPostproc - where compatible means: requestPreproc.getOutputRequestType() == resultPostproc.getRequestType()
URI of a XACML Request pre-processor to be enabled. A XACML Request preprocessor is a PDP extension that applies some processing of the request, such as validation and transformation, prior to the policy evaluation. As an example of validation, a Request preprocessor may reject a request containing an unsupported XACML element. As an example of transformation, it may support the MultiRequests element, and more generally the Multiple Decision Profile or Hierarchical Resource Profile by creating multiple Individual Decision Requests from the original XACML request, as defined in XACML Multiple Decision Profile specification, section 2; and then call the policy evaluation engine for each Individual Decision Request. At the end, the results (one per Individual Decision Request) may be combined by a Result postprocessor specified by next attribute resultPostproc.
There must be one and only one Java class on the classpath - say com.example.FooRequestPreproc - implementing interface org.ow2.authzforce.core.pdp.api.DecisionRequestPreprocessor with zero-arg constructor, and this URI must match the one returned by: new com.example.FooRequestPreproc().getId().
If the configuration parameter enableXPath is true, it is the responsibility of the Request preprocessor to parse XACML Request/Attributes/Content nodes. If the configuration parameter strictAttributeIssuerMatch is true, it is the responsibility of the Request preprocessor to keep values of Attributes with Issuer separate from values of Attributes without Issuer, in the attribute map returned by getNamedAttributes() on the IndividualDecisionRequests produced by the Request preprocessor.
The following values of requestPreproc are natively supported:
More info about Request Preprocessors is available on AuthzForce wiki.
URI of a XACML decision Result post-processor to be enabled. A decision Result post-processor is a PDP extension that process the result(s) from the policy evaluation before the final XACML Response is created (and returned back to the requester). For example, a typical Result post-processor may combine multiple individual decisions - produced by the requestPreproc - to a single decision Result if and only if the XACML Request's CombinedDecision is set to true, as defined in XACML Multiple Decision Profile specification, section 3. There must be one and only one Java class on the classpath - say com.example.FooResultPostproc - implementing interface org.ow2.authzforce.core.pdp.api.DecisionResultPostprocessor with zero-arg constructor, and this URI must match the one returned by: new com.example.FooResultPostproc().getId() .
More info about Result Postprocessors is available on AuthzForce wiki.
Policy(Set) Provider loading policies statically from URLs. Any PolicyIdReference used in a PolicySet here must refer to a Policy loaded here as well. Besides, a PolicySet P1 must be loaded before any other PolicySet P2 with a reference (PolicySetIdReference) to P1. As PolicySets are loaded in the order of declaration of policyLocations, the order matters for PolicySetIdReference resolution. This PolicyProvider implements the PolicyProvider#getCandidateRootPolicy() - the method provides a default root policy to be used when the PDP's configuration parameter rootPolicyRef is undefined - as follows:
Location of the XML file that is expected to contain the Policy or PolicySet element to be referenced by a Policy(Set)IdReference in the root PolicySet loaded by a root policy Provider. The location may also be a file pattern in the form file://DIRECTORY_PATH/*SUFFIX or file://DIRECTORY_PATH/**...*SUFFIX, etc. (arbitrarily long sequence of wildcard characters) in which case the location is expanded to all regular files in the directory located at DIRECTORY_PATH with suffix SUFFIX, not crossing directory boundaries if using a single wildcard; but crossing directory boundaries if using more than a single wildcard (there may not be a SUFFIX; in other words, SUFFIX may be an empty string). The number of wildcards in the sequence **....* defines the maximum number of directory levels to search.
In the location, you may use placeholders enclosed between ${ and } for the following properties:
You may use ! (exclamation mark) as a separating character between the placeholder property name and a default value that is used if the property is undefined. E.g. ${PARENT_DIR!/home/foo/conf} will be replaced with /home/foo/conf if PARENT_DIR is undefined.