APIs
Access Decision Service (ADS) provides REST APIs that serve as the programmatic interface for various ADS functions. These APIs are designed to offer a streamlined approach to query access permissions and to manage the service itself.
Application API
The Application API of ADS provides a suite of RESTful endpoints through which you can submit authorization queries. The API processes these queries against defined access policies and returns authorization decisions in the form of responses.
Administration API
The Administration API is used for the operational management of ADS. It includes a range of RESTful endpoints for service maintenance, including those for conducting health checks, monitoring service metrics, and retrieving system information. This API is crucial for continuous monitoring and ensuring that ADS operates efficiently.
Follow the links below to read more information on ADS APIs:
Application API
Authorization endpoints, decisions, and examples
Administration API
Healthcheck, metrics, and system info endpoints
Authentication
You can enhance security by incorporating authentication in the authorization process of ADS.
When ADS is configured to use authentication, any request without authentication headers, or with invalid credentials, will return HTTP 401 Unauthorized.
The authorization header carries authentication parameters. For example, in basic authentication, this header includes the word Basic followed by a base64-encoded string that merges the username, a colon character, and the password.
While most HTTP clients provide simplified methods for inputting these details, understanding the underlying process is essential.
Example
The following examples use curl:
curl --data @request.json -H content-type:application/xacml+json http://localhost:8080/authorize -H authorization:Basic\ YWRzLXVzZXI6c2VjcmV0
This command is simplified with -u in curl, which internally constructs the necessary authorization header:
curl --data @request.json -H content-type:application/xacml+json http://localhost:8080/authorize -u ads-user:secret
For detailed information, refer to the documentation of your respective HTTP client.
Read more on authentication options in the Authentication section.
OpenAPI documentation
The OpenAPI/Swagger documentation ADS' service endpoints, is available in YAML format. If you want to convert this API documentation in JSON format you can use a tool like SwaggerEditorOpens in a new tab.
openapi: 3.0.1
info:
title: Access Decision Service API
description: API to evaluate access decisions
version: '2.0'
servers:
- url: http://localhost:8080
description: Generated server url
tags:
- name: Access Decision Service Operations
- name: Application health
paths:
/health:
get:
tags:
- Application health
summary: Health Check
description: Checks the health of the application
operationId: actuatorHealth
responses:
'200':
description: OK
content:
application/json:
schema:
type: object
properties:
status:
type: string
components:
type: object
properties:
diskSpace:
type: object
properties:
status:
type: string
details:
type: object
properties:
total:
type: integer
free:
type: integer
threshold:
type: integer
path:
type: string
exists:
type: boolean
liveness:
type: object
properties:
status:
type: string
details:
type: object
properties:
deadlocks:
type: object
properties:
healthy:
type: boolean
time:
type: string
format: date-time
message:
type: string
ping:
type: object
properties:
status:
type: string
readiness:
type: object
properties:
status:
type: string
details:
type: object
properties:
domain-status:
type: object
properties:
domainIdentity:
type: string
lastSuccessfulReconfigureDate:
type: string
format: date-time
lastDomainReconfigureDate:
type: string
format: date-time
lastDomainReconfigureErrorMessage:
type: string
startup:
type: object
properties:
status:
type: string
groups:
type: array
items:
type: string
/health/liveness:
get:
tags:
- Application health
summary: Liveness Check
description: Checks the liveness of the application
operationId: healthLiveness
responses:
'200':
description: OK
content:
application/json:
schema:
type: object
properties:
status:
type: string
details:
type: object
properties:
deadlocks:
type: object
properties:
healthy:
type: boolean
time:
type: string
format: date-time
message:
type: string
/health/startup:
get:
tags:
- Application health
summary: Startup Check
description: Checks if the application is up and running
operationId: healthStartup
responses:
'200':
description: OK
content:
application/json:
schema:
type: object
properties:
status:
type: string
/health/readiness:
get:
tags:
- Application health
summary: Readiness Check
description: Checks the readiness of the application
operationId: healthReadiness
responses:
'200':
description: OK
content:
application/json:
schema:
type: object
properties:
status:
type: string
details:
type: object
properties:
domain-status:
type: object
properties:
domainIdentity:
type: string
lastSuccessfulReconfigureDate:
type: string
format: date-time
lastDomainReconfigureDate:
type: string
format: date-time
lastDomainReconfigureErrorMessage:
type: string
/info:
get:
tags:
- Application health
summary: Custom Actuator Info
description: Returns info related to the application (custom implementation).
operationId: actuatorInfo
responses:
'200':
description: OK
content:
application/json:
schema:
type: object
properties:
application:
type: object
properties:
vendor:
type: string
name:
type: string
java:
type: object
properties:
vendor:
type: string
version:
type: string
home:
type: string
operatingSystem:
type: object
properties:
name:
type: string
version:
type: string
architecture:
type: string
identity:
type: string
example:
application:
vendor: com.axiomatics.access-decision-service
name: access-decision-service
java:
vendor: Generic Vendor
version: 17.x.x
home: /path/to/java/home
operatingSystem:
name: Generic OS
version: X.X
architecture: x86_64
identity: ads-identity
/:
get:
tags:
- Access Decision Service Operations
summary: Application Entry Point
description: |
This endpoint serves as the root entry point according to the XACML REST API specification.
operationId: getRootEntryPoint
responses:
'200':
description: Successfully processed the request.
content:
application/xml:
schema:
$ref: '#/components/schemas/Resources'
/authorize:
post:
tags:
- Access Decision Service Operations
summary: Evaluate XACML XML/JSON request
description: Evaluate XACML XML/JSON request
operationId: evaluateXmlRequest
requestBody:
description: Select body type from dropdown
content:
application/json:
schema:
$ref: '#/components/schemas/RequestWrapper'
examples:
example1:
summary: Simple example
value:
Request:
AccessSubject:
- Attribute:
- AttributeId: Testnew.Role
Value: manager
example2:
summary: Example with multiple access subjects
value:
Request:
AccessSubject:
- Id: id1
Attribute:
- AttributeId: Testnew.Name
Value: Alice
- AttributeId: Testnew.Location
Value: Stockholm
- AttributeId: Testnew.Postal
Value: 22222
- Id: id2
Attribute:
- AttributeId: Testnew.Name
Value: Bob
- AttributeId: Testnew.Location
Value: Athens
- AttributeId: Testnew.Postal
Value: 33333
MultiRequests:
RequestReference:
- ReferenceId:
- id1
example3:
summary: Example with action and resource attributes
value:
Request:
AccessSubject: []
Action:
- Attribute:
- AttributeId: action.identity
Value: send
Resource:
- Attribute:
- AttributeId: item.recipient.email
Value: bill@wyldstallyns.com
- Attribute:
- AttributeId: item.recipient.email
Value: bill@axiomatics.se
- Attribute:
- AttributeId: item.gui
Value: 123
example4:
summary: Example with role, resource, action, and environment
value:
Request:
AccessSubject:
- Attribute:
- AttributeId: role
Value: employee
Resource:
- Attribute:
- AttributeId: document_id
Value: companypolicy
Action:
- Attribute:
- AttributeId: idaction
Value: view
Environment:
- Attribute:
- AttributeId: isAllowed
Value: true
application/xacml+xml: {}
application/xacml+json:
schema:
$ref: '#/components/schemas/RequestWrapper'
examples:
example1:
summary: Simple example
value:
Request:
AccessSubject:
- Attribute:
- AttributeId: Testnew.Role
Value: manager
example2:
summary: Example with multiple access subjects
value:
Request:
AccessSubject:
- Id: id1
Attribute:
- AttributeId: Testnew.Name
Value: Alice
- AttributeId: Testnew.Location
Value: Stockholm
- AttributeId: Testnew.Postal
Value: 22222
- Id: id2
Attribute:
- AttributeId: Testnew.Name
Value: Bob
- AttributeId: Testnew.Location
Value: Athens
- AttributeId: Testnew.Postal
Value: 33333
MultiRequests:
RequestReference:
- ReferenceId:
- id1
example3:
summary: Example with action and resource attributes
value:
Request:
AccessSubject: []
Action:
- Attribute:
- AttributeId: action.identity
Value: send
Resource:
- Attribute:
- AttributeId: item.recipient.email
Value: bill@wyldstallyns.com
- Attribute:
- AttributeId: item.recipient.email
Value: bill@axiomatics.se
- Attribute:
- AttributeId: item.gui
Value: 123
example4:
summary: Example with role, resource, action, and environment
value:
Request:
AccessSubject:
- Attribute:
- AttributeId: role
Value: employee
Resource:
- Attribute:
- AttributeId: document_id
Value: companypolicy
Action:
- Attribute:
- AttributeId: idaction
Value: view
Environment:
- Attribute:
- AttributeId: isAllowed
Value: true
responses:
'200':
description: Successfully evaluated the XACML XML/JSON request
content:
application/xacml+json:
schema:
$ref: '#/components/schemas/Result'
examples:
example1:
summary: Simple permit response
value:
Response:
- Decision: Permit
example2:
summary: Deny response with status message
value:
Response:
- Decision: Deny
Status:
Message: Access denied due to policy constraints
example3:
summary: Response with obligations
value:
Response:
- Decision: Permit
Obligations:
- Id: log-access
AttributeAssignment:
- AttributeId: log.level
Value: info
application/xacml+xml:
schema:
$ref: '#/components/schemas/Result'
application/json:
schema:
$ref: '#/components/schemas/Result'
examples:
example1:
summary: Simple permit response
value:
Response:
- Decision: Permit
example2:
summary: Deny response with status message
value:
Response:
- Decision: Deny
Status:
Message: Access denied due to policy constraints
example3:
summary: Response with obligations
value:
Response:
- Decision: Permit
Obligations:
- Id: log-access
AttributeAssignment:
- AttributeId: log.level
Value: info
'400':
description: Bad request due to invalid input
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
examples:
example1:
summary: XACML request parsing error
value:
code: 400
message: "ERROR_6700_PARSING_ERROR: Error in parsing the XACML Request."
'500':
description: Internal server error during the evaluation process
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
examples:
example1:
summary: Internal server error
value:
code: 500
message: "Proper message based on the exception"
components:
schemas:
AccessSubject:
type: object
properties:
shorthand:
type: string
CategoryId:
type: string
Id:
type: string
Content:
type: string
Attribute:
type: array
items:
$ref: '#/components/schemas/Attribute'
Action:
type: object
properties:
shorthand:
type: string
CategoryId:
type: string
Id:
type: string
Content:
type: string
Attribute:
type: array
items:
$ref: '#/components/schemas/Attribute'
Attribute:
type: object
properties:
value:
$ref: '#/components/schemas/AttributeValue'
id:
description: represents the id of the attribute
type: string
version:
type: integer
format: int32
issuer:
description: specifies the issuer of the attribute
type: string
Attributes:
type: object
properties:
CategoryId:
description: represents the id of the category to which the attribute belongs
type: string
Id:
description: represents the identifier of the specific attribute
type: string
Content:
description: contains the value associated with the attribute
type: string
Attribute:
description: >-
holds an array of nested Attribute objects, which represent
additional, potentially more specific attributes within the given
category
type: array
items:
$ref: '#/components/schemas/Attribute'
Codebase:
type: object
properties:
shorthand:
type: string
CategoryId:
type: string
Id:
type: string
Content:
type: string
Attribute:
type: array
items:
$ref: '#/components/schemas/Attribute'
Environment:
type: object
properties:
shorthand:
type: string
CategoryId:
type: string
Id:
type: string
Content:
type: string
Attribute:
type: array
items:
$ref: '#/components/schemas/Attribute'
IntermediarySubject:
type: object
properties:
shorthand:
type: string
CategoryId:
type: string
Id:
type: string
Content:
type: string
Attribute:
type: array
items:
$ref: '#/components/schemas/Attribute'
MultiRequests:
type: object
properties:
RequestReference:
type: array
items:
$ref: '#/components/schemas/RequestReference'
RecipientSubject:
type: object
properties:
shorthand:
type: string
CategoryId:
type: string
Id:
type: string
Content:
type: string
Attribute:
type: array
items:
$ref: '#/components/schemas/Attribute'
Request:
type: object
properties:
ReturnPolicyIdList:
description: indicates whether the response should include a list of Policy IDs
type: boolean
CombinedDecision:
description: >-
indicates whether the result of the request should be a combined
decision
type: boolean
XPathVersion:
type: string
description: the version of XPath that is used in the request
format: uri
Category:
type: array
description: >-
array of Attributes objects that contains the attributes of various
categories required for authorization decisions
items:
$ref: '#/components/schemas/Attributes'
MultiRequests:
$ref: '#/components/schemas/MultiRequests'
AccessSubject:
type: array
description: >-
array of AccessSubject objects that represent the subjects
requesting access
items:
$ref: '#/components/schemas/AccessSubject'
Resource:
description: >-
array of Resource objects that describe the resources involved in
the request
type: array
items:
$ref: '#/components/schemas/Resource'
Action:
description: >-
array of Action objects that describe the action the subject wants
to perform on the resource
type: array
items:
$ref: '#/components/schemas/Action'
Environment:
description: >-
array of Environment objects that represent the environment in which
the request is being made
type: array
items:
$ref: '#/components/schemas/Environment'
Codebase:
description: >-
array of Codebase objects that might describe where the code or
application is running from
type: array
items:
$ref: '#/components/schemas/Codebase'
RecipientSubject:
description: >-
array of RecipientSubject objects that describe the recipient of the
resource or action
type: array
items:
$ref: '#/components/schemas/RecipientSubject'
IntermediarySubject:
type: array
description: >-
array of IntermediarySubject objects that represent an intermediary
in the request
items:
$ref: '#/components/schemas/IntermediarySubject'
RequestingMachine:
type: array
description: >-
array of RequestingMachine objects that describe the machine or
environment from which the request is being made
items:
$ref: '#/components/schemas/RequestingMachine'
RequestReference:
type: object
properties:
ReferenceId:
type: array
items:
type: string
RequestWrapper:
type: object
properties:
Request:
$ref: '#/components/schemas/Request'
RequestingMachine:
type: object
properties:
shorthand:
type: string
CategoryId:
type: string
Id:
type: string
Content:
type: string
Attribute:
type: array
items:
$ref: '#/components/schemas/Attribute'
Resource:
type: object
properties:
shorthand:
type: string
CategoryId:
type: string
Id:
type: string
Content:
type: string
Attribute:
type: array
items:
$ref: '#/components/schemas/Attribute'
Advice:
type: object
properties:
asExpression:
$ref: '#/components/schemas/AdviceExpression'
id:
type: string
assignments:
type: array
items:
$ref: '#/components/schemas/AttributeAssignment'
fulfillOn:
type: integer
format: int32
AdviceExpression:
type: object
properties:
elementName:
type: string
id:
type: string
referencedAttributes:
type: array
items:
$ref: '#/components/schemas/AttributeReference'
uniqueItems: true
fulfillOn:
type: integer
format: int32
indeterminateResult:
$ref: '#/components/schemas/IndeterminateExpression'
expressions:
type: array
items:
$ref: '#/components/schemas/AttributeAssignmentExpression'
Attr:
type: object
properties:
id:
type: boolean
schemaTypeInfo:
$ref: '#/components/schemas/TypeInfo'
ownerElement:
$ref: '#/components/schemas/Element'
specified:
type: boolean
name:
type: string
value:
type: string
nodeName:
type: string
nodeValue:
type: string
firstChild:
$ref: '#/components/schemas/Node'
lastChild:
$ref: '#/components/schemas/Node'
previousSibling:
$ref: '#/components/schemas/Node'
nextSibling:
$ref: '#/components/schemas/Node'
ownerDocument:
$ref: '#/components/schemas/Document'
baseURI:
type: string
textContent:
type: string
attributes:
$ref: '#/components/schemas/NamedNodeMap'
prefix:
type: string
namespaceURI:
type: string
nodeType:
type: integer
format: int32
localName:
type: string
childNodes:
$ref: '#/components/schemas/NodeList'
parentNode:
$ref: '#/components/schemas/Node'
AttributeAssignment:
type: object
properties:
value:
$ref: '#/components/schemas/AttributeValue'
issuer:
type: string
asExpression:
$ref: '#/components/schemas/AttributeAssignmentExpression'
attributeId:
type: string
category:
type: string
AttributeAssignmentExpression:
type: object
properties:
issuer:
type: string
referencedAttributes:
type: array
items:
$ref: '#/components/schemas/AttributeReference'
uniqueItems: true
attributeId:
type: string
expression:
$ref: '#/components/schemas/Expression'
category:
type: string
AttributeReference:
type: object
properties:
id:
type: string
type:
type: string
issuer:
type: string
category:
type: string
AttributeValue:
type: object
properties:
type:
type: string
children:
type: array
items:
$ref: '#/components/schemas/Expression'
referencedAttributes:
type: array
items:
$ref: '#/components/schemas/AttributeReference'
uniqueItems: true
variablesDependedOn:
type: array
items:
type: string
uniqueItems: true
bag:
type: boolean
DOMConfiguration:
type: object
properties:
parameterNames:
$ref: '#/components/schemas/DOMStringList'
DOMImplementation:
type: object
DOMStringList:
type: object
properties:
length:
type: integer
format: int32
Document:
type: object
properties:
doctype:
$ref: '#/components/schemas/DocumentType'
implementation:
$ref: '#/components/schemas/DOMImplementation'
xmlEncoding:
type: string
xmlStandalone:
type: boolean
xmlVersion:
type: string
strictErrorChecking:
type: boolean
documentURI:
type: string
domConfig:
$ref: '#/components/schemas/DOMConfiguration'
inputEncoding:
type: string
documentElement:
$ref: '#/components/schemas/Element'
nodeName:
type: string
nodeValue:
type: string
firstChild:
$ref: '#/components/schemas/Node'
lastChild:
$ref: '#/components/schemas/Node'
previousSibling:
$ref: '#/components/schemas/Node'
nextSibling:
$ref: '#/components/schemas/Node'
ownerDocument:
$ref: '#/components/schemas/Document'
baseURI:
type: string
textContent:
type: string
attributes:
$ref: '#/components/schemas/NamedNodeMap'
prefix:
type: string
namespaceURI:
type: string
nodeType:
type: integer
format: int32
localName:
type: string
childNodes:
$ref: '#/components/schemas/NodeList'
parentNode:
$ref: '#/components/schemas/Node'
DocumentType:
type: object
properties:
internalSubset:
type: string
notations:
$ref: '#/components/schemas/NamedNodeMap'
entities:
$ref: '#/components/schemas/NamedNodeMap'
publicId:
type: string
systemId:
type: string
name:
type: string
nodeName:
type: string
nodeValue:
type: string
firstChild:
$ref: '#/components/schemas/Node'
lastChild:
$ref: '#/components/schemas/Node'
previousSibling:
$ref: '#/components/schemas/Node'
nextSibling:
$ref: '#/components/schemas/Node'
ownerDocument:
$ref: '#/components/schemas/Document'
baseURI:
type: string
textContent:
type: string
attributes:
$ref: '#/components/schemas/NamedNodeMap'
prefix:
type: string
namespaceURI:
type: string
nodeType:
type: integer
format: int32
localName:
type: string
childNodes:
$ref: '#/components/schemas/NodeList'
parentNode:
$ref: '#/components/schemas/Node'
Element:
type: object
properties:
attributeNodeNS:
$ref: '#/components/schemas/Attr'
attributeNode:
$ref: '#/components/schemas/Attr'
tagName:
type: string
schemaTypeInfo:
$ref: '#/components/schemas/TypeInfo'
nodeName:
type: string
nodeValue:
type: string
firstChild:
$ref: '#/components/schemas/Node'
lastChild:
$ref: '#/components/schemas/Node'
previousSibling:
$ref: '#/components/schemas/Node'
nextSibling:
$ref: '#/components/schemas/Node'
ownerDocument:
$ref: '#/components/schemas/Document'
baseURI:
type: string
textContent:
type: string
attributes:
$ref: '#/components/schemas/NamedNodeMap'
prefix:
type: string
namespaceURI:
type: string
nodeType:
type: integer
format: int32
localName:
type: string
childNodes:
$ref: '#/components/schemas/NodeList'
parentNode:
$ref: '#/components/schemas/Node'
Expression:
type: object
properties:
type:
type: string
referencedAttributes:
type: array
items:
$ref: '#/components/schemas/AttributeReference'
uniqueItems: true
variablesDependedOn:
type: array
items:
type: string
uniqueItems: true
IndeterminateExpression:
type: object
properties:
type:
type: string
children:
type: array
items: {}
referencedAttributes:
type: array
items:
$ref: '#/components/schemas/AttributeReference'
uniqueItems: true
variablesDependedOn:
type: array
items:
type: string
uniqueItems: true
NamedAttribute:
type: object
properties:
category:
type: string
attributeId:
type: string
datatype:
type: string
issuer:
type: string
NamedNodeMap:
type: object
properties:
namedItem:
$ref: '#/components/schemas/Node'
namedItemNS:
$ref: '#/components/schemas/Node'
length:
type: integer
format: int32
Node:
type: object
properties:
nodeName:
type: string
nodeValue:
type: string
firstChild:
$ref: '#/components/schemas/Node'
lastChild:
$ref: '#/components/schemas/Node'
previousSibling:
$ref: '#/components/schemas/Node'
nextSibling:
$ref: '#/components/schemas/Node'
ownerDocument:
$ref: '#/components/schemas/Document'
baseURI:
type: string
textContent:
type: string
attributes:
$ref: '#/components/schemas/NamedNodeMap'
prefix:
type: string
namespaceURI:
type: string
nodeType:
type: integer
format: int32
localName:
type: string
childNodes:
$ref: '#/components/schemas/NodeList'
parentNode:
$ref: '#/components/schemas/Node'
NodeList:
type: object
properties:
length:
type: integer
format: int32
Obligation:
type: object
properties:
asExpression:
$ref: '#/components/schemas/ObligationExpression'
id:
type: string
assignments:
type: array
items:
$ref: '#/components/schemas/AttributeAssignment'
fulfillOn:
type: integer
format: int32
ObligationExpression:
type: object
properties:
elementName:
type: string
id:
type: string
referencedAttributes:
type: array
items:
$ref: '#/components/schemas/AttributeReference'
uniqueItems: true
fulfillOn:
type: integer
format: int32
indeterminateResult:
$ref: '#/components/schemas/IndeterminateExpression'
expressions:
type: array
items:
$ref: '#/components/schemas/AttributeAssignmentExpression'
PolicyIdentifier:
type: object
properties:
policySet:
type: boolean
policyIdPart:
type: string
policyVersionPart:
type: string
RequestElement:
type: object
properties:
content:
$ref: '#/components/schemas/SynchronizedDomDocument'
attributes:
type: object
additionalProperties: {}
withSubjectCategory:
type: boolean
elementOrder:
type: integer
format: int32
includeInResultSet:
type: array
items:
$ref: '#/components/schemas/Attribute'
uniqueItems: true
requestElement:
$ref: '#/components/schemas/SynchronizedDomElement'
mockedAttributes:
type: array
items:
$ref: '#/components/schemas/NamedAttribute'
uniqueItems: true
xacmlversion:
type: integer
format: int32
category:
type: string
xmlId:
type: string
ResponseCtx:
type: object
properties:
xacmlVersion:
type: integer
format: int32
results:
type: array
items:
$ref: '#/components/schemas/Result'
uniqueItems: true
Result:
type: object
properties:
resource:
type: string
advice:
type: array
items:
$ref: '#/components/schemas/Advice'
uniqueItems: true
status:
$ref: '#/components/schemas/Status'
decision:
type: integer
format: int32
obligations:
type: array
items:
$ref: '#/components/schemas/Obligation'
uniqueItems: true
policyIdList:
type: array
items:
$ref: '#/components/schemas/PolicyIdentifier'
extIndeterminate:
type: integer
format: int32
includedAttributes:
type: array
items:
$ref: '#/components/schemas/RequestElement'
uniqueItems: true
Status:
type: object
properties:
detail:
$ref: '#/components/schemas/StatusDetail'
message:
type: string
code:
type: array
items:
type: string
StatusDetail:
type: object
properties:
detail:
$ref: '#/components/schemas/Node'
wrapped:
$ref: '#/components/schemas/StatusDetail'
SynchronizedDomDocument:
type: object
properties:
asNode:
$ref: '#/components/schemas/SynchronizedDomNode'
SynchronizedDomElement:
type: object
SynchronizedDomNode:
type: object
TypeInfo:
type: object
properties:
typeNamespace:
type: string
typeName:
type: string
ErrorResponse:
type: object
properties:
code:
type: integer
format: int32
message:
type: string
Resources:
type: object
xml:
name: resources
namespace: "http://ietf.org/ns/home-documents"
properties:
resource:
type: object
xml:
name: resource
properties:
rel:
type: string
example: "http://docs.oasis-open.org/xacml/ns/relation/pdp"
xml:
attribute: true
atomLink:
type: object
xml:
name: atom:link
prefix: atom
namespace: "http://www.w3.org/2005/Atom"
properties:
href:
type: string
example: "/authorize"
xml:
attribute: true