<?xml version="1.0" encoding="UTF-8"?>
  <?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
  <!-- generated by https://github.com/cabo/kramdown-rfc version 1.7.30 (Ruby 3.1.7) -->


<!DOCTYPE rfc  [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">

]>


<rfc ipr="none" docName="authorization-api-1_0" category="std" consensus="true" submissionType="IETF" xml:lang="en">
  <front>
    <title abbrev="azapi">Authorization API 1.0</title>

    <author initials="O." surname="Gazitt" fullname="Omri Gazitt" role="editor">
      <organization>Aserto</organization>
      <address>
        <email>ogazitt@gmail.com</email>
      </address>
    </author>
    <author initials="D." surname="Brossard" fullname="David Brossard" role="editor">
      <organization>Axiomatics</organization>
      <address>
        <email>david.brossard@axiomatics.com</email>
      </address>
    </author>
    <author initials="A." surname="Tulshibagwale" fullname="Atul Tulshibagwale" role="editor">
      <organization>SGNL</organization>
      <address>
        <email>atul@sgnl.ai</email>
      </address>
    </author>

    <date year="2026" month="January" day="11"/>

    
    <workgroup>OpenID AuthZEN</workgroup>
    <keyword>Authorization</keyword> <keyword>Access Management</keyword> <keyword>XACML</keyword> <keyword>OPA</keyword> <keyword>Topaz</keyword> <keyword>Cedar</keyword> <keyword>PDP</keyword> <keyword>PEP</keyword> <keyword>ALFA</keyword>

    <abstract>


<?line 95?>

<t>The Authorization API enables Policy Decision Points (PDPs) and Policy Enforcement Points (PEPs) to communicate authorization requests and decisions to each other without requiring knowledge of each other's inner workings. The Authorization API is served by the PDP and is called by the PEP. The Authorization API includes evaluation endpoints, which provide specific access decisions, and search endpoints for discovering permissible subjects, resources, or actions.</t>



    </abstract>



  </front>

  <middle>


<?line 99?>

<section anchor="introduction"><name>Introduction</name>
<t>Computational services often implement access control within their components by separating Policy Decision Points (PDPs) from Policy Enforcement Points (PEPs). PDPs and PEPs are defined in XACML (<xref target="XACML"/>) and NIST's ABAC SP 800-162 (<xref target="NIST.SP.800-162"/>). Communication between PDPs and PEPs follows similar patterns across different software and services that require or provide authorization information. The Authorization API described in this document enables different providers to offer PDP and PEP capabilities without having to bind themselves to one particular implementation of a PDP or PEP.</t>

</section>
<section anchor="model"><name>Model</name>
<t>By convention, we refer to a service that implements this API as a Policy Decision Point, or PDP. The policy language, architecture, and state management aspects of a PDP are beyond the scope of this specification.</t>

<t>By convention, we refer to a client of the Authorization API as a Policy Enforcement Point, or PEP. Clients may consume the Authorization API for use cases that go beyond enforcement of authorization decisions; for example, the Resource Search API (<xref target="resource-search-api"/>) allows a caller to discover the resources on which a subject can perform an action. For consistency, we use the term PEP to describe a client of the API, regardless of the use case.</t>

<t>The Authorization API is defined in a transport-agnostic manner. A normative HTTPS binding is described in Transport (<xref target="transport"/>). Other bindings, such as gRPC, may be defined in other profiles of this specification.</t>

<t>Authentication for the Authorization API itself is out of scope for this document, since authentication for APIs is well-documented elsewhere. Support for OAuth 2.0 (<xref target="RFC6749"/>) is RECOMMENDED.</t>

</section>
<section anchor="features"><name>Features</name>
<t>The core feature of the Authorization API is the Access Evaluation API (<xref target="access-evaluation-api"/>), which enables a PEP to determine whether a specific request can be permitted to access a specific resource. The following are non-normative examples:</t>

<t><list style="symbols">
  <t>Can Alice view document #123?</t>
  <t>Can Alice view document #123 at 16:30 on Tuesday, June 11, 2024?</t>
  <t>Can a manager print?</t>
</list></t>

<t>The Access Evaluations API (<xref target="access-evaluations-api"/>) enables execution of multiple evaluations in a single request. The following are non-normative examples:</t>

<t><list style="symbols">
  <t>Can Alice view documents 123, 234 and 345 on Tuesday, June 11, 2024?</t>
  <t>Can document 123 be viewed by Alice and Bob?</t>
</list></t>

<t>The Search APIs (<xref target="search"/>) provide lists of resources, subjects or actions that would be allowed access. The following are non-normative examples:</t>

<t><list style="symbols">
  <t>Which documents can Alice view?</t>
  <t>Who can view document 123?</t>
  <t>What actions can Alice perform on document 123 on Tuesday, June 11, 2024?</t>
</list></t>

</section>
<section anchor="api-version"><name>API Version</name>
<t>This document describes the API version 1.0. Any updates to this API through subsequent revisions of this document or other documents MAY augment this API, but MUST NOT modify the API described here. Augmentation MAY include additional API methods or additional parameters to existing API methods, additional authorization mechanisms, or additional optional headers in HTTPS transport bindings. Endpoints for version 1.0 SHOULD include <spanx style="verb">v1</spanx> in the endpoint identifier (e.g. <spanx style="verb">https://pdp.example.com/access/v1/</spanx>).</t>

</section>
<section anchor="information-model"><name>Information Model</name>
<t>The information model for requests and responses include the following entities: Subject, Action, Resource, Context, and Decision. These are all defined below.</t>

<section anchor="subject"><name>Subject</name>
<t>A Subject is the user or machine principal about whom the Authorization API is being invoked. The Subject may be requesting access at the time the Authorization API is invoked.</t>

<t>A Subject is an object that contains two REQUIRED keys, <spanx style="verb">type</spanx> and <spanx style="verb">id</spanx>, which have a string value, and an OPTIONAL key, <spanx style="verb">properties</spanx>, with a value of an object.</t>

<dl>
  <dt><spanx style="verb">type</spanx>:</dt>
  <dd>
    <t>REQUIRED. A string value that specifies the type of the Subject.</t>
  </dd>
  <dt><spanx style="verb">id</spanx>:</dt>
  <dd>
    <t>REQUIRED. A string value containing the unique identifier of the Subject, scoped to the <spanx style="verb">type</spanx>.</t>
  </dd>
  <dt><spanx style="verb">properties</spanx>:</dt>
  <dd>
    <t>OPTIONAL. An object which can be used to express additional attributes of a Subject.</t>
  </dd>
</dl>

<section anchor="subject-properties"><name>Subject Properties</name>
<t>Many authorization systems are stateless, and expect the PEP to pass in all relevant attributes used in the evaluation of the authorization policy. To satisfy this requirement, Subjects MAY include additional attributes as key-value pairs, under the <spanx style="verb">properties</spanx> object. A property can contain both simple values, such as strings, numbers, booleans and nulls, and complex values, such as arrays and objects.</t>

<t>Examples of subject attributes can include, but are not limited to:</t>

<t><list style="symbols">
  <t>department,</t>
  <t>group memberships,</t>
  <t>device identifier,</t>
  <t>IP address.</t>
</list></t>

</section>
<section anchor="subject-examples"><name>Examples (non-normative)</name>

<t>The following is a non-normative example of a minimal Subject:</t>

<figure title="Example Subject" anchor="subject-example"><sourcecode type="json"><![CDATA[
{
  "type": "user",
  "id": "alice@example.com"
}
]]></sourcecode></figure>

<t>The following is a non-normative example of a Subject which adds a string-valued <spanx style="verb">department</spanx> property:</t>

<figure title="Example Subject with Additional Property" anchor="subject-department-example"><sourcecode type="json"><![CDATA[
{
  "type": "user",
  "id": "alice@example.com",
  "properties": {
    "department": "Sales"
  }
}
]]></sourcecode></figure>

<t>The following is a non-normative example of a subject which adds IP address and device identifier properties:</t>

<figure title="Example Subject with IP Address and Device ID" anchor="subject-device-id-example"><sourcecode type="json"><![CDATA[
{
  "type": "user",
  "id": "alice@example.com",
  "properties": {
    "ip_address": "172.217.22.14",
    "device_id": "8:65:ee:17:7e:0b"
  }
}
]]></sourcecode></figure>

</section>
</section>
<section anchor="resource"><name>Resource</name>
<t>A Resource is the target of an access request. It is an object that is constructed similar to a Subject entity. It has the following keys:</t>

<dl>
  <dt><spanx style="verb">type</spanx>:</dt>
  <dd>
    <t>REQUIRED. A string value that specifies the type of the Resource.</t>
  </dd>
  <dt><spanx style="verb">id</spanx>:</dt>
  <dd>
    <t>REQUIRED. A string value containing the unique identifier of the Resource, scoped to the <spanx style="verb">type</spanx>.</t>
  </dd>
  <dt><spanx style="verb">properties</spanx>:</dt>
  <dd>
    <t>OPTIONAL. An object which can be used to express additional attributes of a Resource.</t>
  </dd>
</dl>

<section anchor="resource-properties"><name>Resource Properties</name>

<t>Similarly to the Subject properties, the PEP can also provide attributes for the Resource in the properties field.</t>

<t>Such attributes can include, but are not limited to, attributes of the resource used in access evaluations or metadata about the resource.</t>

</section>
<section anchor="resource-examples"><name>Examples (non-normative)</name>

<t>The following is a non-normative example of a Resource with a <spanx style="verb">type</spanx> and a simple <spanx style="verb">id</spanx>:</t>

<figure title="Example Resource" anchor="resource-example"><sourcecode type="json"><![CDATA[
{
  "type": "book",
  "id": "123"
}
]]></sourcecode></figure>

<t>The following is a non-normative example of a Resource containing a <spanx style="verb">library_record</spanx> property, that is itself an object:</t>

<figure title="Example Resource with Additional Property" anchor="resource-example-structured"><sourcecode type="json"><![CDATA[
{
  "type": "book",
  "id": "123",
  "properties": {
    "library_record":{
      "title": "AuthZEN in Action",
      "isbn": "978-0593383322"
    }
  }
}
]]></sourcecode></figure>

</section>
</section>
<section anchor="action"><name>Action</name>
<t>An Action is the type of access that the requester intends to perform.</t>

<t>Action is an object that contains a REQUIRED <spanx style="verb">name</spanx> key with a string value, and an OPTIONAL <spanx style="verb">properties</spanx> key with an object value.</t>

<dl>
  <dt><spanx style="verb">name</spanx>:</dt>
  <dd>
    <t>REQUIRED. A string value containing the name of the Action.</t>
  </dd>
  <dt><spanx style="verb">properties</spanx>:</dt>
  <dd>
    <t>OPTIONAL. An object which can be used to express additional attributes of an Action.</t>
  </dd>
</dl>

<section anchor="action-properties"><name>Action Properties</name>

<t>Similarly to the Subject and Resource properties, the PEP can also provide attributes for the Action in the properties field.</t>

<t>Such attributes can include, but are not limited to, parameters of the action that is being requested.</t>

</section>
<section anchor="action-examples"><name>Examples (non-normative)</name>

<t>The following is a non-normative example of an action:</t>

<figure title="Example Action" anchor="action-example"><sourcecode type="json"><![CDATA[
{
  "name": "can_read"
}
]]></sourcecode></figure>

<t>The following is a non-normative example of an action with additional properties:</t>

<figure title="Example Action with properties for extending a book loan." anchor="action-extend-loan-example"><sourcecode type="json"><![CDATA[
{
  "name": "extend-loan",
  "properties": {
    "period": "2W"
  }
}
]]></sourcecode></figure>

</section>
</section>
<section anchor="context"><name>Context</name>
<t>The Context represents the environment of the access evaluation request.</t>

<t>Context is an object which can be used to express attributes of the environment.</t>

<t>Examples of context attributes can include, but are not limited to:</t>

<t><list style="symbols">
  <t>The time of day,</t>
  <t>Location from which the request was received,</t>
  <t>Capabilities of the PEP,</t>
  <t>JSON Schema or JSON-LD definitions for the request.</t>
</list></t>

<section anchor="context-examples"><name>Examples (non-normative)</name>

<t>The following is a non-normative example of a Context:</t>

<figure title="Example Context" anchor="context-example"><sourcecode type="json"><![CDATA[
{
  "time": "1985-10-26T01:22-07:00"
}
]]></sourcecode></figure>

<t>The following example of a Context provides a JSON Schema definition which can be used to parse and validate the AuthZEN request:</t>

<figure title="Example Context with a reference to a JSON schema" anchor="context-schema-example"><sourcecode type="json"><![CDATA[
{
  "time": "1985-10-26T01:22-07:00",
  "schema": "https://schema.example.com/access-request.schema.json"
}
]]></sourcecode></figure>

</section>
</section>
<section anchor="decision"><name>Decision</name>
<t>A Decision is the result of the evaluation of an access request. It provides the information required for the PEP to enforce the decision.</t>

<t>Decision is an object that contains a REQUIRED <spanx style="verb">decision</spanx> key with a <spanx style="verb">boolean</spanx> value, and an OPTIONAL <spanx style="verb">context</spanx> key with an object value.</t>

<dl>
  <dt><spanx style="verb">decision</spanx>:</dt>
  <dd>
    <t>REQUIRED. A boolean value that specifies whether the Decision is to allow or deny the operation.</t>
  </dd>
  <dt><spanx style="verb">context</spanx>:</dt>
  <dd>
    <t>OPTIONAL. An object which can convey additional information that can be used by the PEP as part of the decision enforcement process.</t>
  </dd>
</dl>

<t>In this specification, assuming the evaluation was successful, there are only two possible values for the <spanx style="verb">decision</spanx>:</t>

<t><list style="symbols">
  <t><spanx style="verb">true</spanx>: The access request is permitted to go forward. If the PEP does not understand information in the <spanx style="verb">context</spanx> response object, the PEP MAY choose to reject the decision.</t>
  <t><spanx style="verb">false</spanx>: The access request is denied and MUST NOT be permitted to go forward.</t>
</list></t>

<t>The following is a non-normative example of a minimal Decision:</t>

<figure title="Example Decision" anchor="decision-example"><sourcecode type="json"><![CDATA[
{
  "decision": true
}
]]></sourcecode></figure>

<section anchor="decision-context"><name>Decision Context</name>
<t>In addition to a <spanx style="verb">decision</spanx>, a response MAY contain a <spanx style="verb">context</spanx> field which contains an object. This context can convey additional information that can be used by the PEP as part of the decision enforcement process.</t>

<t>Examples include, but are not limited to:</t>

<t><list style="symbols">
  <t>Reason(s) a decision was made,</t>
  <t>"Advices" and/or "Obligations" tied to the access decision,</t>
  <t>Hints for rendering UI state,</t>
  <t>Instructions for step-up authentication,</t>
  <t>Environmental information,</t>
  <t>etc.</t>
</list></t>

</section>
<section anchor="decision-examples"><name>Examples (non-normative)</name>
<t>The following are all non-normative examples of possible and valid contexts, provided to illustrate possible usages. The actual semantics and format of the <spanx style="verb">context</spanx> object are an implementation concern and outside the scope of this specification. For example, implementations MAY use keys that correspond to concepts from other standards, such as HTTP status codes, to convey common reasons in an interoperable manner.</t>

<section anchor="non-normative-example-1-conveying-decision-reasons"><name>Non-normative Example 1: conveying decision Reasons</name>
<t>The PDP may provide reasons to explain a decision. In the non-normative example below, an implementation might convey different reasons to administrators and end-users, using keys that could correspond to HTTP status codes:</t>

<figure title="Non-normative Example Response with reason Context" anchor="response-with-reason-context-example"><sourcecode type="json"><![CDATA[
{
  "decision": false,
  "context": {
    "reason_admin": {
      "403": "Request failed policy C076E82F"
    },
    "reason_user": {
      "403": "Insufficient privileges. Contact your administrator"
    }
  }
}
]]></sourcecode></figure>

</section>
<section anchor="non-normative-example-2-conveying-metadata-and-environmental-elements"><name>Non-normative Example 2: conveying metadata and environmental elements</name>
<t>In the following non-normative example, the PDP justifies its decision by including environmental conditions that did not meet its policies. Metadata pertaining to the decision response times is also provided:</t>

<figure title="Non-normative Example Response with Environment and Metadata Context" anchor="response-with-environment-context-example"><sourcecode type="json"><![CDATA[
{
  "decision": false,
  "context": {
    "metadata": {
      "response_time": 60,
      "response_time_unit": "ms"
    },
    "environment": {
      "ip": "10.10.0.1",
      "datetime": "2025-06-27T18:03-07:00",
      "os": "ubuntu24.04.2LTS-AMDx64"
    }
  }
}
]]></sourcecode></figure>

</section>
<section anchor="non-normative-example-3-requesting-step-up-authentication"><name>Non-normative Example 3: requesting step-up authentication</name>
<t>In the following non-normative example, the PDP requests a step-up authentication of the requesting subject, by signalling the required <spanx style="verb">acr</spanx> and <spanx style="verb">amr</spanx> access token claim values it expects to see in order to approve the request:</t>

<figure title="Non-normative Example Response with a step-up request Context" anchor="response-with-step-up-example"><sourcecode type="json"><![CDATA[
{
  "decision": false,
  "context": {
    "acr_values": "urn:com:example:loa:3",
    "amr_values": "mfa hwk"
  }
}
]]></sourcecode></figure>

</section>
</section>
</section>
</section>
<section anchor="access-evaluation-api"><name>Access Evaluation API</name>

<t>The Access Evaluation API defines the message exchange pattern between a PEP and a PDP for executing a single access evaluation.</t>

<section anchor="access-evaluation-request"><name>The Access Evaluation API Request</name>
<t>The Access Evaluation request is an object consisting of four entities previously defined in the Information Model (<xref target="information-model"/>):</t>

<dl>
  <dt><spanx style="verb">subject</spanx>:</dt>
  <dd>
    <t>REQUIRED. The subject (or principal) of type Subject</t>
  </dd>
  <dt><spanx style="verb">action</spanx>:</dt>
  <dd>
    <t>REQUIRED. The action (or verb) of type Action.</t>
  </dd>
  <dt><spanx style="verb">resource</spanx>:</dt>
  <dd>
    <t>REQUIRED. The resource of type Resource.</t>
  </dd>
  <dt><spanx style="verb">context</spanx>:</dt>
  <dd>
    <t>OPTIONAL. The context (or environment) of type Context.</t>
  </dd>
</dl>

<section anchor="example-non-normative"><name>Example (non-normative)</name>

<figure title="Example Request" anchor="request-example"><sourcecode type="json"><![CDATA[
{
  "subject": {
    "type": "user",
    "id": "alice@example.com"
  },
  "resource": {
    "type": "account",
    "id": "123"
  },
  "action": {
    "name": "can_read",
    "properties": {
      "method": "GET"
    }
  },
  "context": {
    "time": "1985-10-26T01:22-07:00"
  }
}
]]></sourcecode></figure>

</section>
</section>
<section anchor="access-evaluation-response"><name>The Access Evaluation API Response</name>

<t>The response of the Access Evaluation API consists of the Decision entity as defined in the Information Model (<xref target="information-model"/>).</t>

</section>
</section>
<section anchor="access-evaluations-api"><name>Access Evaluations API</name>

<t>The Access Evaluations API defines the message exchange pattern between a PEP and a PDP for evaluating multiple access evaluations within the scope of a single message exchange (also known as "boxcarring" requests).</t>

<section anchor="access-evaluations-request"><name>The Access Evaluations API Request</name>

<t>The Access Evaluation API Request builds on the information model presented in <xref target="information-model"/> and the object defined in the Access Evaluation Request (<xref target="access-evaluation-request"/>).</t>

<t>To send multiple access evaluation requests in a single message, the PEP MAY add an <spanx style="verb">evaluations</spanx> key to the request. The <spanx style="verb">evaluations</spanx> key is an array which contains a list of objects, each typed as the object as defined in the Access Evaluation Request (<xref target="access-evaluation-request"/>), and specifying a discrete request.</t>

<t>If an <spanx style="verb">evaluations</spanx> array is NOT present or is empty, the Access Evaluations Request behaves in a backwards-compatible manner with the (single) Access Evaluation API Request (<xref target="access-evaluation-request"/>).</t>

<t>If an <spanx style="verb">evaluations</spanx> array IS present and contains one or more objects, these form distinct requests that the PDP will evaluate. These requests are independent from each other, and may be executed sequentially or in parallel, left to the discretion of each implementation.</t>

<t>The top-level <spanx style="verb">subject</spanx>, <spanx style="verb">action</spanx>, <spanx style="verb">resource</spanx>, and <spanx style="verb">context</spanx> keys provide default values for their respective fields in the <spanx style="verb">evaluations</spanx> array.  The top-level <spanx style="verb">subject</spanx>, <spanx style="verb">action</spanx> and <spanx style="verb">resource</spanx> keys MAY be omitted if the <spanx style="verb">evaluations</spanx> array is present, contains one or more objects, and every object in the <spanx style="verb">evaluations</spanx> array contains the respective top-level key. This behavior is described in <xref target="default-values"/>.</t>

<t>The following is a non-normative example for specifying three requests, with no default values:</t>

<figure><sourcecode type="json"><![CDATA[
{
  "evaluations": [
    {
      "subject": {
        "type": "user",
        "id": "alice@example.com"
      },
      "action": {
        "name": "can_read"
      },
      "resource": {
        "type": "document",
        "id": "boxcarring.md"
      },
      "context": {
        "time": "2024-05-31T15:22-07:00"
      }
    },
    {
      "subject": {
        "type": "user",
        "id": "alice@example.com"
      },
      "action": {
        "name": "can_read"
      },
      "resource": {
        "type": "document",
        "id": "subject-search.md"
      },
      "context": {
        "time": "2024-05-31T15:22-07:00"
      }
    },
    {
      "subject": {
        "type": "user",
        "id": "alice@example.com"
      },
      "action": {
        "name": "can_read"
      },
      "resource": {
        "type": "document",
        "id": "resource-search.md"
      },
      "context": {
        "time": "2024-05-31T15:22-07:00"
      }
    }
  ]
}
]]></sourcecode></figure>

<section anchor="default-values"><name>Default values</name>

<t>While the example above provides the most flexibility in specifying distinct values in each request for every evaluation, it is common for boxcarred requests to share one or more values of the evaluation request. For example, evaluations MAY all refer to a single subject, and/or have the same contextual (environmental) attributes.</t>

<t>Default values offer a more compact syntax that avoids unnecessary duplication of request data.</t>

<t>The top-level <spanx style="verb">subject</spanx>, <spanx style="verb">action</spanx>, <spanx style="verb">resource</spanx>, and <spanx style="verb">context</spanx> keys provide default values for each object in the evaluations array. Any of these keys specified within an individual evaluation object overrides the corresponding top-level default. Because <spanx style="verb">subject</spanx>, <spanx style="verb">action</spanx>, and <spanx style="verb">resource</spanx> are required for a valid evaluation, any of these keys omitted from an evaluation object MUST be provided as a top-level key.</t>

<t>The following is a non-normative example for specifying three requests that refer to a single subject and context:</t>

<figure><sourcecode type="json"><![CDATA[
{
  "subject": {
    "type": "user",
    "id": "alice@example.com"
  },
  "context": {
    "time": "2024-05-31T15:22-07:00"
  },
  "evaluations": [
    {
      "action": {
        "name": "can_read"
      },
      "resource": {
        "type": "document",
        "id": "boxcarring.md"
      }
    },
    {
      "action": {
        "name": "can_read"
      },
      "resource": {
        "type": "document",
        "id": "subject-search.md"
      }
    },
    {
      "action": {
        "name": "can_read"
      },
      "resource": {
        "type": "document",
        "id": "resource-search.md"
      }
    }
  ]
}
]]></sourcecode></figure>

<t>The following is a non-normative example for specifying three requests that refer to a single <spanx style="verb">subject</spanx> and <spanx style="verb">context</spanx>, with a default value for <spanx style="verb">action</spanx>, that is overridden by the third request:</t>

<figure><sourcecode type="json"><![CDATA[
{
  "subject": {
    "type": "user",
    "id": "alice@example.com"
  },
  "context": {
    "time": "2024-05-31T15:22-07:00"
  },
  "action": {
    "name": "can_read"
  },
  "evaluations": [
    {
      "resource": {
        "type": "document",
        "id": "boxcarring.md"
      }
    },
    {
      "resource": {
        "type": "document",
        "id": "subject-search.md"
      }
    },
    {
      "action": {
        "name": "can_edit"
      },
      "resource": {
        "type": "document",
        "id": "resource-search.md"
      }
    }
  ]
}
]]></sourcecode></figure>

</section>
<section anchor="evaluations-options"><name>Evaluations options</name>

<t>The <spanx style="verb">evaluations</spanx> request payload includes an OPTIONAL <spanx style="verb">options</spanx> key, with a value that is an object.</t>

<t>This provides a general-purpose mechanism for providing PEP-supplied metadata on how the request is to be executed.</t>

<t>One such option controls <em>evaluation semantics</em>, and is described in <xref target="evaluations-semantics"/>.</t>

<t>A non-normative example of the <spanx style="verb">options</spanx> field is shown below, following an <spanx style="verb">evaluations</spanx> array provided for the sake of completeness:</t>

<figure><sourcecode type="json"><![CDATA[
{
  "evaluations": [{
    "resource": {
      "type": "doc",
      "id": "1"
    },
    "subject": {
      "type": "doc",
      "id": "2"
    }
  }],
  "options": {
    "evaluations_semantic": "execute_all",
    "another_option": "value"
  }
}
]]></sourcecode></figure>

<section anchor="evaluations-semantics"><name>Evaluations semantics</name>

<t>By default, every request in the <spanx style="verb">evaluations</spanx> array is executed and a response returned in the same array order. This is the most common use-case for boxcarring multiple evaluation requests in a single payload.</t>

<t>This specification supports three evaluation semantics:</t>

<t><list style="numbers" type="1">
  <t><em>Execute all of the requests (potentially in parallel), return all of the results.</em> Any failure can be denoted by <spanx style="verb">"decision": false</spanx> and MAY provide a reason code in the context.</t>
  <t><em>Deny on first denial (or failure).</em> This semantic could be desired if a PEP wants to issue a few requests in a particular order, with any denial (error, or <spanx style="verb">"decision": false</spanx>) "short-circuiting" the evaluations call and returning on the first denial. This essentially works like the <spanx style="verb">&amp;&amp;</spanx> operator in programming languages.</t>
  <t><em>Permit on first permit.</em> This is the converse "short-circuiting" semantic, working like the <spanx style="verb">||</spanx> operator in programming languages.</t>
</list></t>

<t>To select the desired evaluation semantic, a PEP can pass in <spanx style="verb">options.evaluations_semantic</spanx> with exactly one of the following values:</t>

<t><list style="symbols">
  <t><spanx style="verb">execute_all</spanx></t>
  <t><spanx style="verb">deny_on_first_deny</spanx></t>
  <t><spanx style="verb">permit_on_first_permit</spanx></t>
</list></t>

<t><spanx style="verb">execute_all</spanx> is the default semantic, so an <spanx style="verb">evaluations</spanx> request without the <spanx style="verb">options.evaluations_semantic</spanx> flag will execute using this semantic.</t>

<section anchor="example-evaluate-read-action-for-three-documents-using-all-three-semantics"><name>Example: Evaluate <spanx style="verb">read</spanx> action for three documents using all three semantics</name>

<t>Execute all requests:</t>

<figure><sourcecode type="json"><![CDATA[
{
  "subject": {
    "type": "user",
    "id": "alice@example.com"
  },
  "action": {
    "name": "read"
  },
  "options": {
    "evaluations_semantic": "execute_all"
  },
  "evaluations": [
    {
      "resource": {
        "type": "document",
        "id": "1"
      }
    },
    {
      "resource": {
        "type": "document",
        "id": "2"
      }
    },
    {
      "resource": {
        "type": "document",
        "id": "3"
      }
    }
  ]
}
]]></sourcecode></figure>

<t>Response:</t>

<figure><sourcecode type="json"><![CDATA[
{
  "evaluations": [
    {
      "decision": true
    },
    {
      "decision": false
    },
    {
      "decision": true
    }
  ]
}
]]></sourcecode></figure>

<t>Deny on first deny:</t>

<figure><sourcecode type="json"><![CDATA[
{
  "subject": {
    "type": "user",
    "id": "alice@example.com"
  },
  "action": {
    "name": "read"
  },
  "options": {
    "evaluations_semantic": "deny_on_first_deny"
  },
  "evaluations": [
    {
      "resource": {
        "type": "document",
        "id": "1"
      }
    },
    {
      "resource": {
        "type": "document",
        "id": "2"
      }
    },
    {
      "resource": {
        "type": "document",
        "id": "3"
      }
    }
  ]
}
]]></sourcecode></figure>

<t>Response:</t>

<figure><sourcecode type="json"><![CDATA[
{
  "evaluations": [
    {
      "decision": true
    },
    {
      "decision": false,
      "context": {
        "code": "200",
        "reason": "deny_on_first_deny"
      }
    }
  ]
}
]]></sourcecode></figure>

<t>Permit on first permit:</t>

<figure><sourcecode type="json"><![CDATA[
{
  "subject": {
    "type": "user",
    "id": "alice@example.com"
  },
  "action": {
    "name": "read"
  },
  "options": {
    "evaluations_semantic": "permit_on_first_permit"
  },
  "evaluations": [
    {
      "resource": {
        "type": "document",
        "id": "1"
      }
    },
    {
      "resource": {
        "type": "document",
        "id": "2"
      }
    },
    {
      "resource": {
        "type": "document",
        "id": "3"
      }
    }
  ]
}
]]></sourcecode></figure>

<t>Response:</t>

<figure><sourcecode type="json"><![CDATA[
{
  "evaluations": [
    {
      "decision": true
    }
  ]
}
]]></sourcecode></figure>

</section>
</section>
</section>
</section>
<section anchor="access-evaluations-response"><name>The Access Evaluations API Response</name>

<t>Like the request format, the Access Evaluations Response format for an Access Evaluations Request adds an <spanx style="verb">evaluations</spanx> array that lists the decisions in the same order they were provided in the <spanx style="verb">evaluations</spanx> array in the request. Each value of the evaluations array is typed as a Decision as defined in the Information Model (<xref target="information-model"/>).</t>

<t>In case the <spanx style="verb">evaluations</spanx> array is present, it is RECOMMENDED that the <spanx style="verb">decision</spanx> key of the response be omitted. If present, it can be ignored by the PEP.</t>

<t>The following is a non-normative example of a Access Evaluations Response to an Access Evaluations Request containing three evaluation objects:</t>

<figure><sourcecode type="json"><![CDATA[
{
  "evaluations": [
    {
      "decision": true
    },
    {
      "decision": false,
      "context": {
        "reason": "resource not found"
      }
    },
    {
      "decision": false,
      "context": {
        "reason": "Subject is a viewer of the resource"
      }
    }
  ]
}
]]></sourcecode></figure>

<section anchor="errors"><name>Errors</name>

<t>There are two types of errors, and they are handled differently:
1. Transport-level errors, or errors that pertain to the entire payload.
2. Errors in individual evaluations.</t>

<t>The first type of error is handled at the transport level. For example, for the HTTP binding, the 4XX and 5XX codes indicate a general error that pertains to the entire payload, as described in Transport (<xref target="transport"/>).</t>

<t>The second type of error is handled at the payload level. Decisions default to <em>closed</em> (i.e. <spanx style="verb">false</spanx>), but the <spanx style="verb">context</spanx> field can include errors that are specific to that request.</t>

<t>The following is a non-normative example of a response to an Access Evaluations Request containing three evaluation objects, two of them demonstrating how errors can be returned for two of the evaluation requests:</t>

<figure><sourcecode type="json"><![CDATA[
{
  "evaluations": [
    {
      "decision": true
    },
    {
      "decision": false,
      "context": {
        "error": {
          "status": 404,
          "message": "Resource not found"
        }
      }
    },
    {
      "decision": false,
      "context": {
        "reason": "Subject is a viewer of the resource"
      }
    }
  ]
}
]]></sourcecode></figure>

</section>
</section>
</section>
<section anchor="search"><name>Search APIs</name>

<t>The Search APIs enable a PEP to discover the set of subjects, resources, or actions that are permitted within a specific authorization context. Their purpose is to return a list of authorized entities, rather than verify a single access request.</t>

<t>To perform a search, the PEP provides the Subject, Resource, Action, and Context entities defined in the Information Model (<xref target="information-model"/>), but omits the unique identifier of the entity being queried. The PDP then responds with the set of authorized entities for the queried entity type which would be authorized according to the provided criteria.</t>

<section anchor="search-semantics"><name>Semantics</name>

<t>A search is designed to return entities that would correspond to a permitted decision. Therefore, any result from a Search API, when subsequently used in an Access Evaluation API call, SHOULD result in a <spanx style="verb">"decision": true</spanx> response. However, because the evaluation is implementation-specific and may depend on other variables (such as time), this outcome is not guaranteed.</t>

<t>In addition, it is RECOMMENDED that a search be performed transitively, traversing intermediate attributes and/or relationships. For example, if user U is a member of group G, and group G is designated as a viewer on a document D, then a search for all subjects of type user that can view document D will include user U.</t>

</section>
<section anchor="search-pagination"><name>Pagination</name>

<t>Search APIs can return large result sets. To manage this, a PDP MAY support pagination, allowing a PEP to navigate and retrieve subsets of the total result set.</t>

<t>Pagination does not guarantee an atomic snapshot of the result set. Consequently, if items are added or removed while paginating, results MAY be repeated or omitted between pages.</t>

<t>Pagination is based on the use of opaque tokens. A PEP makes an initial request for data by sending a query that does not contain a token. If the PDP determines that the result set contains too many results to fit in a single response, the PDP returns a partial result set and a token that the PEP can use to retrieve the next page of results.</t>

<t>A paginated response MUST be clearly identified by the inclusion of a <spanx style="verb">page</spanx> object containing a non-empty, opaque <spanx style="verb">next_token</spanx>. This token is the signal to the PEP that more results are available.</t>

<t>To retrieve the next page, the PEP sends a subsequent request containing a <spanx style="verb">page</spanx> object with the <spanx style="verb">token</spanx> field set to the <spanx style="verb">next_token</spanx> value from the previous response. This process is repeated until the PDP returns a <spanx style="verb">page</spanx> object in which the value of the <spanx style="verb">next_token</spanx> field is an empty string, signaling the end of the result set.</t>

<t>When a request contains a token, all entities (e.g., <spanx style="verb">subject</spanx>, <spanx style="verb">resource</spanx>, <spanx style="verb">action</spanx>, <spanx style="verb">context</spanx>) and pagination parameters (e.g., <spanx style="verb">limit</spanx>)  MUST be identical to the preceding request. PDPs SHOULD return an error when any entity or parameter has been changed.</t>

<t>PEPs that wish to sequentially iterate through the entire result set SHOULD use the core pagination mechanism described above, which is designed to work consistently across all PDPs that support the search APIs.</t>

<section anchor="search-pagination-request"><name>Paginated Requests</name>

<t>A Search API Request MAY include a <spanx style="verb">page</spanx> object indicating which subset of the larger result set the PEP would like to receive.</t>

<t>The <spanx style="verb">page</spanx> object in a Search API Request consists of the following keys:</t>

<dl>
  <dt><spanx style="verb">token</spanx>:</dt>
  <dd>
    <t>OPTIONAL. An opaque string value from the <spanx style="verb">next_token</spanx> of a previous response.</t>
  </dd>
  <dt><spanx style="verb">limit</spanx>:</dt>
  <dd>
    <t>OPTIONAL. A non-negative integer indicating the maximum number of results to return in the response.</t>
  </dd>
  <dt><spanx style="verb">properties</spanx>:</dt>
  <dd>
    <t>OPTIONAL. An object containing additional implementation-specific pagination request attributes, such as, but not limited to, sorting and filtering.</t>
  </dd>
</dl>

<t>Apart from the <spanx style="verb">token</spanx>, all values from the initial request MUST remain identical for subsequent pages. If a different value is provided mid-pagination the PDP SHOULD return an error.</t>

<t>Additional keys MAY be included in the <spanx style="verb">page</spanx> object. If they are, they MUST be defined in a specification referenced in the AuthZEN Policy Decision Point Capabilities Registry (<xref target="iana-pdp-capabilities-registry"/>). Furthermore, the PDP MUST declare support for the corresponding capability URN in its <spanx style="verb">supported_capabilities</spanx> metadata (<xref target="pdp-metadata-data-capabilities"/>).</t>

</section>
<section anchor="search-pagination-response"><name>Paginated Responses</name>

<t>Any Search API Response MAY include a <spanx style="verb">page</spanx> object, but if a response does not contain the entire result set, it MUST include this object.</t>

<t>The <spanx style="verb">page</spanx> object contains the following keys:</t>

<dl>
  <dt><spanx style="verb">next_token</spanx>:</dt>
  <dd>
    <t>REQUIRED. An opaque string value indicating the next page of results to return. If there are no more results after this page, its value MUST be an empty string.</t>
  </dd>
  <dt><spanx style="verb">count</spanx>:</dt>
  <dd>
    <t>OPTIONAL. A non-negative integer indicating the number of results included in this response. When included at the start of a response, as described in the Search API Response (<xref target="search-response"/>), this enables a PEP to display a progress indicator when processing large or slow responses.</t>
  </dd>
  <dt><spanx style="verb">total</spanx>:</dt>
  <dd>
    <t>OPTIONAL. A non-negative integer indicating the total number of results matching the query criteria at the time of the request. This value is not guaranteed to equal the total number of items returned across all pages if the underlying data set changes during pagination.</t>
  </dd>
  <dt><spanx style="verb">properties</spanx>:</dt>
  <dd>
    <t>OPTIONAL. An object containing additional pagination response attributes. Examples include, but are not limited to, estimated totals or the number of remaining results.</t>
  </dd>
</dl>

</section>
<section anchor="search-pagination-examples"><name>Examples (non-normative)</name>

<t>The following is a non-normative example of a request-response cycle to retrieve a total of three results with a page size limit of two.</t>

<figure title="Example initial Search API Request" anchor="search-pagination-token-initial-request"><sourcecode type="json"><![CDATA[
{
  "subject": {
    "type": "user",
    "id": "alice@example.com"
  },
  "action": {
    "name": "can_read"
  },
  "resource": {
    "type": "account"
  },
  "page": {
    "limit": 2
  }
}
]]></sourcecode></figure>

<figure title="Example initial Search API Response" anchor="search-pagination-token-initial-response"><sourcecode type="json"><![CDATA[
{
  "page": {
    "next_token": "a3M9NDU2O3N6PTI=",
    "count": 2,
    "total": 3
  },
  "results": [
    {
      "type": "account",
      "id": "123"
    },
    {
      "type": "account",
      "id": "456"
    }
  ]
}
]]></sourcecode></figure>

<figure title="Example second Search API Request" anchor="search-pagination-token-second-request"><sourcecode type="json"><![CDATA[
{
  "subject": {
    "type": "user",
    "id": "alice@example.com"
  },
  "action": {
    "name": "can_read"
  },
  "resource": {
    "type": "account"
  },
  "page": {
    "token": "a3M9NDU2O3N6PTI="
  }
}
]]></sourcecode></figure>

<figure title="Example second Search API Response" anchor="search-pagination-token-second-response"><sourcecode type="json"><![CDATA[
{
  "page": {
    "next_token": "",
    "count": 1,
    "total": 3
  },
  "results": [
    {
      "type": "account",
      "id": "789"
    }
  ]
}
]]></sourcecode></figure>

</section>
</section>
<section anchor="search-response"><name>The Search API Response</name>

<t>The response to a Search API Request always follows the same structure. Each Search API Response is a JSON object with the following keys:</t>

<dl>
  <dt><spanx style="verb">page</spanx>:</dt>
  <dd>
    <t>OPTIONAL. An object providing pagination information, as defined in Paginated Responses (<xref target="search-pagination-response"/>). It is RECOMMENDED that the <spanx style="verb">page</spanx> object be the first key in the response, as this allows a PEP to use the <spanx style="verb">count</spanx> value to display a progress indicator when processing large or slow responses.</t>
  </dd>
  <dt><spanx style="verb">context</spanx>:</dt>
  <dd>
    <t>OPTIONAL. An object that can convey additional information that can be used by the PEP, similar to its function in the Access Evaluation Response (see <xref target="access-evaluation-response"/>).</t>
  </dd>
  <dt><spanx style="verb">results</spanx>:</dt>
  <dd>
    <t>REQUIRED. An array containing zero or more entities, as defined in the Information Model (<xref target="information-model"/>). It MUST contain only entities of the type being searched for (e.g., Subjects, Resources, or Actions).</t>
  </dd>
</dl>

<t>The following is a non-normative example of a search response returning resources:</t>

<figure title="Example Resource Search API Response" anchor="search-response-example"><sourcecode type="json"><![CDATA[
{
  "page": {
    "count": 2,
    "total": 102
  },
  "context": {
    "query_execution_time_ms": 42
  },
  "results": [
    {
      "type": "account",
      "id": "123"
    },
    {
      "type": "account",
      "id": "456"
    }
  ]
}
]]></sourcecode></figure>

</section>
<section anchor="subject-search-api"><name>Subject Search API</name>

<t>The Subject Search API returns all subjects of a given type that are permitted according to the provided Action (<xref target="action"/>), Resource (<xref target="resource"/>), and Context (<xref target="context"/>).</t>

<section anchor="subject-search-request"><name>The Subject Search API Request</name>

<t>The Subject Search request is an object consisting of the following entities:</t>

<dl>
  <dt><spanx style="verb">subject</spanx>:</dt>
  <dd>
    <t>REQUIRED. The subject (or principal) of type Subject. The Subject MUST contain a <spanx style="verb">type</spanx>, but the Subject <spanx style="verb">id</spanx> SHOULD be omitted, and if present, MUST be ignored.</t>
  </dd>
  <dt><spanx style="verb">action</spanx>:</dt>
  <dd>
    <t>REQUIRED. The action (or verb) of type Action.</t>
  </dd>
  <dt><spanx style="verb">resource</spanx>:</dt>
  <dd>
    <t>REQUIRED. The resource of type Resource.</t>
  </dd>
  <dt><spanx style="verb">context</spanx>:</dt>
  <dd>
    <t>OPTIONAL. Contextual data about the request.</t>
  </dd>
  <dt><spanx style="verb">page</spanx>:</dt>
  <dd>
    <t>OPTIONAL. A page object for paginated requests.</t>
  </dd>
</dl>

</section>
<section anchor="example-non-normative-1"><name>Example (non-normative)</name>

<t>The following payload defines a request for the subjects of type <spanx style="verb">user</spanx> that can perform the <spanx style="verb">can_read</spanx> action on the resource of type <spanx style="verb">account</spanx> and ID <spanx style="verb">123</spanx>.</t>

<figure title="Example Subject Search API Request" anchor="subject-search-request-example"><sourcecode type="json"><![CDATA[
{
  "subject": {
    "type": "user"
  },
  "action": {
    "name": "can_read"
  },
  "resource": {
    "type": "account",
    "id": "123"
  },
  "context": {
    "time": "2024-10-26T01:22-07:00"
  }
}
]]></sourcecode></figure>

<t>The following payload defines a valid response to this request.</t>

<figure title="Example Subject Search API Response" anchor="subject-search-response-example"><sourcecode type="json"><![CDATA[
{
  "results": [
    {
      "type": "user",
      "id": "alice@example.com"
    },
    {
      "type": "user",
      "id": "bob@example.com"
    }
  ]
}
]]></sourcecode></figure>

</section>
</section>
<section anchor="resource-search-api"><name>Resource Search API</name>

<t>The Resource Search API returns all resources of a given type that are permitted according to the provided Action (<xref target="action"/>), Subject (<xref target="subject"/>), and Context (<xref target="context"/>).</t>

<section anchor="resource-search-request"><name>The Resource Search API Request</name>

<t>The Resource Search request is an object consisting of the following entities:</t>

<dl>
  <dt><spanx style="verb">subject</spanx>:</dt>
  <dd>
    <t>REQUIRED. The subject (or principal) of type Subject.</t>
  </dd>
  <dt><spanx style="verb">action</spanx>:</dt>
  <dd>
    <t>REQUIRED. The action (or verb) of type Action.</t>
  </dd>
  <dt><spanx style="verb">resource</spanx>:</dt>
  <dd>
    <t>REQUIRED. The resource of type Resource. The Resource MUST contain a <spanx style="verb">type</spanx>, but the Resource <spanx style="verb">id</spanx> SHOULD be omitted, and if present, MUST be ignored.</t>
  </dd>
  <dt><spanx style="verb">context</spanx>:</dt>
  <dd>
    <t>OPTIONAL. Contextual data about the request.</t>
  </dd>
  <dt><spanx style="verb">page</spanx>:</dt>
  <dd>
    <t>OPTIONAL. A page object for paginated requests.</t>
  </dd>
</dl>

</section>
<section anchor="example-non-normative-2"><name>Example (non-normative)</name>

<t>The following payload defines a request for the resources of type <spanx style="verb">account</spanx> on which the subject of type <spanx style="verb">user</spanx> and ID <spanx style="verb">alice@example.com</spanx> can perform the <spanx style="verb">can_read</spanx> action.</t>

<figure title="Example Resource Search API Request" anchor="resource-search-request-example"><sourcecode type="json"><![CDATA[
{
  "subject": {
    "type": "user",
    "id": "alice@example.com"
  },
  "action": {
    "name": "can_read"
  },
  "resource": {
    "type": "account"
  }
}
]]></sourcecode></figure>

<t>The following payload defines a valid response to this request.</t>

<figure title="Example Resource Search API Response" anchor="resource-search-response-example"><sourcecode type="json"><![CDATA[
{
  "results": [
    {
      "type": "account",
      "id": "123"
    },
    {
      "type": "account",
      "id": "456"
    }
  ]
}
]]></sourcecode></figure>

</section>
</section>
<section anchor="action-search-api"><name>Action Search API</name>

<t>The Action Search API returns all actions that are permitted according to the provided Subject (<xref target="subject"/>), Resource (<xref target="resource"/>), and Context (<xref target="context"/>).</t>

<section anchor="action-search-request"><name>The Action Search API Request</name>

<t>The Action Search request is an object consisting of the following entities:</t>

<dl>
  <dt><spanx style="verb">subject</spanx>:</dt>
  <dd>
    <t>REQUIRED. The subject (or principal) of type Subject.</t>
  </dd>
  <dt><spanx style="verb">resource</spanx>:</dt>
  <dd>
    <t>REQUIRED. The resource of type Resource.</t>
  </dd>
  <dt><spanx style="verb">context</spanx>:</dt>
  <dd>
    <t>OPTIONAL. Contextual data about the request.</t>
  </dd>
  <dt><spanx style="verb">page</spanx>:</dt>
  <dd>
    <t>OPTIONAL. A page object for paginated requests.</t>
  </dd>
</dl>

<t>Note: Unlike the Subject and Resource Search APIs, the <spanx style="verb">action</spanx> key is omitted from the Action Search request payload.</t>

</section>
<section anchor="example-non-normative-3"><name>Example (non-normative)</name>

<t>The following payload defines a request for the actions that the subject of type <spanx style="verb">user</spanx> with ID <spanx style="verb">123</spanx> may perform on the resource of type <spanx style="verb">account</spanx> and ID <spanx style="verb">123</spanx> at 01:22 AM.</t>

<figure title="Example Action Search API Request" anchor="action-search-request-example"><sourcecode type="json"><![CDATA[
{
  "subject": {
    "type": "user",
    "id": "alice@example.com"
  },
  "resource": {
    "type": "account",
    "id": "123"
  },
  "context": {
    "time": "2024-10-26T01:22-07:00"
  }
}
]]></sourcecode></figure>

<t>The following payload defines a valid response to this request.</t>

<figure title="Example Action Search API Response" anchor="action-search-response-example"><sourcecode type="json"><![CDATA[
{
  "results": [
    {
      "name": "can_read"
    },
    {
      "name": "can_write"
    }
  ]
}
]]></sourcecode></figure>

</section>
</section>
</section>
<section anchor="pdp-metadata"><name>Policy Decision Point Metadata</name>

<t>It is RECOMMENDED that PDPs provide metadata describing their configuration.</t>

<section anchor="pdp-metadata-data"><name>Data structure</name>

<t>The following Policy Decision Point metadata parameters are used by this specification and are registered in the IANA "AuthZEN Policy Decision Point Metadata" registry established in <xref target="iana-pdp-metadata-registry"/>.</t>

<section anchor="pdp-metadata-data-endpoint"><name>Endpoint Parameters</name>

<dl>
  <dt><spanx style="verb">policy_decision_point</spanx>:</dt>
  <dd>
    <t>REQUIRED. The Policy Decision Point identifier, which is a URL that uses the "https" scheme and has no query or fragment components. Policy Decision Point metadata is published at a location that is ".well-known" according to <xref target="RFC8615"/> derived from this Policy Decision Point identifier, as described in <xref target="pdp-metadata-access"/>. The Policy Decision Point identifier is used to prevent Policy Decision Point mix-up attacks.</t>
  </dd>
  <dt><spanx style="verb">access_evaluation_endpoint</spanx>:</dt>
  <dd>
    <t>REQUIRED. URL of Access Evaluation API endpoint</t>
  </dd>
  <dt><spanx style="verb">access_evaluations_endpoint</spanx>:</dt>
  <dd>
    <t>OPTIONAL. URL of Access Evaluations API endpoint</t>
  </dd>
  <dt><spanx style="verb">search_subject_endpoint</spanx>:</dt>
  <dd>
    <t>OPTIONAL. URL of Search API endpoint for subject entities</t>
  </dd>
  <dt><spanx style="verb">search_action_endpoint</spanx>:</dt>
  <dd>
    <t>OPTIONAL. URL of Search API endpoint for action entities</t>
  </dd>
  <dt><spanx style="verb">search_resource_endpoint</spanx>:</dt>
  <dd>
    <t>OPTIONAL. URL of Search API endpoint for resource entities</t>
  </dd>
</dl>

<t>Note: the absence of any of these parameters is sufficient for the PEP to determine that the PDP is not capable and therefore will not return a result for the associated API.</t>

</section>
<section anchor="pdp-metadata-data-capabilities"><name>Capabilities Parameters</name>

<dl>
  <dt><spanx style="verb">capabilities</spanx>:</dt>
  <dd>
    <t>OPTIONAL. JSON array containing a list of registered IANA URNs referencing PDP specific capabilities.</t>
  </dd>
</dl>

</section>
<section anchor="pdp-metadata-data-sig"><name>Signature Parameter</name>

<t>In addition to JSON elements, metadata parameters MAY also be provided as a <spanx style="verb">signed_metadata</spanx> value, which is a JSON Web Token <xref target="RFC7519"/> that asserts metadata values about the PDP as a bundle. A set of metadata parameters that can be used in signed metadata as claims are defined in <xref target="pdp-metadata-data-endpoint"/>. The signed metadata MUST be digitally signed or MACed using JSON Web Signature <xref target="RFC7515"/> and MUST contain an <spanx style="verb">iss</spanx> (issuer) claim denoting the party attesting to the claims in the signed metadata.</t>

<t>A PEP MAY ignore the signed metadata if they do not support this feature. If the PEP supports signed metadata, metadata values conveyed in the signed metadata MUST take precedence over the corresponding values conveyed using plain JSON elements. Signed metadata is included in the Policy Decision Point metadata JSON object using this OPTIONAL metadata parameter:</t>

<dl>
  <dt><spanx style="verb">signed_metadata</spanx>:</dt>
  <dd>
    <t>A JWT containing metadata parameters about the protected resource as claims. This is a string value consisting of the entire signed JWT. A <spanx style="verb">signed_metadata</spanx> parameter SHOULD NOT appear as a claim in the JWT; it is RECOMMENDED to reject any metadata in which this occurs.</t>
  </dd>
</dl>

</section>
</section>
<section anchor="pdp-metadata-access"><name>Obtaining Policy Decision Point Metadata</name>

<t>PDPs supporting metadata MUST make a JSON document containing metadata as specified in the AuthZEN Policy Decision Point Metadata Registry (<xref target="iana-pdp-metadata-registry"/>) available at a URL formed by inserting a well-known URI string between the host component and the path and/or query components, if any. The well-known URI string used is <spanx style="verb">/.well-known/authzen-configuration</spanx>.</t>

<t>The syntax and semantics of .well-known are defined in <xref target="RFC8615"/>. The well-known URI path suffix used is registered in the IANA "Well-Known URIs" registry <xref target="IANA.well-known-uris"/>.</t>

<t>An example of a PDP supporting multiple tenants will have a discovery endpoint as follows:</t>

<figure><artwork><![CDATA[
https://pdp.example.com/.well-known/authzen-configuration/tenant1
]]></artwork></figure>

<section anchor="pdp-metadata-access-request"><name>Policy Decision Point Metadata Request</name>

<t>A Policy Decision Point metadata document MUST be queried using an HTTP GET request at the previously specified URL. The consumer of the metadata would make the following request when the resource identifier is https://pdp.example.com:</t>

<figure><sourcecode type="http"><![CDATA[
GET /.well-known/authzen-configuration HTTP/1.1
Host: pdp.example.com
]]></sourcecode></figure>

</section>
<section anchor="pdp-metadata-access-response"><name>Policy Decision Point Metadata Response</name>

<t>The response is a set of metadata parameters about the protected resource's configuration.</t>

<t>A successful response MUST use the HTTP status code <spanx style="verb">200</spanx> and a <spanx style="verb">Content-Type</spanx> of <spanx style="verb">application/json</spanx>. Its body MUST be a JSON object that contains a set of metadata parameters as defined in the AuthZEN Policy Decision Point Metadata Registry (<xref target="iana-pdp-metadata-registry"/>).</t>

<t>Any metadata parameters in the response that are not understood by the PEP MUST be ignored.</t>

<t>Parameters that have multiple values are represented as JSON arrays. Parameters that have no values MUST be omitted from the response.</t>

<t>An error response uses the applicable HTTP status code value.</t>

<t>The following is a non-normative example response:</t>

<figure><sourcecode type="http"><![CDATA[
HTTP/1.1 200 OK
Content-Type: application/json

{
  "policy_decision_point": "https://pdp.example.com",
  "access_evaluation_endpoint": "https://pdp.example.com/access/v1/evaluation",
  "search_subject_endpoint": "https://pdp.example.com/access/v1/search/subject",
  "search_resource_endpoint": "https://pdp.example.com/access/v1/search/resource"
}
]]></sourcecode></figure>

</section>
<section anchor="pdp-metadata-data-endpoint-validation"><name>Policy Decision Point Metadata Validation</name>

<t>The <spanx style="verb">policy_decision_point</spanx> value returned MUST be identical to the Policy Decision Point identifier value into which the well-known URI string was inserted to create the URL used to retrieve the metadata.  If these values are not identical, the data contained in the response MUST NOT be used.</t>

<t>The recipient MUST validate that any signed metadata was signed by a key belonging to the issuer and that the signature is valid. If the signature does not validate or the issuer is not trusted, the recipient SHOULD treat this as an error condition.</t>

</section>
</section>
</section>
<section anchor="transport"><name>Transport</name>

<t>This specification defines an HTTPS binding using JSON serialization which MUST be implemented by a compliant PDP.</t>

<t>Additional transport bindings (e.g. gRPC or CoAP) MAY be defined in the future in the form of profiles, and MAY be implemented by a PDP.</t>

<section anchor="transport-https-json"><name>HTTPS JSON Binding</name>

<t>All API requests within this binding are made via an HTTPS <spanx style="verb">POST</spanx> request.</t>

<t>Requests MUST include a <spanx style="verb">Content-Type</spanx> header with the value <spanx style="verb">application/json</spanx>, and the request body for each endpoint MUST be a JSON object that conforms to the corresponding request structure, as defined in <xref target="_table-api-endpoints"/>.</t>

<t>A successful response is an HTTPS response with a status code of <spanx style="verb">200</spanx> and a <spanx style="verb">Content-Type</spanx> of <spanx style="verb">application/json</spanx>. Its body is a JSON object that conforms to the corresponding response structure, as defined in <xref target="_table-api-endpoints"/>.</t>

<t>The request URL MUST be the value of the corresponding endpoint parameter, as defined in <xref target="_table-api-endpoints"/>, if it is provided in the Policy Decision Point metadata (<xref target="pdp-metadata-data-endpoint"/>). If the parameter is not provided, the URL SHOULD be formed by appending the default path, as defined in <xref target="_table-api-endpoints"/>, to the PDP's base URL (which is the <spanx style="verb">policy_decision_point</spanx> value from the Policy Decision Point metadata, if available.</t>

<t>The following table provides an overview of the API endpoints defined in this binding:</t>

<texttable title="API Endpoint Overview" anchor="_table-api-endpoints">
      <ttcol align='left'>API Endpoint</ttcol>
      <ttcol align='left'>Default Path</ttcol>
      <ttcol align='left'>Metadata Parameter</ttcol>
      <ttcol align='left'>Request Schema</ttcol>
      <ttcol align='left'>Response Schema</ttcol>
      <c>Access Evaluation</c>
      <c>/access/v1/evaluation</c>
      <c>access_evaluation_endpoint</c>
      <c><xref target="access-evaluation-request"/></c>
      <c><xref target="access-evaluation-response"/></c>
      <c>Access Evaluations</c>
      <c>/access/v1/evaluations</c>
      <c>access_evaluations_endpoint</c>
      <c><xref target="access-evaluations-request"/></c>
      <c><xref target="access-evaluations-response"/></c>
      <c>Subject Search</c>
      <c>/access/v1/search/subject</c>
      <c>search_subject_endpoint</c>
      <c><xref target="subject-search-request"/></c>
      <c><xref target="search-response"/></c>
      <c>Resource Search</c>
      <c>/access/v1/search/resource</c>
      <c>search_resource_endpoint</c>
      <c><xref target="resource-search-request"/></c>
      <c><xref target="search-response"/></c>
      <c>Action Search</c>
      <c>/access/v1/search/action</c>
      <c>search_action_endpoint</c>
      <c><xref target="action-search-request"/></c>
      <c><xref target="search-response"/></c>
</texttable>

<section anchor="transport-https-json-serialization"><name>JSON Serialization</name>

<t>This section specifies the serialization of the information model entities and API schemas defined in this document to the JSON format <xref target="RFC8259"/>. The top-level element of all request and response bodies MUST be a JSON object (<xref section="4" sectionFormat="of" target="RFC8259"/>). Implementations SHOULD also adhere to the security recommendations in JSON Payload Considerations (<xref target="security-json"/>).</t>

<t>The data types defined in this specification are mapped to JSON types as follows:</t>

<dl>
  <dt>Object:</dt>
  <dd>
    <t>Represented as a JSON object (<xref section="4" sectionFormat="of" target="RFC8259"/>). The values of its members can be any valid JSON value as defined in <xref section="3" sectionFormat="of" target="RFC8259"/>, including other objects and arrays, unless specified otherwise.</t>
  </dd>
  <dt>Array:</dt>
  <dd>
    <t>Represented as a JSON array (<xref section="5" sectionFormat="of" target="RFC8259"/>).</t>
  </dd>
  <dt>String:</dt>
  <dd>
    <t>Represented as a JSON string (<xref section="7" sectionFormat="of" target="RFC8259"/>).</t>
  </dd>
  <dt>Integer:</dt>
  <dd>
    <t>Represented as a JSON number (<xref section="6" sectionFormat="of" target="RFC8259"/>). Note the recommendation in <xref target="security-json"/> to not encode values that exceed IEEE 754 double-precision.</t>
  </dd>
  <dt>Boolean:</dt>
  <dd>
    <t>Represented as the JSON literals <spanx style="verb">true</spanx> or <spanx style="verb">false</spanx> (<xref section="3" sectionFormat="of" target="RFC8259"/>).</t>
  </dd>
</dl>

<t>If a required attribute in the information model is omitted, the server MUST return a "Bad Request" error, as defined in <xref target="error-responses"/>.</t>

<t>To ensure forward compatibility, receivers MUST ignore unknown fields present in request or response bodies. Implementations MUST NOT assume a particular ordering of JSON object members.</t>

</section>
<section anchor="error-responses"><name>Error Responses</name>
<t>The following error responses are common to all methods of the Authorization API. The error response is indicated by an HTTPS status code (<xref section="15" sectionFormat="of" target="RFC9110"/>) that indicates error.</t>

<t>The following errors are indicated by the status codes defined below:</t>

<texttable title="HTTPS Error status codes" anchor="_table-error-status-codes">
      <ttcol align='left'>Code</ttcol>
      <ttcol align='left'>Description</ttcol>
      <ttcol align='left'>HTTPS Body Content</ttcol>
      <c>400</c>
      <c>Bad Request</c>
      <c>An error message string</c>
      <c>401</c>
      <c>Unauthorized</c>
      <c>An error message string</c>
      <c>403</c>
      <c>Forbidden</c>
      <c>An error message string</c>
      <c>500</c>
      <c>Internal Error</c>
      <c>An error message string</c>
</texttable>

<t>Note: HTTPS errors are returned by the PDP to indicate an error condition relating to the request or its processing; they are unrelated to the outcome of an authorization decision and are distinct from it. A successful request that results in a "deny" is indicated by a 200 OK status code with a { "decision": false } payload.</t>

<t>To make this concrete:</t>

<t><list style="symbols">
  <t>a <spanx style="verb">401</spanx> HTTPS status code indicates that the PEP did not properly authenticate to the PDP - for example, by omitting a required <spanx style="verb">Authorization</spanx> header, or using an invalid access token.</t>
  <t>the PDP indicates to the PEP that the authorization request is denied by sending a response with a <spanx style="verb">200</spanx> HTTPS status code, along with a payload of <spanx style="verb">{ "decision": false }</spanx>.</t>
</list></t>

</section>
<section anchor="request-identification"><name>Request Identification</name>
<t>All requests to the API MAY have request identifiers to uniquely identify them. The PEP is responsible for generating the request identifier. If present, it is RECOMMENDED to use the HTTPS Header <spanx style="verb">X-Request-ID</spanx> as the request identifier. The value of this header is an arbitrary string. The following non-normative example describes this header:</t>

<figure title="Example HTTPS request with a Request Id Header" anchor="request-id-example"><sourcecode type="http"><![CDATA[
POST /access/v1/evaluation HTTP/1.1
Authorization: Bearer mF_9.B5f-4.1JqM
X-Request-ID: bfe9eb29-ab87-4ca3-be83-a1d5d8305716
]]></sourcecode></figure>

<t>When an Authorization API request contains a request identifier the PDP MUST include a request identifier in the response. It is RECOMMENDED to specify the request identifier using the HTTPS Response header <spanx style="verb">X-Request-ID</spanx>. If the PEP specified a request identifier in the request, the PDP MUST include the same identifier in the response to that request.</t>

<t>The following is a non-normative example of an HTTPS Response with this header:</t>

<figure title="Example HTTPS response with a Request Id Header" anchor="example-response-request-id"><sourcecode type="http"><![CDATA[
HTTP/1.1 OK
Content-Type: application/json
X-Request-ID: bfe9eb29-ab87-4ca3-be83-a1d5d8305716
]]></sourcecode></figure>

</section>
<section anchor="examples-non-normative"><name>Examples (non-normative)</name>

<t>The following is a non-normative example of the HTTPS binding of the Access Evaluation Request:</t>

<figure title="Example of an HTTPS Access Evaluation Request" anchor="example-access-evaluation-request"><sourcecode type="http"><![CDATA[
POST /access/v1/evaluation HTTP/1.1
Host: pdp.example.com
Content-Type: application/json
Authorization: Bearer <myoauthtoken>
X-Request-ID: bfe9eb29-ab87-4ca3-be83-a1d5d8305716

{
  "subject": {
    "type": "user",
    "id": "alice@example.com"
  },
  "resource": {
    "type": "todo",
    "id": "1"
  },
  "action": {
    "name": "can_read"
  },
  "context": {
    "time": "1985-10-26T01:22-07:00"
  }
}
]]></sourcecode></figure>

<t>The following is a non-normative example of an HTTPS Access Evaluation Response:</t>

<figure title="Example of an HTTP Access Evaluation Response" anchor="example-access-evaluation-response"><sourcecode type="http"><![CDATA[
HTTP/1.1 OK
Content-Type: application/json
X-Request-ID: bfe9eb29-ab87-4ca3-be83-a1d5d8305716

{
  "decision": true
}
]]></sourcecode></figure>

<t>The following is a non-normative example of a the HTTPS binding of the Access Evaluations Request:</t>

<figure title="Example of an HTTPS Access Evaluations Request" anchor="example-access-evaluations-request"><sourcecode type="http"><![CDATA[
POST /access/v1/evaluations HTTP/1.1
Host: pdp.example.com
Content-Type: application/json
Authorization: Bearer <myoauthtoken>
X-Request-ID: bfe9eb29-ab87-4ca3-be83-a1d5d8305716

{
  "subject": {
    "type": "user",
    "id": "alice@example.com"
  },
  "context": {
    "time": "2024-05-31T15:22-07:00"
  },
  "action": {
    "name": "can_read"
  },
  "evaluations": [
    {
      "resource": {
        "type": "document",
        "id": "boxcarring.md"
      }
    },
    {
      "resource": {
        "type": "document",
        "id": "subject-search.md"
      }
    },
    {
      "action": {
        "name": "can_edit"
      },
      "resource": {
        "type": "document",
        "id": "resource-search.md"
      }
    }
  ]
}
]]></sourcecode></figure>

<t>The following is a non-normative example of an HTTPS Access Evaluations Response:</t>

<figure title="Example of an HTTPS Access Evaluations Response" anchor="example-access-evaluations-response"><sourcecode type="http"><![CDATA[
HTTP/1.1 OK
Content-Type: application/json
X-Request-ID: bfe9eb29-ab87-4ca3-be83-a1d5d8305716

{
  "evaluations": [
    {
      "decision": true
    },
    {
      "decision": false,
      "context": {
        "error": {
          "status": 404,
          "message": "Resource not found"
        }
      }
    },
    {
      "decision": false,
      "context": {
        "reason": "Subject is a viewer of the resource"
      }
    }
  ]
}
]]></sourcecode></figure>

<t>The following is a non-normative example of the HTTPS binding of the Subject Search Request:</t>

<figure title="Example of an HTTPS Subject Search Request" anchor="example-subject-search-request"><sourcecode type="http"><![CDATA[
POST /access/v1/search/subject HTTP/1.1
Host: pdp.example.com
Content-Type: application/json
Authorization: Bearer <myoauthtoken>
X-Request-ID: bfe9eb29-ab87-4ca3-be83-a1d5d8305716

{
  "subject": {
    "type": "user"
  },
  "action": {
    "name": "can_read"
  },
  "resource": {
    "type": "account",
    "id": "123"
  }
}
]]></sourcecode></figure>

<t>The following is a non-normative example of an HTTPS Subject Search Response:</t>

<figure title="Example of an HTTPS Subject Search Response" anchor="example-subject-search-response"><sourcecode type="http"><![CDATA[
HTTP/1.1 OK
Content-Type: application/json
X-Request-ID: bfe9eb29-ab87-4ca3-be83-a1d5d8305716

{
  "page": {
    "next_token": "a3M9NDU2O3N6PTI="
  },
  "results": [
    {
      "type": "user",
      "id": "alice@example.com"
    },
    {
      "type": "user",
      "id": "bob@example.com"
    }
  ]
}
]]></sourcecode></figure>

<t>The following is a non-normative example of the HTTPS binding of the Resource Search Request:</t>

<figure title="Example of an HTTPS Resource Search Request" anchor="example-resource-search-request"><sourcecode type="http"><![CDATA[
POST /access/v1/search/resource HTTP/1.1
Host: pdp.example.com
Content-Type: application/json
Authorization: Bearer <myoauthtoken>
X-Request-ID: bfe9eb29-ab87-4ca3-be83-a1d5d8305716

{
  "subject": {
    "type": "user",
    "id": "alice@example.com"
  },
  "action": {
    "name": "can_read"
  },
  "resource": {
    "type": "account"
  }
}
]]></sourcecode></figure>

<t>The following is a non-normative example of an HTTPS Resource Search Response:</t>

<figure title="Example of an HTTPS Resource Search Response" anchor="example-resource-search-response"><sourcecode type="http"><![CDATA[
HTTP/1.1 OK
Content-Type: application/json
X-Request-ID: bfe9eb29-ab87-4ca3-be83-a1d5d8305716

{
  "page": {
    "next_token": "a3M9NDU2O3N6PTI="
  },
  "results": [
    {
      "type": "account",
      "id": "123"
    },
    {
      "type": "account",
      "id": "456"
    }
  ]
}
]]></sourcecode></figure>

<t>The following is a non-normative example of the HTTPS binding of the Action Search Request:</t>

<figure title="Example of an HTTPS Action Search Request" anchor="example-action-search-request"><sourcecode type="http"><![CDATA[
POST /access/v1/search/action HTTP/1.1
Host: pdp.example.com
Content-Type: application/json
Authorization: Bearer <myoauthtoken>
X-Request-ID: bfe9eb29-ab87-4ca3-be83-a1d5d8305716

{
  "subject": {
    "type": "user",
    "id": "alice@example.com"
  },
  "resource": {
    "type": "account",
    "id": "123"
  },
  "context": {
    "time": "2024-10-26T01:22-07:00"
  }
}
]]></sourcecode></figure>

<t>The following is a non-normative example of an HTTPS Action Search Response:</t>

<figure title="Example of an HTTPS Action Search Response" anchor="example-action-search-response"><sourcecode type="http"><![CDATA[
HTTP/1.1 OK
Content-Type: application/json
X-Request-ID: bfe9eb29-ab87-4ca3-be83-a1d5d8305716

{
  "page": {
    "next_token": "a3M9NDU2O3N6PTI="
  },
  "results": [
    {
      "name": "can_read"
    },
    {
      "name": "can_write"
    }
  ]
}
]]></sourcecode></figure>

</section>
</section>
</section>
<section anchor="Security"><name>Security Considerations</name>

<section anchor="security-integrity-confidentiality"><name>Communication Integrity and Confidentiality</name>

<t>In the ABAC architecture, the PEP-PDP connection is the most sensitive one and needs to be secured to guarantee:</t>

<t><list style="symbols">
  <t>Integrity</t>
  <t>Confidentiality</t>
</list></t>

<t>As a result, the connection between the PEP and the PDP MUST be secured using the most adequate means given the choice of transport (e.g. TLS for HTTP REST).</t>

</section>
<section anchor="security-confidentiality-authn"><name>Policy Confidentiality and Sender Authentication</name>

<t>Additionally, the PDP SHOULD authenticate the calling PEP. There are several ways authentication can be established. These ways are out of scope of this specification. They MAY include:</t>

<t><list style="symbols">
  <t>Mutual TLS</t>
  <t>OAuth-based authentication</t>
  <t>API key</t>
</list></t>

<t>The choice and strength of either mechanism is not in scope.</t>

<t>Authenticating the PEP allows the PDP to avoid common attacks (such as DoS - see below) and/or reveal its internal policies. A malicious actor could craft a large number of requests to try and understand what policies the PDP is configured with. Requesting a PEP be authenticated mitigates that risk.</t>

</section>
<section anchor="security-sender-authentn-fail"><name>Sender Authentication Failure</name>

<t>If the protected resource request does not include the proper authentication credentials, or does not have a valid authentication scheme proof that enables access to the protected resource, the resource server MUST respond with a 401 HTTP status code and SHOULD include the HTTP "WWW-Authenticate" response header field; it MAY include it in response to other conditions as well. The "WWW-Authenticate" header field uses the framework defined by HTTP/1.1 <xref target="RFC2617"/> and indicates the expected authentication scheme as well as the realm that has authority for it.</t>

<t>The following is a non-normative example response:</t>

<t><spanx style="verb">http
HTTP/1.1 401 Unauthorized
WWW-Authenticate: Bearer realm="https://as.example.com"
</spanx></t>

</section>
<section anchor="security-trust"><name>Trust</name>

<t>In ABAC, there are occasionally conversations around the trust between PEP and PDP: how can the PDP trust that the PEP is sending the correct values? The architecture of this model assumes the PDP must trust the PEP, as the PEP is ultimately responsible for enforcing the decision the PDP produces.</t>

</section>
<section anchor="security-json"><name>JSON Payload Considerations</name>

<t>To ensure the unambiguous interpretation of JSON payloads, implementations SHOULD process and generate JSON payloads in a manner consistent with the I-JSON profile (<xref target="RFC7493"/>). In particular, implementations SHOULD ensure that:</t>

<t><list style="symbols">
  <t>JSON text is encoded as UTF-8, and strings do not contain invalid Unicode sequences such as unpaired surrogates (<xref section="2.1" sectionFormat="of" target="RFC7493"/>).</t>
  <t>Numeric values do not exceed the magnitude or precision supported by IEEE 754 double-precision (<xref section="2.2" sectionFormat="of" target="RFC7493"/>).</t>
  <t>Member names within a JSON object are unique after processing escape characters (<xref section="2.3" sectionFormat="of" target="RFC7493"/>).</t>
</list></t>

<t>To avoid ambiguity between a property that is absent and one that is present with a null value, properties with a value of null SHOULD be omitted from JSON objects.</t>

</section>
<section anchor="security-authorization-response-integrity"><name>Authorization Response Integrity</name>

<t>The PDP MAY choose to sign its authorization response, ensuring the PEP can verify the integrity of the data it receives. This practice is valuable for maintaining trust in the authorization process.</t>

<t>The PEP can ensure that the authorization response is not tampered with by verifying the signature of the authorization decision if it is signed. It ensures response accuracy and completeness.</t>

<t>TLS effectively protects data in transit for a direct, point-to-point connection but does not guarantee data integrity for the full connection path between the PEP and the PDP if there are intermediaries, such as proxies or gateways.</t>

<t>Digital signatures offer important advantages in this context. They provide non-repudiation, allowing verification that the response genuinely originated from the PDP. Moreover, digital signatures ensure the integrity of the authorization response, confirming that its contents have not been altered in transit.</t>

</section>
<section anchor="security-avail-dos"><name>Availability &amp; Denial of Service</name>

<t>The PDP SHOULD apply reasonable protections to avoid common attacks tied to request payload size, the number of requests, invalid JSON, nested JSON attacks, or memory consumption. Rate limiting is one such way to address such issues.</t>

</section>
<section anchor="security-metadata-sig"><name>Differences between Unsigned and Signed Metadata</name>

<t>Unsigned metadata is integrity protected by use of TLS at the site where it is hosted. This means that its security is dependent upon the Internet Public Key Infrastructure (PKI) <xref target="RFC9525"/>. Signed metadata is additionally integrity protected by the JWS signature applied by the issuer, which is not dependent upon the Internet PKI.
When using unsigned metadata, the party issuing the metadata is the PDP itself. Whereas, when using signed metadata, the party issuing the metadata is represented by the <spanx style="verb">iss</spanx> (issuer) claim in the signed metadata. When using signed metadata, applications can make trust decisions based on the issuer that performed the signing -- information that is not available when using unsigned metadata. How these trust decisions are made is out of scope for this specification.</t>

</section>
<section anchor="security-metadata-caching"><name>Metadata Caching</name>

<t>Policy Decision Point metadata is retrieved using an HTTP GET request, as specified in <xref target="pdp-metadata-access-request"/>. Normal HTTP caching behaviors apply, meaning that the GET may retrieve a cached copy of the content, rather than the latest copy. Implementations should utilize HTTP caching directives such as Cache-Control with max-age, as defined in <xref target="RFC7234"/>, to enable caching of retrieved metadata for appropriate time periods.</t>

</section>
</section>
<section anchor="iana"><name>IANA Considerations</name>

<t>This specification requests IANA to take four actions: the creation of a new protocol registry group named 'AuthZEN', the establishment of two new registries within this group ('AuthZEN Policy Decision Point Metadata' and 'AuthZEN Policy Decision Point Capabilities'), the registration of a new Well-Known URI ('authzen-configuration'), and the registration of a new URN sub-namespace ('authzen').</t>

<t>The following registration procedure is used for the registries established by this specification.</t>

<t>Values are registered on a Specification Required <xref target="RFC8126"/> basis after a two-week review period on the openid-specs-authzen@lists.openid.net mailing list, following review and approval by one or more Designated Experts. However, to allow for the allocation of values prior to publication of the final version of a specification, the Designated Experts may approve registration once they are satisfied that the specification will be completed and published. However, if the specification is not completed and published in a timely manner, as determined by the Designated Experts, the Designated Experts may request that IANA withdraw the registration.</t>

<t>Registration requests sent to the mailing list for review should use an appropriate subject (e.g., "Request to register AuthZEN Policy Decision Point Metadata: example").</t>

<t>Within the review period, the Designated Experts will either approve or deny the registration request, communicating this decision to the review list and IANA. Denials should include an explanation and, if applicable, suggestions as to how to make the request successful. The IANA escalation process is followed when the Designated Experts are not responsive within 14 days.</t>

<t>Criteria that should be applied by the Designated Experts includes determining whether the proposed registration duplicates existing functionality, determining whether it is likely to be of general applicability or whether it is useful only for a single application, and whether the registration makes sense.</t>

<t>IANA must only accept registry updates from the Designated Experts and should direct all requests for registration to the review mailing list.</t>

<t>It is suggested that multiple Designated Experts be appointed who are able to represent the perspectives of different applications using this specification, in order to enable broadly-informed review of registration decisions. In cases where a registration decision could be perceived as creating a conflict of interest for a particular Expert, that Expert should defer to the judgment of the other Experts.</t>

<t>The reason for the use of the mailing list is to enable public review of registration requests, enabling both Designated Experts and other interested parties to provide feedback on proposed registrations. The reason to allow the Designated Experts to allocate values prior to publication as a final specification is to enable giving authors of specifications proposing registrations the benefit of review by the Designated Experts before the specification is completely done, so that if problems are identified, the authors can iterate and fix them before publication of the final specification.</t>

<section anchor="iana-pdp-metadata-registry"><name>AuthZEN Policy Decision Point Metadata Registry</name>

<t>This specification asks IANA to establish the "AuthZEN Policy Decision Point Metadata" registry under the registry group "AuthZEN Parameters". The registry records the Policy Decision Point metadata parameter and a reference to the specification that defines it.</t>

<section anchor="registry-definition"><name>Registry Definition</name>

<t>Registry Name: AuthZEN Policy Decision Point Metadata</t>

<t>Registration Policy: Specification Required per <xref target="RFC8126"/></t>

<t>Reference: [This Document]</t>

</section>
<section anchor="iana-pdp-metadata-template"><name>Registration Template</name>

<dl>
  <dt>Metadata Name:</dt>
  <dd>
    <t>The name requested (e.g., "resource"). This name is case-sensitive. Names may not match other registered names in a case-insensitive manner unless the Designated Experts state that there is a compelling reason to allow an exception.</t>
  </dd>
  <dt>Metadata Description:</dt>
  <dd>
    <t>Brief description of the metadata (e.g., "Resource identifier URL").</t>
  </dd>
  <dt>Change Controller:</dt>
  <dd>
    <t>For IETF stream RFCs, list the "IETF". For others, give the name of the responsible party. Other details (e.g., postal address, email address, home page URI) may also be included.</t>
  </dd>
  <dt>Specification Document(s):</dt>
  <dd>
    <t>Reference to the document or documents that specify the parameter, preferably including URIs that can be used to retrieve copies of the documents. An indication of the relevant sections may also be included but is not required.</t>
  </dd>
</dl>

</section>
<section anchor="iana-pdp-metadata-initial"><name>Initial Registrations</name>

<dl>
  <dt>Metadata Name:</dt>
  <dd>
    <t><spanx style="verb">policy_decision_point</spanx></t>
  </dd>
  <dt>Metadata Description:</dt>
  <dd>
    <t>Base URL of the Policy Decision Point</t>
  </dd>
  <dt>Change Controller:</dt>
  <dd>
    <t>OpenID Foundation AuthZEN Working Group</t>
  </dd>
  <dt/>
  <dd>
    <t>mailto:openid-specs-authzen@lists.openid.net</t>
  </dd>
  <dt>Specification Document(s):</dt>
  <dd>
    <t><xref target="pdp-metadata-data-endpoint"/> of [This Document]</t>
  </dd>
  <dt>Metadata Name:</dt>
  <dd>
    <t><spanx style="verb">access_evaluation_endpoint</spanx></t>
  </dd>
  <dt>Metadata Description:</dt>
  <dd>
    <t>URL of the Policy Decision Point's Access Evaluation API endpoint</t>
  </dd>
  <dt>Change Controller:</dt>
  <dd>
    <t>OpenID Foundation AuthZEN Working Group</t>
  </dd>
  <dt/>
  <dd>
    <t>mailto:openid-specs-authzen@lists.openid.net</t>
  </dd>
  <dt>Specification Document(s):</dt>
  <dd>
    <t><xref target="pdp-metadata-data-endpoint"/> of [This Document]</t>
  </dd>
  <dt>Metadata Name:</dt>
  <dd>
    <t><spanx style="verb">access_evaluations_endpoint</spanx></t>
  </dd>
  <dt>Metadata Description:</dt>
  <dd>
    <t>URL of the Policy Decision Point's Access Evaluations API endpoint</t>
  </dd>
  <dt>Change Controller:</dt>
  <dd>
    <t>OpenID Foundation AuthZEN Working Group</t>
  </dd>
  <dt/>
  <dd>
    <t>mailto:openid-specs-authzen@lists.openid.net</t>
  </dd>
  <dt>Specification Document(s):</dt>
  <dd>
    <t><xref target="pdp-metadata-data-endpoint"/> of [This Document]</t>
  </dd>
  <dt>Metadata Name:</dt>
  <dd>
    <t><spanx style="verb">search_subject_endpoint</spanx></t>
  </dd>
  <dt>Metadata Description:</dt>
  <dd>
    <t>URL of the Policy Decision Point's Search API endpoint for Subject entities</t>
  </dd>
  <dt>Change Controller:</dt>
  <dd>
    <t>OpenID Foundation AuthZEN Working Group</t>
  </dd>
  <dt/>
  <dd>
    <t>mailto:openid-specs-authzen@lists.openid.net</t>
  </dd>
  <dt>Specification Document(s):</dt>
  <dd>
    <t><xref target="pdp-metadata-data-endpoint"/> of [This Document]</t>
  </dd>
  <dt>Metadata Name:</dt>
  <dd>
    <t><spanx style="verb">search_resource_endpoint</spanx></t>
  </dd>
  <dt>Metadata Description:</dt>
  <dd>
    <t>URL of the Policy Decision Point's Search API endpoint for Resource entities</t>
  </dd>
  <dt>Change Controller:</dt>
  <dd>
    <t>OpenID Foundation AuthZEN Working Group</t>
  </dd>
  <dt/>
  <dd>
    <t>mailto:openid-specs-authzen@lists.openid.net</t>
  </dd>
  <dt>Specification Document(s):</dt>
  <dd>
    <t><xref target="pdp-metadata-data-endpoint"/> of [This Document]</t>
  </dd>
  <dt>Metadata Name:</dt>
  <dd>
    <t><spanx style="verb">search_action_endpoint</spanx></t>
  </dd>
  <dt>Metadata Description:</dt>
  <dd>
    <t>URL of the Policy Decision Point's Search API endpoint for Action entities</t>
  </dd>
  <dt>Change Controller:</dt>
  <dd>
    <t>OpenID Foundation AuthZEN Working Group</t>
  </dd>
  <dt/>
  <dd>
    <t>mailto:openid-specs-authzen@lists.openid.net</t>
  </dd>
  <dt>Specification Document(s):</dt>
  <dd>
    <t><xref target="pdp-metadata-data-endpoint"/> of [This Document]</t>
  </dd>
  <dt>Metadata Name:</dt>
  <dd>
    <t><spanx style="verb">capabilities</spanx></t>
  </dd>
  <dt>Metadata Description:</dt>
  <dd>
    <t>Array of URNs describing specific Policy Decision Point capabilities</t>
  </dd>
  <dt>Change Controller:</dt>
  <dd>
    <t>OpenID Foundation AuthZEN Working Group</t>
  </dd>
  <dt/>
  <dd>
    <t>mailto:openid-specs-authzen@lists.openid.net</t>
  </dd>
  <dt>Specification Document(s):</dt>
  <dd>
    <t><xref target="pdp-metadata-data-capabilities"/> of [This Document]</t>
  </dd>
  <dt>Metadata Name:</dt>
  <dd>
    <t><spanx style="verb">signed_metadata</spanx></t>
  </dd>
  <dt>Metadata Description:</dt>
  <dd>
    <t>JWT containing metadata parameters about the protected resource as claims.</t>
  </dd>
  <dt>Change Controller:</dt>
  <dd>
    <t>OpenID Foundation AuthZEN Working Group</t>
  </dd>
  <dt/>
  <dd>
    <t>mailto:openid-specs-authzen@lists.openid.net</t>
  </dd>
  <dt>Specification Document(s):</dt>
  <dd>
    <t><xref target="pdp-metadata-data-sig"/> of [This Document]</t>
  </dd>
</dl>

</section>
</section>
<section anchor="iana-wk-registry"><name>Well-Known URI Registry</name>

<t>This specification asks IANA to register the well-known URI defined in <xref target="pdp-metadata-access"/> in the IANA "Well-Known URIs" registry <xref target="IANA.well-known-uris"/>.</t>

<section anchor="iana-wk-contents"><name>Registry Contents</name>

<dl>
  <dt>URI Suffix:</dt>
  <dd>
    <t>authzen-configuration</t>
  </dd>
  <dt>Reference:</dt>
  <dd>
    <t>[This Document]</t>
  </dd>
  <dt>Status:</dt>
  <dd>
    <t>permanent</t>
  </dd>
  <dt>Change Controller:</dt>
  <dd>
    <t>OpenID Foundation AuthZEN Working Group</t>
  </dd>
  <dt/>
  <dd>
    <t>mailto:openid-specs-authzen@lists.openid.net</t>
  </dd>
  <dt>Related Information:</dt>
  <dd>
    <t>(none)</t>
  </dd>
</dl>

</section>
</section>
<section anchor="iana-pdp-capabilities-registry"><name>AuthZEN Policy Decision Point Capabilities Registry</name>

<t>This specification asks IANA to establish the "AuthZEN Policy Decision Point Capabilities" registry under the registry group "AuthZEN Parameters". The registry contains PDP-specific capabilities or features. These URNs are intended to be used in Policy Decision Point metadata discovery documents (as described in <xref target="pdp-metadata"/>) to allow a PEP to determine the supported functionality of a given PDP instance. The content of this registry will be specified by AuthZEN-compliant PDP vendors that want to declare interoperable capabilities.</t>

<section anchor="iana-pdp-capabilities-definition"><name>Registry Definition</name>

<t>Registry Name: AuthZEN Policy Decision Point Capabilities</t>

<t>Registration Policy: Specification Required per <xref target="RFC8126"/></t>

<t>Reference: [This Document]</t>

</section>
<section anchor="iana-pdp-capabilities-template"><name>Registration Template</name>

<dl>
  <dt>Capability Name:</dt>
  <dd>
    <t>The name of the capability. This name MUST begin with the colon (":") character. This name is case-sensitive. Names may not match other registered names in a case-insensitive manner unless the Designated Experts state that there is a compelling reason to allow an exception.</t>
  </dd>
</dl>

<t>Capability URN: The URN of the AuthZEN Policy Decision Point Capability.</t>

<dl>
  <dt>Capability Description:</dt>
  <dd>
    <t>Brief description of the capability.</t>
  </dd>
  <dt>Change Controller:</dt>
  <dd>
    <t>OpenID Foundation AuthZEN Working Group</t>
  </dd>
  <dt/>
  <dd>
    <t>mailto:openid-specs-authzen@lists.openid.net</t>
  </dd>
  <dt>Specification Document(s):</dt>
  <dd>
    <t>Reference to the document or documents that specify the parameter, preferably including URIs that can be used to retrieve copies of the documents. An indication of the relevant sections may also be included but is not required.</t>
  </dd>
</dl>

</section>
</section>
<section anchor="iana-urn-namespace"><name>Registration of "authzen" URN Sub-namespace</name>

<t>This specification asks IANA to register a new URN sub-namespace within the "IETF URN Sub-namespace for Registered Protocol Parameter Identifiers" registry defined in <xref target="RFC3553"/>.</t>

<t>Registry Name: authzen</t>

<t>Specification: [This Document]</t>

<t>Repository: "AuthZEN Policy Decision Point Capabilities" registry (<xref target="iana-pdp-capabilities-registry"/> of [This Document])</t>

<t>Index value: Sub-parameters MUST be specified in UTF-8, using standard URI encoding where necessary.</t>

</section>
</section>


  </middle>

  <back>


<references title='References' anchor="sec-combined-references">

    <references title='Normative References' anchor="sec-normative-references">



<reference anchor="RFC6749">
  <front>
    <title>The OAuth 2.0 Authorization Framework</title>
    <author fullname="D. Hardt" initials="D." role="editor" surname="Hardt"/>
    <date month="October" year="2012"/>
    <abstract>
      <t>The OAuth 2.0 authorization framework enables a third-party application to obtain limited access to an HTTP service, either on behalf of a resource owner by orchestrating an approval interaction between the resource owner and the HTTP service, or by allowing the third-party application to obtain access on its own behalf. This specification replaces and obsoletes the OAuth 1.0 protocol described in RFC 5849. [STANDARDS-TRACK]</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="6749"/>
  <seriesInfo name="DOI" value="10.17487/RFC6749"/>
</reference>
<reference anchor="RFC8259">
  <front>
    <title>The JavaScript Object Notation (JSON) Data Interchange Format</title>
    <author fullname="T. Bray" initials="T." role="editor" surname="Bray"/>
    <date month="December" year="2017"/>
    <abstract>
      <t>JavaScript Object Notation (JSON) is a lightweight, text-based, language-independent data interchange format. It was derived from the ECMAScript Programming Language Standard. JSON defines a small set of formatting rules for the portable representation of structured data.</t>
      <t>This document removes inconsistencies with other specifications of JSON, repairs specification errors, and offers experience-based interoperability guidance.</t>
    </abstract>
  </front>
  <seriesInfo name="STD" value="90"/>
  <seriesInfo name="RFC" value="8259"/>
  <seriesInfo name="DOI" value="10.17487/RFC8259"/>
</reference>
<reference anchor="RFC8615">
  <front>
    <title>Well-Known Uniform Resource Identifiers (URIs)</title>
    <author fullname="M. Nottingham" initials="M." surname="Nottingham"/>
    <date month="May" year="2019"/>
    <abstract>
      <t>This memo defines a path prefix for "well-known locations", "/.well-known/", in selected Uniform Resource Identifier (URI) schemes.</t>
      <t>In doing so, it obsoletes RFC 5785 and updates the URI schemes defined in RFC 7230 to reserve that space. It also updates RFC 7595 to track URI schemes that support well-known URIs in their registry.</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="8615"/>
  <seriesInfo name="DOI" value="10.17487/RFC8615"/>
</reference>
<reference anchor="RFC3553">
  <front>
    <title>An IETF URN Sub-namespace for Registered Protocol Parameters</title>
    <author fullname="M. Mealling" initials="M." surname="Mealling"/>
    <author fullname="L. Masinter" initials="L." surname="Masinter"/>
    <author fullname="T. Hardie" initials="T." surname="Hardie"/>
    <author fullname="G. Klyne" initials="G." surname="Klyne"/>
    <date month="June" year="2003"/>
    <abstract>
      <t>This document describes a new sub-delegation for the 'ietf' URN namespace for registered protocol items. The 'ietf' URN namespace is defined in RFC 2648 as a root for persistent URIs that refer to IETF- defined resources. This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
    </abstract>
  </front>
  <seriesInfo name="BCP" value="73"/>
  <seriesInfo name="RFC" value="3553"/>
  <seriesInfo name="DOI" value="10.17487/RFC3553"/>
</reference>
<reference anchor="RFC9110">
  <front>
    <title>HTTP Semantics</title>
    <author fullname="R. Fielding" initials="R." role="editor" surname="Fielding"/>
    <author fullname="M. Nottingham" initials="M." role="editor" surname="Nottingham"/>
    <author fullname="J. Reschke" initials="J." role="editor" surname="Reschke"/>
    <date month="June" year="2022"/>
    <abstract>
      <t>The Hypertext Transfer Protocol (HTTP) is a stateless application-level protocol for distributed, collaborative, hypertext information systems. This document describes the overall architecture of HTTP, establishes common terminology, and defines aspects of the protocol that are shared by all versions. In this definition are core protocol elements, extensibility mechanisms, and the "http" and "https" Uniform Resource Identifier (URI) schemes.</t>
      <t>This document updates RFC 3864 and obsoletes RFCs 2818, 7231, 7232, 7233, 7235, 7538, 7615, 7694, and portions of 7230.</t>
    </abstract>
  </front>
  <seriesInfo name="STD" value="97"/>
  <seriesInfo name="RFC" value="9110"/>
  <seriesInfo name="DOI" value="10.17487/RFC9110"/>
</reference>

<reference anchor="XACML" target="https://www.oasis-open.org/committees/xacml/repository/cs-xacml-specification-1.1.pdf">
  <front>
    <title>eXtensible Access Control Markup Language (XACML) Version 1.1</title>
    <author initials="S." surname="Godik" fullname="Simon Godik" role="editor">
      <organization>Overxeer</organization>
    </author>
    <author initials="T. M." surname="(Ed.)" fullname="Tim Moses (Ed.)" role="editor">
      <organization>Entrust</organization>
    </author>
    <date year="2006"/>
  </front>
</reference>


    </references>

    <references title='Informative References' anchor="sec-informative-references">



<reference anchor="RFC7519">
  <front>
    <title>JSON Web Token (JWT)</title>
    <author fullname="M. Jones" initials="M." surname="Jones"/>
    <author fullname="J. Bradley" initials="J." surname="Bradley"/>
    <author fullname="N. Sakimura" initials="N." surname="Sakimura"/>
    <date month="May" year="2015"/>
    <abstract>
      <t>JSON Web Token (JWT) is a compact, URL-safe means of representing claims to be transferred between two parties. The claims in a JWT are encoded as a JSON object that is used as the payload of a JSON Web Signature (JWS) structure or as the plaintext of a JSON Web Encryption (JWE) structure, enabling the claims to be digitally signed or integrity protected with a Message Authentication Code (MAC) and/or encrypted.</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="7519"/>
  <seriesInfo name="DOI" value="10.17487/RFC7519"/>
</reference>
<reference anchor="RFC7515">
  <front>
    <title>JSON Web Signature (JWS)</title>
    <author fullname="M. Jones" initials="M." surname="Jones"/>
    <author fullname="J. Bradley" initials="J." surname="Bradley"/>
    <author fullname="N. Sakimura" initials="N." surname="Sakimura"/>
    <date month="May" year="2015"/>
    <abstract>
      <t>JSON Web Signature (JWS) represents content secured with digital signatures or Message Authentication Codes (MACs) using JSON-based data structures. Cryptographic algorithms and identifiers for use with this specification are described in the separate JSON Web Algorithms (JWA) specification and an IANA registry defined by that specification. Related encryption capabilities are described in the separate JSON Web Encryption (JWE) specification.</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="7515"/>
  <seriesInfo name="DOI" value="10.17487/RFC7515"/>
</reference>
<reference anchor="RFC8126">
  <front>
    <title>Guidelines for Writing an IANA Considerations Section in RFCs</title>
    <author fullname="M. Cotton" initials="M." surname="Cotton"/>
    <author fullname="B. Leiba" initials="B." surname="Leiba"/>
    <author fullname="T. Narten" initials="T." surname="Narten"/>
    <date month="June" year="2017"/>
    <abstract>
      <t>Many protocols make use of points of extensibility that use constants to identify various protocol parameters. To ensure that the values in these fields do not have conflicting uses and to promote interoperability, their allocations are often coordinated by a central record keeper. For IETF protocols, that role is filled by the Internet Assigned Numbers Authority (IANA).</t>
      <t>To make assignments in a given registry prudently, guidance describing the conditions under which new values should be assigned, as well as when and how modifications to existing values can be made, is needed. This document defines a framework for the documentation of these guidelines by specification authors, in order to assure that the provided guidance for the IANA Considerations is clear and addresses the various issues that are likely in the operation of a registry.</t>
      <t>This is the third edition of this document; it obsoletes RFC 5226.</t>
    </abstract>
  </front>
  <seriesInfo name="BCP" value="26"/>
  <seriesInfo name="RFC" value="8126"/>
  <seriesInfo name="DOI" value="10.17487/RFC8126"/>
</reference>
<reference anchor="IANA.well-known-uris" target="https://www.iana.org/assignments/well-known-uris">
  <front>
    <title>Well-Known URIs</title>
    <author>
      <organization>IANA</organization>
    </author>
  </front>
</reference>
<reference anchor="RFC9525">
  <front>
    <title>Service Identity in TLS</title>
    <author fullname="P. Saint-Andre" initials="P." surname="Saint-Andre"/>
    <author fullname="R. Salz" initials="R." surname="Salz"/>
    <date month="November" year="2023"/>
    <abstract>
      <t>Many application technologies enable secure communication between two entities by means of Transport Layer Security (TLS) with Internet Public Key Infrastructure using X.509 (PKIX) certificates. This document specifies procedures for representing and verifying the identity of application services in such interactions.</t>
      <t>This document obsoletes RFC 6125.</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="9525"/>
  <seriesInfo name="DOI" value="10.17487/RFC9525"/>
</reference>
<reference anchor="RFC7234">
  <front>
    <title>Hypertext Transfer Protocol (HTTP/1.1): Caching</title>
    <author fullname="R. Fielding" initials="R." role="editor" surname="Fielding"/>
    <author fullname="M. Nottingham" initials="M." role="editor" surname="Nottingham"/>
    <author fullname="J. Reschke" initials="J." role="editor" surname="Reschke"/>
    <date month="June" year="2014"/>
    <abstract>
      <t>The Hypertext Transfer Protocol (HTTP) is a stateless \%application- level protocol for distributed, collaborative, hypertext information systems. This document defines HTTP caches and the associated header fields that control cache behavior or indicate cacheable response messages.</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="7234"/>
  <seriesInfo name="DOI" value="10.17487/RFC7234"/>
</reference>
<reference anchor="RFC2617">
  <front>
    <title>HTTP Authentication: Basic and Digest Access Authentication</title>
    <author fullname="J. Franks" initials="J." surname="Franks"/>
    <author fullname="P. Hallam-Baker" initials="P." surname="Hallam-Baker"/>
    <author fullname="J. Hostetler" initials="J." surname="Hostetler"/>
    <author fullname="S. Lawrence" initials="S." surname="Lawrence"/>
    <author fullname="P. Leach" initials="P." surname="Leach"/>
    <author fullname="A. Luotonen" initials="A." surname="Luotonen"/>
    <author fullname="L. Stewart" initials="L." surname="Stewart"/>
    <date month="June" year="1999"/>
    <abstract>
      <t>This document provides the specification for HTTP's authentication framework, the original Basic authentication scheme and a scheme based on cryptographic hashes, referred to as "Digest Access Authentication". [STANDARDS-TRACK]</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="2617"/>
  <seriesInfo name="DOI" value="10.17487/RFC2617"/>
</reference>
<reference anchor="NIST.SP.800-162" target="https://nvlpubs.nist.gov/nistpubs/SpecialPublications/NIST.SP.800-162.pdf">
  <front>
    <title>Guide to Attribute Based Access Control (ABAC) Definition and Considerations</title>
    <author fullname="Vincent C. Hu" surname="Hu">
      <organization>Information Technology Laboratory</organization>
    </author>
    <author fullname="David Ferraiolo" surname="Ferraiolo">
      <organization>Information Technology Laboratory</organization>
    </author>
    <author fullname="Rick Kuhn" surname="Kuhn">
      <organization>Information Technology Laboratory</organization>
    </author>
    <author fullname="Adam Schnitzer" surname="Schnitzer">
      <organization>Information Technology Laboratory</organization>
    </author>
    <author fullname="Kenneth Sandlin" surname="Sandlin">
      <organization>Information Technology Laboratory</organization>
    </author>
    <author fullname="Robert Miller" surname="Miller">
      <organization>Information Technology Laboratory</organization>
    </author>
    <author fullname="Karen Scarfone" surname="Scarfone">
      <organization>Information Technology Laboratory</organization>
    </author>
    <author>
      <organization abbrev="NIST">National Institute of Standards and Technology</organization>
      <address>
        <postal>
          <country>US</country>
          <city>Gaithersburg</city>
        </postal>
      </address>
    </author>
    <date month="January" year="2014"/>
  </front>
  <seriesInfo name="NIST Special Publications (General)" value="800-162"/>
  <seriesInfo name="DOI" value="10.6028/NIST.SP.800-162"/>
</reference>
<reference anchor="RFC7493">
  <front>
    <title>The I-JSON Message Format</title>
    <author fullname="T. Bray" initials="T." role="editor" surname="Bray"/>
    <date month="March" year="2015"/>
    <abstract>
      <t>I-JSON (short for "Internet JSON") is a restricted profile of JSON designed to maximize interoperability and increase confidence that software can process it successfully with predictable results.</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="7493"/>
  <seriesInfo name="DOI" value="10.17487/RFC7493"/>
</reference>



    </references>

</references>


<?line 2030?>

<section anchor="terminology"><name>Terminology</name>
<dl>
  <dt>Subject:</dt>
  <dd>
    <t>The user or machine principal for whom an authorization decision is being requested.</t>
  </dd>
  <dt>Resource:</dt>
  <dd>
    <t>The target of the request; the resource about which the authorization decision is being made.</t>
  </dd>
  <dt>Action:</dt>
  <dd>
    <t>The operation the Subject is attempting on the Resource, in the context an authorization decision.</t>
  </dd>
  <dt>Context:</dt>
  <dd>
    <t>When present in a request, the environmental or contextual attributes for this request. When present in a response, additional contextual information associated with a decision or search result.</t>
  </dd>
  <dt>Decision:</dt>
  <dd>
    <t>The value of the evaluation decision made by the PDP: <spanx style="verb">true</spanx> for "allow", <spanx style="verb">false</spanx> for "deny".</t>
  </dd>
  <dt>PDP:</dt>
  <dd>
    <t>Policy Decision Point. The component or system that provides authorization decisions over the network interface defined here as the Authorization API.</t>
  </dd>
  <dt>PEP:</dt>
  <dd>
    <t>Policy Enforcement Point. The component or system that acts as a client to the PDP. The most common use case for a PEP is to request decisions and enforce access based on the decisions obtained from the PDP. It can also request decisions or search results for other purposes, such as determining which resources a subject may have access to.</t>
  </dd>
</dl>

</section>
<section anchor="Acknowledgements"><name>Acknowledgements</name>

<t>This template uses extracts from templates written by
<contact fullname="Pekka Savola"/>, <contact fullname="Elwyn Davies"/> and
<contact fullname="Henrik Levkowetz"/>.</t>

</section>
<section anchor="Notices"><name>Notices</name>
<t>Copyright (c) 2026 The OpenID Foundation.</t>

<t>The OpenID Foundation (OIDF) grants to any Contributor, developer, implementer,
or other interested party a non-exclusive, royalty free, worldwide copyright license to
reproduce, prepare derivative works from, distribute, perform and display, this
Implementers Draft, Final Specification, or Final Specification Incorporating Errata
Corrections solely for the purposes of (i) developing specifications, and (ii)
implementing Implementers Drafts, Final Specifications, and Final Specification
Incorporating Errata Corrections based on such documents, provided that attribution
be made to the OIDF as the source of the material, but that such attribution does not
indicate an endorsement by the OIDF.</t>

<t>The technology described in this specification was made available from contributions
from various sources, including members of the OpenID Foundation and others.
Although the OpenID Foundation has taken steps to help ensure that the technology
is available for distribution, it takes no position regarding the validity or scope of any
intellectual property or other rights that might be claimed to pertain to the
implementation or use of the technology described in this specification or the extent
to which any license under such rights might or might not be available; neither does it
represent that it has made any independent effort to identify any such rights. The
OpenID Foundation and the contributors to this specification make no (and hereby
expressly disclaim any) warranties (express, implied, or otherwise), including implied
warranties of merchantability, non-infringement, fitness for a particular purpose, or
title, related to this specification, and the entire risk as to implementing this
specification is assumed by the implementer. The OpenID Intellectual Property
Rights policy (found at openid.net) requires contributors to offer a patent promise not
to assert certain patent claims against other contributors and against implementers.
OpenID invites any interested party to bring to its attention any copyrights, patents,
patent applications, or other proprietary rights that may cover technology that may be
required to practice this specification.</t>

</section>

    <section anchor="contributors" numbered="false" toc="include" removeInRFC="false">
        <name>Contributors</name>
    <contact initials="M." surname="Jordan" fullname="Marc Jordan">
      <organization>SGNL</organization>
      <address>
        <email>marc@sgnl.ai</email>
      </address>
    </contact>
    <contact initials="E." surname="Gustavson" fullname="Erik Gustavson">
      <organization>SGNL</organization>
      <address>
        <email>erik@sgnl.ai</email>
      </address>
    </contact>
    <contact initials="A." surname="Babeanu" fullname="Alexandre Babeanu">
      <organization>Indykite</organization>
      <address>
        <email>alex.babeanu@indykite.com</email>
      </address>
    </contact>
    <contact initials="D." surname="Hyland" fullname="David Hyland">
      <organization>ID Partners</organization>
      <address>
        <email>dave@idpartners.com.au</email>
      </address>
    </contact>
    <contact initials="J.-F." surname="Lombardo" fullname="Jean-François Lombardo">
      <organization>AWS</organization>
      <address>
        <email>jeffsec@amazon.com</email>
      </address>
    </contact>
    <contact initials="A." surname="Olivier" fullname="Alex Olivier">
      <organization>Cerbos</organization>
      <address>
        <email>alex@cerbos.dev</email>
      </address>
    </contact>
    <contact initials="M." surname="Trimpe" fullname="Michiel Trimpe">
      <organization>VNG Realisatie</organization>
      <address>
        <email>michiel.trimpe@vng.nl</email>
      </address>
    </contact>
    <contact initials="E." surname="Azerad" fullname="Elie Azerad">
      <organization>Independent Contributor</organization>
      <address>
        <email>elie.azerad@gmail.com</email>
      </address>
    </contact>
    </section>

  </back>

<!-- ##markdown-source:
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
DKUtSRaF9LrbYaSxpJU/ou89Qutmj2ZuvbMBLu5G34KaBMuaPXv3ZPztztno
4Xjzz/94MfA3uhtNzswTM9l6MoonXz8ePZzG26OJ+Xp7FG8mO8nX2xs7jzcf
eQk+/GGa9AWKq63RNTGMYg9tBNpIG7mUa97mpfZrzzvaPgd7exrG3Y43m/Up
u2qQFNr8u+fYbWCTbtGafC668CcMAbMy+PLl0ZNh98aIm2NJmP59/dQ+HXlz
Z2IR70RH68xc7cj8Cfgmy3PpCQ4B+xAvpH+dmLesONrdYObQQX0TKiB2lGfx
2rnf/kp3B1ysgHg3Hfgfs+sCmQnxn//5Kcfy82T+1EVSNNJ+PiXHszc9aPPJ
1zur04MU9XrtmU0E9K9Q7/G304VueSn76/38fLeSj7/Z+uZ2IOuutOV2uGSD
d4bZHa5ldbd7Wf0TXMzlaXUbO6PtzZPNnfDe3PFqfpEukK6F+ni2ogvbp04R
WuxXTtMASAsoJuHWmN63P2FxDQt+e3WNBMDe21p9EoWrPj+Jq34xGvev3l9f
pPfXSrRbxSWWIsldEa+XSzRcfbfgEA3n32+XSXyRWhqdKdwdKNHtEF2GDd0n
9ckUqDXcL0N97lTE1z+HX29ZqN4jXn3jew7ls932pi/99tfdutd/u/f9V1Ba
x9PxuyIQlqFGz9F98v1vj/e7IgA/Vxmg/hNdfdv7juCzXfcwXOX2l13iV37/
V/0XLMniZMOOAKDlUmHHof4ERSQc7XdBBD5r8Zi+g7qN/N4FWzwq6gsskUGN
yJ+P9/QJFwV7Wsxmi1yDeiiMhD6T6ltnbCOPqRMQ1mSXKJBUX+TsNvcSFwAg
6vDt3tMIl5ZiHtmidH36RmiSh+9ycdZLaOwM00wrI31IoyLnqgu5MQm5uCYS
78ROWNvPBJApGrmV4x+NhQ8Ge5Ut0TCUcGY7u5/pii4GjUy3fgNvXue5oMXG
CfZRqTEjJAbYSgFMHP6iSKUmlOtYTqkCJ8+PyflGhrrXB8cn69J1lAN+myCP
qXg+ZoaRc0ecq6n0JpXDaBzBCAkgZQDY1AVq6noRtMIKfbW4ZniNcqMPjqTT
Lrcux/62cRZRVf04XIMEYHk1duhL9BnQ2yX5yam39LSYOydfEElGn1z7PZz4
RF8sqIQZAAz/eoXbH3FX0HAV+BRdXe/NNRMpAT4lCdelyc/rC2oGn1KAl2vH
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

-->

</rfc>

