Abbreviated Language for Authorization
The Abbreviated Language for Authorization is a domain-specific language used in the formulation of access-control policies.
History
Origin
, the eXtensible Access Control Markup Language, uses XML as its main encoding language. Writing XACML policies directly in XACML leads to bloated, human-unfriendly text, therefore a new, more lightweight, notation was necessary. Axiomatics researcher, Pablo Giambiagi, therefore designed ALFA, the Axiomatics Language for Authorization.ALFA maps directly into XACML. ALFA contains the same structural elements as XACML i.e. PolicySet, Policy, and Rule.
Axiomatics donates ALFA to OASIS
In March 2014, Axiomatics announced it was donating ALFA to the OASIS XACML Technical Committee in order to advance its standardization.ALFA was consequently renamed Abbreviated Language for Authorization and filed for standardization.
Sample use cases
- Medical use case: doctors can view the medical records of patients they have a relationship with.
- Financial use case: employees in Singapore can view the customer accounts of employees based in Singapore.
- Insurance use case: an insurance agent can approve the claim of a user if the claim is in the same region as the agent and if the claim amount is less than the agent's approval amount.
Structure
Just like XACML, ALFA has three structural elements:- PolicySet
- Policy
- Rule
In order to resolve conflicts between siblings, ALFA uses combining algorithms. There are several combining algorithms that may be used.
Data types
ALFA supports all the data types that are defined in the OASIS XACML Core Specification. Some datatypes e.g. numerical and boolean map directly from ALFA to XACML. Others need to be converted such as date or time attributes. To convert an attribute into the relevant data type, use the "value":datatype notation. See below for examplesNative attribute values mapped directly from ALFA to XACML
String, integer, double, and boolean all map directly from ALFA to XACML. They do not need a conversionALFA policy using boolean attributes
namespace exampleBoolean
Attribute values which need an explicit conversion
The following attribute datatypes need an explicit conversion:- http://www.w3.org/2001/XMLSchema#time
- http://www.w3.org/2001/XMLSchema#date
- http://www.w3.org/2001/XMLSchema#dateTime
- http://www.w3.org/2001/XMLSchema#anyURI
- http://www.w3.org/2001/XMLSchema#hexBinary
- http://www.w3.org/2001/XMLSchema#base64Binary
- http://www.w3.org/2001/XMLSchema#dayTimeDuration
- http://www.w3.org/2001/XMLSchema#yearMonthDuration
- urn:oasis:names:tc:xacml:1.0:data-type:x500Name
- urn:oasis:names:tc:xacml:1.0:data-type:rfc822Name
- urn:oasis:names:tc:xacml:2.0:data-type:ipAddress
- urn:oasis:names:tc:xacml:2.0:data-type:dnsName
- urn:oasis:names:tc:xacml:3.0:data-type:xpathExpression
Example: ALFA policy using anyURI
This policy, converts a String value to anyURI.attribute userDisallowedResources
rule allowProfileAccess
Sample policies
A simple policy & rule with a condition
The following ALFA example represents a XACML policy which contains a single rule. The policy and rule both have a target. The rule also has a condition which is used to compare 2 attributes together to implement a relationship check. Whenever one needs to check 2 attributes together, they must use a condition.namespace example
Using time in a XACML policy written in ALFA
namespace exampleTime
Policy references
ALFA can use policy references. They are in fact used implicitly when doing the following.namespace com.axiomatics
Obligations and advice
Obligations and advice are statements in XACML that can be returned from the PDP to the PEP alongside the decision. Obligations and advice are triggered on either Permit or Deny.namespace example
Break the glass authorization scenario
Start by defining the attributes and obligations:namespace com.axiomatics.examples
Time-based fine-grained authorization policy
The following is an example of an ABAC policy implemented using ALFA. It uses time as attributes. It uses a XACML condition to compare the currentTime attribute to the value representing 5pm. Note the use of :time to convert the String value to the right data type.rule allowAfter5pm