<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE rfc [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">
]>
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
<!-- generated by https://github.com/cabo/kramdown-rfc2629 version 1.5.6 -->
<?rfc toc="yes"?>
<?rfc sortrefs="yes"?>
<?rfc symrefs="yes"?>
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-ace-revoked-token-notification-01" category="std" obsoletes="" updates="" submissionType="IETF" xml:lang="en" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.9.1 -->
  <front>
    <title abbrev="Notification of Revoked Tokens in ACE">Notification of Revoked Access Tokens in the Authentication and Authorization for Constrained Environments (ACE) Framework</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-ace-revoked-token-notification-01"/>
    <author initials="M." surname="Tiloca" fullname="Marco Tiloca">
      <organization>RISE AB</organization>
      <address>
        <postal>
          <street>Isafjordsgatan 22</street>
          <city>Kista</city>
          <code>16440</code>
          <country>Sweden</country>
        </postal>
        <email>marco.tiloca@ri.se</email>
      </address>
    </author>
    <author initials="L." surname="Seitz" fullname="Ludwig Seitz">
      <organization>Combitech</organization>
      <address>
        <postal>
          <street>Djaeknegatan 31</street>
          <city>Malmoe</city>
          <code>21135</code>
          <country>Sweden</country>
        </postal>
        <email>ludwig.seitz@combitech.com</email>
      </address>
    </author>
    <author initials="F." surname="Palombini" fullname="Francesca Palombini">
      <organization>Ericsson AB</organization>
      <address>
        <postal>
          <street>Torshamnsgatan 23</street>
          <city>Kista</city>
          <code>16440</code>
          <country>Sweden</country>
        </postal>
        <email>francesca.palombini@ericsson.com</email>
      </address>
    </author>
    <author initials="S." surname="Echeverria" fullname="Sebastian Echeverria">
      <organization>CMU SEI</organization>
      <address>
        <postal>
          <street>4500 Fifth Avenue</street>
          <city>Pittsburgh, PA</city>
          <code>15213-2612</code>
          <country>United States of America</country>
        </postal>
        <email>secheverria@sei.cmu.edu</email>
      </address>
    </author>
    <author initials="G." surname="Lewis" fullname="Grace Lewis">
      <organization>CMU SEI</organization>
      <address>
        <postal>
          <street>4500 Fifth Avenue</street>
          <city>Pittsburgh, PA</city>
          <code>15213-2612</code>
          <country>United States of America</country>
        </postal>
        <email>glewis@sei.cmu.edu</email>
      </address>
    </author>
    <date year="2022" month="March" day="07"/>
    <area>Internet</area>
    <workgroup>ACE Working Group</workgroup>
    <keyword>Internet-Draft</keyword>
    <abstract>
      <t>This document specifies a method of the Authentication and Authorization for Constrained  Environments (ACE) framework, which allows an Authorization Server to notify Clients and Resource Servers (i.e., registered devices) about revoked Access Tokens. The method allows Clients and Resource Servers to access a Token Revocation List on the Authorization Server, with the possible additional use of resource observation for the Constrained Application Protocol (CoAP). Resulting (unsolicited) notifications of revoked Access Tokens complement alternative approaches such as token introspection, while not requiring additional endpoints on Clients and Resource Servers.</t>
    </abstract>
    <note removeInRFC="true">
      <name>Discussion Venues</name>
      <t>Discussion of this document takes place on the
    Authentication and Authorization for Constrained Environments Working Group mailing list (ace@ietf.org),
    which is archived at <eref target="https://mailarchive.ietf.org/arch/browse/ace/"/>.</t>
      <t>Source for this draft and an issue tracker can be found at
    <eref target="https://github.com/ace-wg/ace-revoked-token-notification"/>.</t>
    </note>
  </front>
  <middle>
    <section anchor="intro" numbered="true" toc="default">
      <name>Introduction</name>
      <t>Authentication and Authorization for Constrained Environments (ACE) <xref target="I-D.ietf-ace-oauth-authz" format="default"/> is a framework that enforces access control on IoT devices acting as Resource Servers. In order to use ACE, both Clients and Resource Servers have to register with an Authorization Server and become a registered device. Once registered, a Client can send a request to the Authorization Server, to obtain an Access Token for a Resource Server. For a Client to access the Resource Server, the Client must present the issued Access Token at the Resource Server, which then validates it before storing it (see <xref section="5.10.1.1" sectionFormat="of" target="I-D.ietf-ace-oauth-authz" format="default"/>).</t>
      <t>Even though Access Tokens have expiration times, there are circumstances by which an Access Token may need to be revoked before its expiration time, such as: (1) a registered device has been compromised, or is suspected of being compromised; (2) a registered device is decommissioned; (3) there has been a change in the ACE profile for a registered device; (4) there has been a change in access policies for a registered device; and (5) there has been a change in the outcome of policy evaluation for a registered device (e.g., if policy assessment depends on dynamic conditions in the execution environment, the user context, or the resource utilization).</t>
      <t>As discussed in <xref section="6.1" sectionFormat="of" target="I-D.ietf-ace-oauth-authz" format="default"/>, only client-initiated revocation is currently specified <xref target="RFC7009" format="default"/> for OAuth 2.0 <xref target="RFC6749" format="default"/>, based on the assumption that Access Tokens in OAuth are issued with a relatively short lifetime. However, this is not expected to be the case for constrained, intermittently connected devices, that need Access Tokens with relatively long lifetimes.</t>
      <t>This document specifies a method for allowing registered devices to access and possibly subscribe to a Token Revocation List (TRL) resource on the Authorization Server, in order to obtain an updated list of revoked, but yet not expired, pertaining Access Tokens. In particular, registered devices can subscribe to the TRL at the Authorization Server by using resource observation <xref target="RFC7641" format="default"/> for the Constrained Application Protocol (CoAP) <xref target="RFC7252" format="default"/>.</t>
      <t>Unlike in the case of token introspection (see <xref section="5.9" sectionFormat="of" target="I-D.ietf-ace-oauth-authz" format="default"/>), a registered device does not provide an owned Access Token to the Authorization Server for inquiring about its current state. Instead, registered devices simply obtain an updated list of revoked, but yet not expired, pertaining Access Tokens, as efficiently identified by corresponding hash values.</t>
      <t>The benefits of this method are that it complements token introspection, and it does not require any additional endpoints on the registered devices. The only additional requirements for registered devices are a request/response interaction with the Authorization Server to access and possibly subscribe to the TRL (see <xref target="sec-overview" format="default"/>), and the lightweight computation of hash values to use as Token identifiers (see <xref target="sec-token-name" format="default"/>).</t>
      <section anchor="terminology" numbered="true" toc="default">
        <name>Terminology</name>
        <t>The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in BCP 14 <xref target="RFC2119" format="default"/> <xref target="RFC8174" format="default"/> when, and only when, they appear in all capitals, as shown here.</t>
        <t>Readers are expected to be familiar with the terms and concepts described in the ACE framework for Authentication and Authorization <xref target="I-D.ietf-ace-oauth-authz" format="default"/>, as well as with terms and concepts related to CBOR Web Tokens (CWTs) <xref target="RFC8392" format="default"/>, and JSON Web Tokens (JWTs) <xref target="RFC7519" format="default"/>. The terminology for entities in the considered architecture is defined in OAuth 2.0 <xref target="RFC6749" format="default"/>. In particular, this includes Client, Resource Server, and Authorization Server.</t>
        <t>Readers are also expected to be familiar with the terms and concepts related to CBOR <xref target="RFC8949" format="default"/>, JSON <xref target="RFC8259" format="default"/>, the CoAP protocol <xref target="RFC7252" format="default"/>, CoAP Observe <xref target="RFC7641" format="default"/>, and the use of hash functions to name objects as defined in <xref target="RFC6920" format="default"/>.</t>
        <t>Note that, unless otherwise indicated, the term "endpoint" is used here following its OAuth definition, aimed at denoting resources such as /token and /introspect at the Authorization Server, and /authz-info at the Resource Server. This document does not use the CoAP definition of "endpoint", which is "An entity participating in the CoAP protocol."</t>
        <t>This specification also refers to the following terminology.</t>
        <ul spacing="normal">
          <li>Token hash: identifier of an Access Token, in binary format encoding. The token hash has no relation to other possibly used token identifiers, such as the "cti" (CWT ID) claim of CBOR Web Tokens (CWTs) <xref target="RFC8392" format="default"/>.</li>
          <li>Token Revocation List (TRL): a collection of token hashes such that the corresponding Access Tokens have been revoked but are not expired yet.</li>
          <li>TRL resource: a resource on the Authorization Server, with a TRL as its representation.</li>
          <li>TRL endpoint: an endpoint at the Authorization Server associated with the TRL resource. The default name of the TRL endpoint in a url-path is '/revoke/trl'. Implementations are not required to use this name, and can define their own instead.</li>
          <li>Registered device: a device registered at the Authorization Server, i.e., as a Client, or a Resource Server, or both. A registered device acts as a caller of the TRL endpoint.</li>
          <li>Administrator: entity authorized to get full access to the TRL at the Authorization Server, and acting as a caller of the TRL endpoint. An administrator is not necessarily a registered device as defined above, i.e., a Client requesting Access Tokens or a Resource Server consuming Access Tokens. How the administrator authorization is established and verified is out of the scope of this specification.</li>
          <li>
            <t>Pertaining Access Token:  </t>
            <ul spacing="normal">
              <li>With reference to an administrator, an Access Token issued by the Authorization Server.</li>
              <li>With reference to a registered device, an Access Token intended to be owned by that device. An Access Token pertains to a Client if the Authorization Server has issued the Access Token and provided it to that Client. An Access Token pertains to a Resource Server if the Authorization Server has issued the Access Token to be consumed by that Resource Server.</li>
            </ul>
          </li>
        </ul>
      </section>
    </section>
    <section anchor="sec-overview" numbered="true" toc="default">
      <name>Protocol Overview</name>
      <t>This protocol defines how a CoAP-based Authorization Server informs Clients and Resource Servers, i.e., registered devices, about pertaining revoked Access Tokens. How the relationship between a registered device and the Authorization Server is established is out of the scope of this specification.</t>
      <t>At a high level, the steps of this protocol are as follows.</t>
      <ul spacing="normal">
        <li>Upon startup, the Authorization Server creates a single TRL resource. At any point in time, the TRL resource represents the list of all revoked Access Tokens issued by the Authorization Server that are not expired yet.</li>
        <li>
          <t>When a device registers at the Authorization Server, it also receives the url-path to the TRL resource.  </t>
          <t>
After the registration procedure is finished, the registered device can send an Observation Request to the TRL resource as described in <xref target="RFC7641" format="default"/>, i.e., a GET request with an Observe option set to 0 (register). By doing so, the registered device effectively subscribes to the TRL resource, as interested to receive notifications about its update. Upon receiving the request, the Authorization Server adds the registered device to the list of observers of the TRL resource.  </t>
          <t>
At any time, the registered device can send a GET request to the TRL endpoint. When doing so, it can request for: the current list of pertaining revoked Access Tokens (see <xref target="ssec-trl-full-query" format="default"/>); or the most recent TRL updates occurred over the list of pertaining revoked Access Tokens (see <xref target="ssec-trl-diff-query" format="default"/>). In either case, the registered device may especially rely on an Observation Request for subscribing to the TRL resource as discussed above.</t>
        </li>
        <li>
          <t>When an Access Token is revoked, the Authorization Server adds the corresponding token hash to the TRL. Also, when a revoked Access Token eventually expires, the Authorization Server removes the corresponding token hash from the TRL.  </t>
          <t>
In either case, after updating the TRL, the Authorization Server sends Observe Notifications as per <xref target="RFC7641" format="default"/>. That is, an Observe Notification is sent to each registered device subscribed to the TRL resource and to which the Access Token pertains.  </t>
          <t>
Depending on the specific subscription established through the observation request, the notification provides the current updated list of revoked Access Tokens in the portion of the TRL pertaining to that device (see <xref target="ssec-trl-full-query" format="default"/>), or rather the most recent TRL updates occurred over that list of pertaining revoked Access Tokens (see <xref target="ssec-trl-diff-query" format="default"/>).  </t>
          <t>
Further Observe Notifications may be sent, consistently with ongoing additional observations of the TRL resource.</t>
        </li>
        <li>An administrator can access and subscribe to the TRL like a registered device, while getting the full updated representation of the TRL.</li>
      </ul>
      <t><xref target="fig-protocol-overview" format="default"/> shows a high-level overview of the service provided by this protocol. In particular, it shows the Observe Notifications sent by the Authorization Server to one administrator and four registered devices, upon revocation of the issued Access Tokens t1, t2 and t3, with token hash th1, th2 and th3, respectively. Each dotted line associated with a pair of registered devices indicates the Access Token that they both own.</t>
      <figure anchor="fig-protocol-overview">
        <name>Protocol Overview</name>
        <artwork align="center" name="" type="" alt=""><![CDATA[
                    +----------------------+
                    | Authorization Server |
                    +-----------o----------+
                    revoke/trl  |  TRL: {th1,th2,th3}
                                |
 +-----------------+------------+------------+------------+
 |                 |            |            |            |
 | th1,th2,th3     | th1,th2    | th1        | th3        | th2,th3
 v                 v            v            v            v
+---------------+ +----------+ +----------+ +----------+ +----------+
| Administrator | | Client 1 | | Resource | | Client 2 | | Resource |
|               | |          | | Server 1 | |          | | Server 2 |
+---------------+ +----------+ +----------+ +----------+ +----------+
                     :    :        :           :            :    :
                     :    :   t1   :           :     t3     :    :
                     :    :........:           :............:    :
                     :                   t2                      :
                     :...........................................:

]]></artwork>
      </figure>
      <t><xref target="sec-RS-examples" format="default"/> provides examples of the protocol flow and message exchange between the Authorization Server and a registered device.</t>
    </section>
    <section anchor="sec-token-name" numbered="true" toc="default">
      <name>Token Hash</name>
      <t>The token hash of an Access Token is computed as follows.</t>
      <ol spacing="normal" type="1"><li>
          <t>The Authorization Server defines ENCODED_TOKEN, as the content of the 'access_token' parameter in the Authorization Server response (see <xref section="5.8.2" sectionFormat="of" target="I-D.ietf-ace-oauth-authz" format="default"/>), where the Access Token was included and provided to the requesting Client.  </t>
          <t>
Note that the content of the 'access_token' parameter is either:  </t>
          <ul spacing="normal">
            <li>A CBOR byte string, if the Access Token was transported using CBOR. With reference to the example in <xref target="fig-as-response-cbor" format="default"/>, and assuming the string's length in bytes to be 119 (i.e., 0x77 in hexadecimal), then ENCODED_TOKEN takes the bytes {0x58 0x77 0xd0 0x83 0x44 0xa1 ...}, i.e., the raw content of the parameter 'access_token'.</li>
            <li>A text string, if the Access Token was transported using JSON. With reference to the example in <xref target="fig-as-response-json" format="default"/>, ENCODED_TOKEN takes "2YotnFZFEjr1zCsicMWpAA", i.e., the raw content of the parameter 'access_token'.</li>
          </ul>
        </li>
        <li>
          <t>The Authorization Server defines HASH_INPUT as follows.  </t>
          <ul spacing="normal">
            <li>If CBOR was used to transport the Access Token (as a CWT or JWT), HASH_INPUT takes the same value of ENCODED_TOKEN.</li>
            <li>
              <t>If JSON was used to transport the Access Token (as a CWT or JWT), HASH_INPUT takes the serialization of ENCODED_TOKEN.      </t>
              <t>
In either case, HASH_INPUT results in the binary representation of the content of the 'access_token' parameter from the Authorization Server response.</t>
            </li>
          </ul>
        </li>
        <li>
          <t>The Authorization Server generates a hash value of HASH_INPUT as per <xref section="6" sectionFormat="of" target="RFC6920" format="default"/>. The resulting output in binary format is used as the token hash. Note that the used binary format embeds the identifier of the used hash function, in the first byte of the computed token hash.  </t>
          <t>
The specifically used hash function MUST be collision-resistant on byte-strings, and MUST be selected from the "Named Information Hash Algorithm" Registry <xref target="Named.Information.Hash.Algorithm" format="default"/>.  </t>
          <t>
The Authorization Server specifies the used hash function to registered devices during their registration procedure (see <xref target="sec-registration" format="default"/>).</t>
        </li>
      </ol>
      <figure anchor="fig-as-response-cbor">
        <name>Example of Authorization Server response using CBOR</name>
        <artwork align="left" name="" type="" alt=""><![CDATA[
2.01 Created
Content-Format: application/ace+cbor
Max-Age: 85800
Payload:
{
   access_token : h'd08344a1...'
   (remainder of the Access Token omitted for brevity)
   token_type : pop,
   expires_in : 86400,
   profile    : coap_dtls,
   (remainder of the response omitted for brevity)
}
]]></artwork>
      </figure>
      <figure anchor="fig-as-response-json">
        <name>Example of Authorization Server response using JSON</name>
        <artwork align="left" name="" type="" alt=""><![CDATA[
HTTP/1.1 200 OK
Content-Type: application/json
Cache-Control: no-store
Pragma: no-cache
Payload:
{
   "access_token" : "2YotnFZFEjr1zCsicMWpAA"
   (remainder of the Access Token omitted for brevity)
   "token_type" : "pop",
   "expires_in" : 86400,
   "profile"    : "coap_dtls",
   (remainder of the response omitted for brevity)
}
]]></artwork>
      </figure>
    </section>
    <section anchor="sec-trl-resource" numbered="true" toc="default">
      <name>The TRL Resource</name>
      <t>Upon startup, the Authorization Server creates a single TRL resource, encoded as a CBOR array.</t>
      <t>Each element of the array is a CBOR byte string, with value the token hash of an Access Token. The order of the token hashes in the CBOR array is irrelevant, and the CBOR array MUST be treated as a set in which the order has no significant meaning.</t>
      <t>The TRL is initialized as empty, i.e., the initial content of the TRL resource representation MUST be an empty CBOR array.</t>
      <section anchor="ssec-trl-update" numbered="true" toc="default">
        <name>Update of the TRL Resource</name>
        <t>The Authorization Server updates the TRL in the following two cases.</t>
        <ul spacing="normal">
          <li>When a non-expired Access Token is revoked, the token hash of the Access Token is added to the TRL resource representation. That is, a CBOR byte string with the token hash as its value is added to the CBOR array used as TRL resource representation.</li>
          <li>When a revoked Access Token expires, the token hash of the Access Token is removed from the TRL resource representation. That is, the CBOR byte string with the token hash as its value is removed from the CBOR array used as TRL resource representation.</li>
        </ul>
      </section>
    </section>
    <section anchor="sec-trl-endpoint" numbered="true" toc="default">
      <name>The TRL Endpoint</name>
      <t>Consistent with <xref section="6.5" sectionFormat="of" target="I-D.ietf-ace-oauth-authz" format="default"/>, all communications between a caller of the TRL endpoint and the Authorization Server MUST be encrypted, as well as integrity and replay protected. Furthermore, responses from the Authorization Server to the caller MUST be bound to the caller's request.</t>
      <t>The Authorization Server MUST implement measures to prevent access to the TRL endpoint by entities other than registered devices and authorized administrators.</t>
      <t>The TRL endpoint supports only the GET method, and allows two types of query of the TRL.</t>
      <ul spacing="normal">
        <li>Full query: the Authorization Server returns the token hashes of the revoked Access Tokens currently in the TRL and pertaining to the requester. The Authorization Server MUST support this type of query. The processing of a full query and the related response format are defined in <xref target="ssec-trl-full-query" format="default"/>.</li>
        <li>
          <t>Diff query: the Authorization Server returns a list of diff entries. Each diff entry is related to one of the most recent updates, in the portion of the TRL pertaining to the requester. The Authorization Server MAY support this type of query.  </t>
          <t>
The entry associated with one of such updates contains a list of token hashes, such that: i) the corresponding revoked Access Tokens pertain to the requester; and ii) they were added to or removed from the TRL at that update. The processing of a diff query and the related response format are defined in <xref target="ssec-trl-diff-query" format="default"/>.</t>
        </li>
      </ul>
      <t>The TRL endpoint allows the following query parameters in a GET request. The Authorization Server MUST silently ignore unknown query parameters.</t>
      <ul spacing="normal">
        <li>
          <t>'pmax': if included, it follows the semantics defined in <xref section="3.2.2" sectionFormat="of" target="I-D.ietf-core-conditional-attributes" format="default"/>. This query parameter is relevant only in case the GET request is specifically an Observation Request, i.e., if it includes the CoAP Observe option set to 0 (register). In such a case, this parameter indicates the maximum time, in seconds, between two consecutive notifications for the observation in question, regardless whether the TRL resource has changed or not.  </t>
          <t>
If the Observation Request does not include the 'pmax' parameter, the maximum time to consider is up to the Authorization Server. If the Observation Request includes the 'pmax' parameter, its value MUST be greater than zero, otherwise the Authorization Server MUST return a 4.00 (Bad Request) response.  </t>
          <t>
If the GET request is not an Observation Request, the Authorization Server MUST ignore the 'pmax' parameter, in case this is included.</t>
        </li>
        <li>
          <t>'diff': if included, it indicates to perform a diff query of the TRL (see <xref target="ssec-trl-diff-query" format="default"/>). Its value MUST be either:  </t>
          <ul spacing="normal">
            <li>the integer 0, indicating that a (notification) response should include as many diff entries as the Authorization Server can provide in the response; or</li>
            <li>a positive integer greater than 0, indicating the maximum number of diff entries that a (notification) response should include.</li>
          </ul>
          <t>
If the Authorization Server does not support diff queries, it ignores the query parameter 'diff' when present in the GET request and proceeds like when processing a full query of the TRL (see <xref target="ssec-trl-full-query" format="default"/>).</t>
        </li>
      </ul>
    </section>
    <section anchor="ssec-trl-full-query" numbered="true" toc="default">
      <name>Full Query of the TRL</name>
      <t>In order to produce a (notification) response to a GET request asking for a full query of the TRL, the Authorization Server performs the following actions.</t>
      <ol spacing="normal" type="1"><li>
          <t>From the current TRL resource representation, the Authorization Server builds a set HASHES, such that:  </t>
          <ul spacing="normal">
            <li>If the requester is a registered device, HASHES specifies the token hashes of the Access Tokens pertaining to that registered device. The Authorization Server can use the authenticated identity of the registered device to perform the necessary filtering on the TRL resource representation.</li>
            <li>If the requester is an administrator, HASHES specifies all the token hashes in the current TRL resource representation.</li>
          </ul>
        </li>
        <li>
          <t>The Authorization Server sends a 2.05 (Content) Response to the requester, with a CBOR array 'full-set' as payload. Each element of the array specifies one of the token hashes from the set HASHES, encoded as a CBOR byte string.  </t>
          <t>
The order of the token hashes in the CBOR array is irrelevant, i.e., the CBOR array MUST be treated as a set in which the order has no significant meaning.</t>
        </li>
      </ol>
      <t>The CDDL definition <xref target="RFC8610" format="default"/> of the CBOR array 'full-set' specified as payload in the response from the Authorization Server is provided below.</t>
      <figure anchor="cddl-full">
        <name>CDDL definition of the response payload following a Full Query request to the TRL endpoint</name>
        <artwork type="CDDL" align="left" name="" alt=""><![CDATA[
   token-hash = bytes
   full-set = [* token-hash]
]]></artwork>
      </figure>
    </section>
    <section anchor="ssec-trl-diff-query" numbered="true" toc="default">
      <name>Diff Query of the TRL</name>
      <t>In order to produce a (notification) response to a GET request asking for a diff query of the TRL, the Authorization Server performs the following actions.</t>
      <ol spacing="normal" type="1"><li>The Authorization Server defines the positive integer NUM. If the value N specified in the query parameter 'diff' in the GET request is equal to 0 or greater than a pre-defined positive integer N_MAX, then NUM takes the value of N_MAX. Otherwise, NUM takes N.</li>
        <li>
          <t>The Authorization Server prepares U = min(NUM, SIZE) diff entries, where SIZE &lt;= N_MAX is the number of TRL updates pertaining to the requester and currently stored at the Authorization Server. That is, the diff entries are related to the U most recent TRL updates pertaining to the requester. In particular, the first entry refers to the most recent of such updates, the second entry refers to the second from last of such updates, and so on.  </t>
          <t>
Each diff entry is a CBOR array 'diff-entry', which includes the following two elements.  </t>
          <ul spacing="normal">
            <li>The first element is a CBOR array 'removed'. Each element of the array is a CBOR byte string, with value the token hash of an Access Token such that: it pertained to the requester; and it was removed from the TRL during the update associated with the diff entry.</li>
            <li>The second element is a CBOR array 'added'. Each element of the array is a CBOR byte string, with value the token hash of an Access Token such that: it pertains to the requester; and it was added to the TRL during the update associated with the diff entry.</li>
          </ul>
          <t>
The order of the token hashes in the CBOR arrays 'removed' and 'added' is irrelevant. That is, the CBOR arrays 'removed' and 'added' MUST be treated as a set in which the order of elements has no significant meaning.</t>
        </li>
        <li>
          <t>The Authorization Server prepares a 2.05 (Content) Response for the requester, with a CBOR array 'diff-set' of U elements as payload. Each element of the CBOR array 'diff-set' specifies one of the CBOR arrays 'diff-entry' prepared at step 2 as diff entries.  </t>
          <t>
Within the CBOR array 'diff-set', the CBOR arrays 'diff-entry' MUST be sorted to reflect the corresponding updates to the TRL in reverse chronological order. That is, the first 'diff-entry' element of 'diff-set' relates to the most recent update to the portion of the TRL pertaining to the requester. The second 'diff-entry' element of 'diff-set' relates to the second from last most recent update to that portion, and so on.</t>
        </li>
      </ol>
      <t>The CDDL definition <xref target="RFC8610" format="default"/> of the CBOR array 'diff-set' specified as payload in the response from the Authorization Server is provided below.</t>
      <figure anchor="cddl-diff">
        <name>CDDL definition of the response payload following a Diff Query request to the TRL endpoint</name>
        <artwork type="CDDL" align="left" name="" alt=""><![CDATA[
   token-hash = bytes
   trl-patch = [* token-hash]
   diff-entry = [removed: trl-patch, added: trl-patch]
   diff-set = [* diff-entry]
]]></artwork>
      </figure>
      <t>If the Authorization Server supports diff queries:</t>
      <ul spacing="normal">
        <li>
          <t>The Authorization Server MUST return a 4.00 (Bad Request) response in case the query parameter 'diff' of the GET request specifies a value other than 0 or than a positive integer.  </t>
          <t>
The response MUST have Content-Format "application/ace-trl+cbor". The payload of the response is a CBOR map, which MUST include the 'error' field with value 0 ("Invalid parameter value") and MAY include the 'error_description' field to provide additional context.</t>
        </li>
        <li>The Authorization Server MUST keep track of N_MAX most recent updates to the portion of the TRL that pertains to each caller of the TRL endpoint. The particular method to achieve this is implementation-specific.</li>
        <li>When SIZE is equal to N_MAX, and a new TRL update occurs as pertaining to a registered device, the Authorization Server MUST first delete the oldest stored update for that device, before storing this latest update as the most recent one for that device.</li>
        <li>The Authorization Server SHOULD provide registered devices and administrators with the value of N_MAX, upon their registration (see <xref target="sec-registration" format="default"/>).</li>
      </ul>
      <t><xref target="sec-series-pattern" format="default"/> discusses how performing a diff query of the TRL is in fact a usage example of the Series Transfer Pattern defined in <xref target="I-D.bormann-t2trg-stp" format="default"/>.</t>
      <t><xref target="sec-cursor-pattern" format="default"/> discusses how the execution of a diff query of the TRL can be further improved by using the "Cursor" pattern defined in <xref section="3.3" sectionFormat="of" target="I-D.bormann-t2trg-stp" format="default"/>.</t>
    </section>
    <section anchor="sec-registration" numbered="true" toc="default">
      <name>Upon Registration</name>
      <t>During the registration process at the Authorization Server, an administrator or a registered device receives the following information as part of the registration response.</t>
      <ul spacing="normal">
        <li>The url-path to the TRL endpoint at the Authorization Server.</li>
        <li>The hash function used to compute token hashes. This is specified as an integer or a text string, taking value from the "ID" or "Hash Name String" column of the "Named Information Hash Algorithm" Registry <xref target="Named.Information.Hash.Algorithm" format="default"/>, respectively.</li>
        <li>Optionally, a positive integer N_MAX, if the Authorization Server supports diff queries of the TRL resource (see <xref target="ssec-trl-diff-query" format="default"/>).</li>
      </ul>
      <t>After the registration procedure is finished, the administrator or registered device can send a GET request to the TRL resource, including the CoAP Observe option set to 0 (register), in order to start an observation of the TRL resource at the Authorization Server as per <xref section="3.1" sectionFormat="of" target="RFC7641" format="default"/>. The GET request can express the wish for a full query (see <xref target="ssec-trl-full-query" format="default"/>) or a diff query (see <xref target="ssec-trl-diff-query" format="default"/>) of the TRL.</t>
      <t>In case the request is successfully processed, the Authorization Server replies with a response specifying the CoAP response code 2.05 (Content) and including the CoAP Observe option. The payload of the response is formatted as defined in <xref target="ssec-trl-full-query" format="default"/> or in <xref target="ssec-trl-diff-query" format="default"/>, in case the GET yielded the execution of a full query or a diff query of the TRL, respectively.</t>
      <t>Further details about the registration process at the Authorization Server are out of scope for this specification. Note that the registration process is also out of the scope of the ACE framework for Authentication and Authorization (see <xref section="5.5" sectionFormat="of" target="I-D.ietf-ace-oauth-authz" format="default"/>).</t>
    </section>
    <section anchor="sec-notification" numbered="true" toc="default">
      <name>Notification of Revoked Tokens</name>
      <t>When the TRL is updated (see <xref target="ssec-trl-update" format="default"/>), the Authorization Server sends Observe Notifications to the observers of the TRL resource. Observe Notifications are sent as per <xref section="4.2" sectionFormat="of" target="RFC7641" format="default"/>.</t>
      <t>If the 'pmax' query parameter was specified in the Observation Request starting an observation (see <xref target="sec-trl-endpoint" format="default"/>), the Authorization Server might accordingly send additional Observe Notifications to the associated observer. That is, the Authorization Server ensures that no more than pmax seconds elapse between two consecutive notifications sent to that observer, regardless whether the TRL resource has changed or not. If the 'pmax' query parameter was not specified in the Observation Request, a possible maximum time to consider is up to the Authorization Server.</t>
      <t>The payload of each Observe Notification is formatted as defined in <xref target="ssec-trl-full-query" format="default"/> or in <xref target="ssec-trl-diff-query" format="default"/>, in case the original Observation Request yielded the execution of a full query or a diff query of the TRL, respectively.</t>
      <t>Furthermore, an administrator or a registered device can send additional GET requests to the TRL endpoint at any time, in order to retrieve the token hashes of the pertaining revoked Access Tokens. When doing so, the caller of the TRL endpoint can perform a full query (see <xref target="ssec-trl-full-query" format="default"/>) or a diff query (see <xref target="ssec-trl-diff-query" format="default"/>).</t>
      <t>When receiving a response from the TRL endpoint, a registered device MUST expunge every stored Access Token associated with a token hash specified in the response.</t>
      <t>When a Resource Server RS receives a response from the TRL endpoint specifying the token hash H associated with a certain revoked Access Token, the RS might not have received and stored that Access Token yet. This occurs if the Access Token is revoked before it is successfully posted to the Authorization Information Endpoint at the RS (see <xref section="5.10.1" sectionFormat="of" target="I-D.ietf-ace-oauth-authz" format="default"/>). Such a delay can be due, for example, to messages that get lost in transmission, or rather to the Client experiencing failures in sending or deliberately holding the Access Token back.</t>
      <t>In such a case, the RS performs the following actions.</t>
      <ul spacing="normal">
        <li>
          <t>The RS MUST store the token hash H, until gaining knowledge that the associated revoked Access Token is also expired.  </t>
          <t>
This can happen when receiving a subsequent response from the TRL endpoint (i.e., indicating that the token hash is not in the TRL portion pertaining to the RS anymore), or when the Access Token is posted to the Authorization Information Endpoint and is found to be expired based on its 'exp' claim <xref target="RFC7519" format="default"/>, if included.</t>
        </li>
        <li>The RS MUST NOT accept as valid and store an Access Token posted to the Authorization Information Endpoint, if the corresponding token hash H is among the stored ones.</li>
      </ul>
    </section>
    <section anchor="sec-RS-examples" numbered="true" toc="default">
      <name>Interaction Examples</name>
      <t>This section provides examples of interactions between a Resource Server RS as a registered device and an Authorization Server AS. The Authorization Server supports both full query and diff query of the TRL, as defined in <xref target="ssec-trl-full-query" format="default"/> and <xref target="ssec-trl-diff-query" format="default"/>, respectively.</t>
      <t>The details of the registration process are omitted, but it is assumed that the Resource Server sends an unspecified payload to the Authorization Server, which replies with a 2.01 (Created) response.</t>
      <t>The payload of the registration response is a CBOR map, which includes the following entries:</t>
      <ul spacing="normal">
        <li>a "trl_path" parameter, specifying the path of the TRL resource;</li>
        <li>a "trl_hash" parameter, specifying the hash function used to computed token hashes as defined in <xref target="sec-token-name" format="default"/>;</li>
        <li>an "n_max" parameter, specifying the value of N_MAX, i.e., the maximum number of TRL updates pertaining to each registered device that the Authorization Server retains for that device (see <xref target="ssec-trl-diff-query" format="default"/>);</li>
        <li>possible further parameters related to the registration process.</li>
      </ul>
      <t>Furthermore, 'h(x)' refers to the hash function used to compute the token hashes, as defined in <xref target="sec-token-name" format="default"/> of this specification and according to <xref target="RFC6920" format="default"/>. Assuming the usage of CWTs transported in CBOR, 'bstr.h(t1)' and 'bstr.h(t2)' denote the byte-string representations of the token hashes for the Access Tokens t1 and t2, respectively.</t>
      <section anchor="sec-RS-example-1" numbered="true" toc="default">
        <name>Full Query with Observation</name>
        <t><xref target="fig-RS-AS" format="default"/> shows an interaction example considering a CoAP observation and a full query of the TRL.</t>
        <figure anchor="fig-RS-AS">
          <name>Interaction for Full Query with Observation</name>
          <artwork align="center" name="" type="" alt=""><![CDATA[
RS                                     AS
|                                       |
| Registration: POST                    |
+-------------------------------------->|
|                                       |
|<--------------------------------------+
|        2.01 CREATED                   |
|         Payload: {                    |
|          ...                          |
|            "trl_path" = "revoke/trl", |
|            "trl_hash" = "sha-256",    |
|            "n_max" = 10               |
|         }                             |
|                                       |
| GET Observe: 0                        |
|  coap://example.as.com/revoke/trl/    |
+-------------------------------------->|
|                                       |
|<--------------------------------------+
|              2.05 CONTENT Observe: 42 |
|               Payload: []             |
|                   .                   |
|                   .                   |
|                   .                   |
|                                       |
|    (Access Tokens t1 and t2 issued    |
|   and successfully submitted to RS)   |
|                   .                   |
|                   .                   |
|                   .                   |
|                                       |
|                                       |
|     (Access Token t1 is revoked)      |
|                                       |
|<--------------------------------------+
|              2.05 CONTENT Observe: 53 |
|               Payload: [bstr.h(t1)]   |
|                   .                   |
|                   .                   |
|                   .                   |
|                                       |
|     (Access Token t2 is revoked)      |
|                                       |
|<--------------------------------------+
|              2.05 CONTENT Observe: 64 |
|               Payload: [bstr.h(t1),   |
|                         bstr.h(t2)]   |
|                   .                   |
|                   .                   |
|                   .                   |
|                                       |
|       (Access Token t1 expires)       |
|                                       |
|<--------------------------------------+
|              2.05 CONTENT Observe: 75 |
|               Payload: [bstr.h(t2)]   |
|                   .                   |
|                   .                   |
|                   .                   |
|                                       |
|       (Access Token t2 expires)       |
|                                       |
|<--------------------------------------+
|              2.05 CONTENT Observe: 86 |
|               Payload: []             |
|                                       |
]]></artwork>
        </figure>
      </section>
      <section anchor="sec-RS-example-2" numbered="true" toc="default">
        <name>Diff Query with Observation</name>
        <t><xref target="fig-RS-AS-2" format="default"/> shows an interaction example considering a CoAP observation and a diff query of the TRL.</t>
        <t>The Resource Server indicates N=3 as value of the query parameter "diff", i.e., as the maximum number of diff entries to be specified in a response from the Authorization Server.</t>
        <figure anchor="fig-RS-AS-2">
          <name>Interaction for Diff Query with Observation</name>
          <artwork align="center" name="" type="" alt=""><![CDATA[
RS                                            AS
|                                              |
| Registration: POST                           |
+--------------------------------------------->|
|                                              |
|<---------------------------------------------+
|               2.01 CREATED                   |
|                Payload: {                    |
|                   ...                        |
|                   "trl_path" = "revoke/trl", |
|                   "trl_hash" = "sha-256",    |
|                   "n_max" = 10               |
|                }                             |
|                                              |
| GET Observe: 0                               |
|  coap://example.as.com/revoke/trl?diff=3     |
+--------------------------------------------->|
|                                              |
|<---------------------------------------------+
|                     2.05 CONTENT Observe: 42 |
|                      Payload: []             |
|                        .                     |
|                        .                     |
|                        .                     |
|                                              |
|         (Access Tokens t1 and t2 issued      |
|         and successfully submitted to RS)    |
|                        .                     |
|                        .                     |
|                        .                     |
|                                              |
|          (Access Token t1 is revoked)        |
|                                              |
|<---------------------------------------------+
|            2.05 CONTENT Observe: 53          |
|             Payload: [                       |
|                        [ [], [bstr.h(t1)] ]  |
|                      ]                       |
|                                              |
|                                              |
|                        .                     |
|                        .                     |
|                        .                     |
|                                              |
|          (Access Token t2 is revoked)        |
|                                              |
|<---------------------------------------------+
|            2.05 CONTENT Observe: 64          |
|             Payload: [                       |
|                        [ [], [bstr.h(t2)] ], |
|                        [ [], [bstr.h(t1)] ]  |
|                      ]                       |
|                        .                     |
|                        .                     |
|                        .                     |
|                                              |
|          (Access Token t1 expires)           |
|                                              |
|<---------------------------------------------+
|            2.05 CONTENT Observe: 75          |
|             Payload: [                       |
|                        [ [bstr.h(t1)], [] ], |
|                        [ [], [bstr.h(t2)] ], |
|                        [ [], [bstr.h(t1)] ]  |
|                      ]                       |
|                        .                     |
|                        .                     |
|                        .                     |
|                                              |
|          (Access Token t2 expires)           |
|                                              |
|<---------------------------------------------+
|            2.05 CONTENT Observe: 86          |
|             Payload: [                       |
|                        [ [bstr.h(t2)], [] ], |
|                        [ [bstr.h(t1)], [] ], |
|                        [ [], [bstr.h(t2)] ]  |
|                      ]                       |
|                                              |
]]></artwork>
        </figure>
      </section>
      <section anchor="sec-RS-example-3" numbered="true" toc="default">
        <name>Full Query with Observation and Additional Diff Query</name>
        <t><xref target="fig-RS-AS-3" format="default"/> shows an interaction example considering a CoAP observation and a full query of the TRL.</t>
        <t>The example also considers one of the notifications from the Authorization Server to get lost in transmission, and thus not reaching the Resource Server.</t>
        <t>When this happens, and after a waiting time defined by the application has elapsed, the Resource Server sends a GET request with no Observe Option to the Authorization Server, to perform a diff query of the TRL. The Resource Server indicates N=8 as value of the query parameter "diff", i.e., as the maximum number of diff entries to be specified in a response from the Authorization Server.</t>
        <figure anchor="fig-RS-AS-3">
          <name>Interaction for Full Query with Observation and Diff Query</name>
          <artwork align="center" name="" type="" alt=""><![CDATA[
RS                                            AS
|                                              |
| Registration: POST                           |
+--------------------------------------------->|
|                                              |
|<---------------------------------------------+
|               2.01 CREATED                   |
|                Payload: {                    |
|                   ...                        |
|                   "trl_path" = "revoke/trl", |
|                   "trl_hash" = "sha-256",    |
|                   "n_max" = 10               |
|                }                             |
|                                              |
| GET Observe: 0                               |
|  coap://example.as.com/revoke/trl/           |
+--------------------------------------------->|
|                                              |
|<---------------------------------------------+
|                     2.05 CONTENT Observe: 42 |
|                      Payload: []             |
|                       .                      |
|                       .                      |
|                       .                      |
|                                              |
|      (Access Tokens t1 and t2 issued         |
|      and successfully submitted to RS)       |
|                       .                      |
|                       .                      |
|                       .                      |
|                                              |
|         (Access Token t1 is revoked)         |
|                                              |
|<---------------------------------------------+
|                     2.05 CONTENT Observe: 53 |
|                      Payload: [bstr.h(t1)]   |
|                                              |
|                       .                      |
|                       .                      |
|                       .                      |
|                                              |
|         (Access Token t2 is revoked)         |
|                                              |
|<---------------------------------------------+
|                     2.05 CONTENT Observe: 64 |
|                      Payload: [bstr.h(t1),   |
|                                bstr.h(t2)]   |
|                       .                      |
|                       .                      |
|                       .                      |
|                                              |
|         (Access Token t1 expires)            |
|                                              |
|<---------------------------------------------+
|                     2.05 CONTENT Observe: 75 |
|                      Payload: [bstr.h(t2)]   |
|                        .                     |
|                        .                     |
|                        .                     |
|                                              |
|         (Access Token t2 expires)            |
|                                              |
|       X<-------------------------------------+
|                     2.05 CONTENT Observe: 86 |
|                      Payload: []             |
|                        .                     |
|                        .                     |
|                        .                     |
|                                              |
|       (Enough time has passed since          |
|       the latest received notification)      |
|                                              |
| GET                                          |
|  coap://example.as.com/revoke/trl?diff=8     |
+--------------------------------------------->|
|                                              |
|<---------------------------------------------+
|            2.05 CONTENT                      |
|             Payload: [                       |
|                        [ [bstr.h(t2)], [] ], |
|                        [ [bstr.h(t1)], [] ], |
|                        [ [], [bstr.h(t2)] ], |
|                        [ [], [bstr.h(t1)] ]  |
|                      ]                       |
|                                              |
]]></artwork>
        </figure>
      </section>
    </section>
    <section anchor="trl-registry-parameters" numbered="true" toc="default">
      <name>ACE Token Revocation List Parameters</name>
      <t>This specification defines a number of parameters that can be transported in the response from the TRL endpoint, when the response payload is encoded as a CBOR map. Note that such a response MUST use the Content-Format "application/ace-trl+cbor" defined in <xref target="iana-content-type" format="default"/> of this specification.</t>
      <t>The table below summarizes them, and specifies the CBOR value to use as abbreviation instead of the full descriptive name.</t>
      <figure anchor="fig-cbor-trl-params">
        <name>CBOR abbreviations for the ACE Token Revocation List parameters</name>
        <artwork align="center" name="" type="" alt=""><![CDATA[
+-------------------+------------+-----------------------+
| Name              | CBOR Value | CBOR Type             |
+-------------------+------------+-----------------------+
| full-set          | TBD        | array                 |
|                   |            |                       |
+-------------------+------------+-----------------------+
| cursor            | TBD        | simple value "null" / |
|                   |            | unsigned integer      |
+-------------------+------------+-----------------------+
| diff-set          | TBD        | array                 |
|                   |            |                       |
+-------------------+------------+-----------------------+
| more              | TBD        | simple value "true"   |
|                   |            | or "false"            |
+-------------------+------------+-----------------------+
| error             | TBD        | int                   |
|                   |            |                       |
+-------------------+------------+-----------------------+
| error_description | TBD        | tstr                  |
|                   |            |                       |
+-------------------+------------+-----------------------+
]]></artwork>
      </figure>
    </section>
    <section anchor="error-types" numbered="true" toc="default">
      <name>ACE Token Revocation List Error Identifiers</name>
      <t>This specification defines a number of values that the Authorization Server can include as error identifiers, in the 'error' field of an error response from the TRL endpoint. This applies to error responses whose payload is encoded as a CBOR map and whose Content-Format is "application/ace-trl+cbor".</t>
      <figure anchor="fig-ACE-TRL-Error">
        <name>ACE Token Revocation List Error Identifiers</name>
        <artwork align="center" name="" type="" alt=""><![CDATA[
+-------+---------------------------+
| Value | Description               |
+-------+---------------------------+
|   0   | Invalid parameter value   |
+-------+---------------------------+
|   1   | Invalid set of parameters |
+-------+---------------------------+
|   2   | Out of bound cursor value |
+-------+---------------------------+
]]></artwork>
      </figure>
    </section>
    <section anchor="sec-security-considerations" numbered="true" toc="default">
      <name>Security Considerations</name>
      <t>Security considerations are inherited from the ACE framework for Authentication and Authorization <xref target="I-D.ietf-ace-oauth-authz" format="default"/>, from <xref target="RFC8392" format="default"/> as to the usage of CWTs, from <xref target="RFC7519" format="default"/> as to the usage of JWTs, from <xref target="RFC7641" format="default"/> as to the usage of CoAP Observe, and from <xref target="RFC6920" format="default"/> with regard to resource naming through hashes. The following considerations also apply.</t>
      <t>The Authorization Server MUST ensure that each registered device can access and retrieve only its pertaining portion of the TRL. To this end, the Authorization Server can perform the required filtering based on the authenticated identity of the registered device, i.e., a (non-public) identifier that the Authorization Server can securely relate to the registered device and the secure association they use to communicate.</t>
      <t>Disclosing any information about revoked Access Tokens to entities other than the intended registered devices may result in privacy concerns. Therefore, the Authorization Server MUST ensure that, other than registered devices accessing their own pertaining portion of the TRL, only authorized and authenticated administrators can retrieve the full TRL. To this end, the Authorization Server may rely on an access control list or similar.</t>
      <t>If a registered device has many non-expired Access Tokens associated with itself that are revoked, the pertaining portion of the TRL could grow to a size bigger than what the registered device is prepared to handle upon reception, especially if relying on a full query of the TRL resource (see <xref target="ssec-trl-full-query" format="default"/>). This could be exploited by attackers to negatively affect the behavior of a registered device. Issuing Access Tokens with not too long expiration time could help reduce the size of a TRL, but an Authorization Server SHOULD take measures to limit this size.</t>
      <t>Most of the communication about revoked Access Tokens presented in this specification relies on CoAP Observe Notifications sent from the Authorization Server to a registered device. The suppression of those notifications by an external attacker that has access to the network would prevent registered devices from ever knowing that their pertaining Access Tokens have been revoked. To avoid this, a registered device SHOULD NOT rely solely on the CoAP Observe notifications. In particular, a registered device SHOULD also regularly poll the Authorization Server for the most current information about revoked Access Tokens, by sending GET requests to the TRL endpoint according to a related application policy.</t>
    </section>
    <section anchor="iana" numbered="true" toc="default">
      <name>IANA Considerations</name>
      <t>RFC EDITOR: Throughout this section, please replace [this document] with the RFC number of this specification and remove this note.</t>
      <t>This document has the following actions for IANA.</t>
      <section anchor="iana-media-type" numbered="true" toc="default">
        <name>Media Type Registrations</name>
        <t>IANA is asked to register the media type "application/ace-trl+cbor" for messages of the protocols defined in this document encoded in CBOR. This registration follows the procedures specified in <xref target="RFC6838" format="default"/>.</t>
        <t>Type name: application</t>
        <t>Subtype name: ace-trl+cbor</t>
        <t>Required parameters: N/A</t>
        <t>Optional parameters: N/A</t>
        <t>Encoding considerations: Must be encoded as CBOR map containing the protocol parameters defined in [this document].</t>
        <t>Security considerations: See <xref target="sec-security-considerations" format="default"/> of this document.</t>
        <t>Interoperability considerations: N/A</t>
        <t>Published specification: [this document]</t>
        <t>Applications that use this media type: The type is used by Authorization Servers, Clients and Resource Servers that support the notification of revoked Access Tokens, according to a Token Revocation List maintained by the Authorization Server as specified in [this document].</t>
        <t>Fragment identifier considerations: N/A</t>
        <t>Additional information: N/A</t>
        <t>Person &amp; email address to contact for further information: &lt;iesg@ietf.org&gt;</t>
        <t>Intended usage: COMMON</t>
        <t>Restrictions on usage: None</t>
        <t>Author: Marco Tiloca &lt;marco.tiloca@ri.se&gt;</t>
        <t>Change controller: IESG</t>
      </section>
      <section anchor="iana-content-type" numbered="true" toc="default">
        <name>CoAP Content-Formats Registry</name>
        <t>IANA is asked to add the following entry to the "CoAP Content-Formats" registry within the "CoRE Parameters" registry group.</t>
        <t>Media Type: application/ace-trl+cbor</t>
        <t>Encoding: -</t>
        <t>ID: TBD</t>
        <t>Reference: [this document]</t>
      </section>
      <section anchor="iana-token-revocation-list" numbered="true" toc="default">
        <name>ACE Token Revocation List Parameters Registry</name>
        <t>This specification establishes the "ACE Token Revocation List Parameters" IANA registry. The
registry has been created to use the "Expert Review" registration procedure <xref target="RFC8126" format="default"/>. Expert review guidelines are provided in <xref target="review" format="default"/>. It should be noted that, in addition to the expert review, some portions of the registry require a specification, potentially a Standards Track RFC, to be supplied as well.</t>
        <t>The columns of this registry are:</t>
        <ul spacing="normal">
          <li>Name: This is a descriptive name that enables easier reference to the item. The name MUST be unique. It is not used in the encoding.</li>
          <li>CBOR Value: This is the value used as CBOR abbreviation of the item. These values MUST be unique. The value can be a positive integer or a negative integer. Different ranges of values use different registration policies <xref target="RFC8126" format="default"/>. Integer values from -256 to 255 are designated as Standards Action. Integer values from -65536 to -257 and from 256 to 65535 are designated as Specification Required. Integer values greater than 65535 are designated as Expert Review. Integer values less than -65536 are marked as Private Use.</li>
          <li>CBOR Type: This contains the CBOR type of the item, or a pointer to the registry that defines its type, when that depends on another item.</li>
          <li>Reference: This contains a pointer to the public specification for the item.</li>
        </ul>
        <t>This registry has been initially populated by the values in <xref target="trl-registry-parameters" format="default"/>. The Reference column for all of these entries refers to this document.</t>
      </section>
      <section anchor="iana-token-revocation-list-errors" numbered="true" toc="default">
        <name>ACE Token Revocation List Errors</name>
        <t>This specification establishes the "ACE Token Revocation List Errors" IANA registry. The registry has been created to use the "Expert Review" registration procedure <xref target="RFC8126" format="default"/>. Expert review guidelines are provided in <xref target="review" format="default"/>. It should be noted that, in addition to the expert review, some portions of the registry require a specification, potentially a Standards Track RFC, to be supplied as well.</t>
        <t>The columns of this registry are:</t>
        <ul spacing="normal">
          <li>Value: The value to be used to identify the error. The value MUST be unique. The value can be a positive integer or a negative integer. Integer values between 0 and 255 are designated as Standards Track Document required. Integer values from 256 to 65535 are designated as Specification Required. Integer values greater than 65535 are designated as expert review. Integer values less than -65536 are marked as private use.</li>
          <li>Description: This field contains a brief description of the error.</li>
          <li>Reference: This field contains a pointer to the public specification defining the error, if one exists.</li>
        </ul>
        <t>This registry has been initially populated by the values in <xref target="error-types" format="default"/>. The Reference column for all of these entries refers to this document.</t>
      </section>
      <section anchor="review" numbered="true" toc="default">
        <name>Expert Review Instructions</name>
        <t>The IANA registries established in this document is defined as expert review. This section gives some general guidelines for what the experts should be looking for, but they are being designated as experts for a reason so they should be given substantial latitude.</t>
        <t>Expert reviewers should take into consideration the following points:</t>
        <ul spacing="normal">
          <li>Point squatting should be discouraged. Reviewers are encouraged to get sufficient information for registration requests to ensure that the usage is not going to duplicate one that is already registered and that the point is likely to be used in deployments. The zones tagged as private use are intended for testing purposes and closed environments, code points in other ranges should not be assigned for testing.</li>
          <li>Specifications are required for the standards track range of point assignment. Specifications should exist for specification required ranges, but early assignment before a specification is available is considered to be permissible. Specifications are needed for the first-come, first-serve range if they are expected to be used outside of closed environments in an interoperable way. When specifications are not provided, the description provided needs to have sufficient information to identify what the point is being used for.</li>
          <li>Experts should take into account the expected usage of fields when approving point assignment. The fact that there is a range for standards track documents does not mean that a standards track document cannot have points assigned outside of that range. The length of the encoded value should be weighed against how many code points of that length are left, the size of device it will be used on, and the number of code points left that encode to that size.</li>
        </ul>
      </section>
    </section>
  </middle>
  <back>
    <references>
      <name>References</name>
      <references>
        <name>Normative References</name>
        <reference anchor="I-D.ietf-ace-oauth-authz" xml:base="https://xml2rfc.tools.ietf.org/public/rfc/bibxml3/reference.I-D.ietf-ace-oauth-authz.xml" target="https://www.ietf.org/archive/id/draft-ietf-ace-oauth-authz-46.txt">
          <front>
            <title>Authentication and Authorization for Constrained Environments (ACE) using the OAuth 2.0 Framework (ACE-OAuth)</title>
            <author fullname="Ludwig Seitz">
              <organization>Combitech</organization>
            </author>
            <author fullname="Goeran Selander">
              <organization>Ericsson</organization>
            </author>
            <author fullname="Erik Wahlstroem">
	 </author>
            <author fullname="Samuel Erdtman">
              <organization>Spotify AB</organization>
            </author>
            <author fullname="Hannes Tschofenig">
              <organization>Arm Ltd.</organization>
            </author>
            <date month="November" day="8" year="2021"/>
            <abstract>
              <t>   This specification defines a framework for authentication and
   authorization in Internet of Things (IoT) environments called ACE-
   OAuth.  The framework is based on a set of building blocks including
   OAuth 2.0 and the Constrained Application Protocol (CoAP), thus
   transforming a well-known and widely used authorization solution into
   a form suitable for IoT devices.  Existing specifications are used
   where possible, but extensions are added and profiles are defined to
   better serve the IoT use cases.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-ace-oauth-authz-46"/>
        </reference>
        <reference anchor="I-D.ietf-core-conditional-attributes" xml:base="https://xml2rfc.tools.ietf.org/public/rfc/bibxml3/reference.I-D.ietf-core-conditional-attributes.xml" target="https://www.ietf.org/archive/id/draft-ietf-core-conditional-attributes-02.txt">
          <front>
            <title>Conditional Attributes for Constrained RESTful Environments</title>
            <author fullname="Michael Koster">
              <organization>Dogtiger Labs</organization>
            </author>
            <author fullname="Alan Soloway">
              <organization>Qualcomm Technologies</organization>
            </author>
            <author fullname="Bilhanan Silverajan">
              <organization>Tampere University</organization>
            </author>
            <date month="February" day="24" year="2022"/>
            <abstract>
              <t>   This specification defines Conditional Notification and Control
   Attributes that work with CoAP Observe (RFC7641).

Editor note

   The git repository for the draft is found at https://github.com/core-
   wg/conditional-attributes/

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-core-conditional-attributes-02"/>
        </reference>
        <reference anchor="RFC2119" target="https://www.rfc-editor.org/info/rfc2119" xml:base="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.2119.xml">
          <front>
            <title>Key words for use in RFCs to Indicate Requirement Levels</title>
            <author initials="S." surname="Bradner" fullname="S. Bradner">
              <organization/>
            </author>
            <date year="1997" month="March"/>
            <abstract>
              <t>In many standards track documents several words are used to signify the requirements in the specification.  These words are often capitalized. This document defines these words as they should be interpreted in IETF documents.  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="14"/>
          <seriesInfo name="RFC" value="2119"/>
          <seriesInfo name="DOI" value="10.17487/RFC2119"/>
        </reference>
        <reference anchor="RFC6749" target="https://www.rfc-editor.org/info/rfc6749" xml:base="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.6749.xml">
          <front>
            <title>The OAuth 2.0 Authorization Framework</title>
            <author initials="D." surname="Hardt" fullname="D. Hardt" role="editor">
              <organization/>
            </author>
            <date year="2012" month="October"/>
            <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="RFC6838" target="https://www.rfc-editor.org/info/rfc6838" xml:base="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.6838.xml">
          <front>
            <title>Media Type Specifications and Registration Procedures</title>
            <author initials="N." surname="Freed" fullname="N. Freed">
              <organization/>
            </author>
            <author initials="J." surname="Klensin" fullname="J. Klensin">
              <organization/>
            </author>
            <author initials="T." surname="Hansen" fullname="T. Hansen">
              <organization/>
            </author>
            <date year="2013" month="January"/>
            <abstract>
              <t>This document defines procedures for the specification and registration of media types for use in HTTP, MIME, and other Internet protocols.  This memo documents an Internet Best Current Practice.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="13"/>
          <seriesInfo name="RFC" value="6838"/>
          <seriesInfo name="DOI" value="10.17487/RFC6838"/>
        </reference>
        <reference anchor="RFC6920" target="https://www.rfc-editor.org/info/rfc6920" xml:base="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.6920.xml">
          <front>
            <title>Naming Things with Hashes</title>
            <author initials="S." surname="Farrell" fullname="S. Farrell">
              <organization/>
            </author>
            <author initials="D." surname="Kutscher" fullname="D. Kutscher">
              <organization/>
            </author>
            <author initials="C." surname="Dannewitz" fullname="C. Dannewitz">
              <organization/>
            </author>
            <author initials="B." surname="Ohlman" fullname="B. Ohlman">
              <organization/>
            </author>
            <author initials="A." surname="Keranen" fullname="A. Keranen">
              <organization/>
            </author>
            <author initials="P." surname="Hallam-Baker" fullname="P. Hallam-Baker">
              <organization/>
            </author>
            <date year="2013" month="April"/>
            <abstract>
              <t>This document defines a set of ways to identify a thing (a digital object in this case) using the output from a hash function.  It specifies a new URI scheme for this purpose, a way to map these to HTTP URLs, and binary and human-speakable formats for these names. The various formats are designed to support, but not require, a strong link to the referenced object, such that the referenced object may be authenticated to the same degree as the reference to it.  The reason for this work is to standardise current uses of hash outputs in URLs and to support new information-centric applications and other uses of hash outputs in protocols.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6920"/>
          <seriesInfo name="DOI" value="10.17487/RFC6920"/>
        </reference>
        <reference anchor="RFC7252" target="https://www.rfc-editor.org/info/rfc7252" xml:base="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.7252.xml">
          <front>
            <title>The Constrained Application Protocol (CoAP)</title>
            <author initials="Z." surname="Shelby" fullname="Z. Shelby">
              <organization/>
            </author>
            <author initials="K." surname="Hartke" fullname="K. Hartke">
              <organization/>
            </author>
            <author initials="C." surname="Bormann" fullname="C. Bormann">
              <organization/>
            </author>
            <date year="2014" month="June"/>
            <abstract>
              <t>The Constrained Application Protocol (CoAP) is a specialized web transfer protocol for use with constrained nodes and constrained (e.g., low-power, lossy) networks.  The nodes often have 8-bit microcontrollers with small amounts of ROM and RAM, while constrained networks such as IPv6 over Low-Power Wireless Personal Area Networks (6LoWPANs) often have high packet error rates and a typical throughput of 10s of kbit/s.  The protocol is designed for machine- to-machine (M2M) applications such as smart energy and building automation.</t>
              <t>CoAP provides a request/response interaction model between application endpoints, supports built-in discovery of services and resources, and includes key concepts of the Web such as URIs and Internet media types.  CoAP is designed to easily interface with HTTP for integration with the Web while meeting specialized requirements such as multicast support, very low overhead, and simplicity for constrained environments.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7252"/>
          <seriesInfo name="DOI" value="10.17487/RFC7252"/>
        </reference>
        <reference anchor="RFC7641" target="https://www.rfc-editor.org/info/rfc7641" xml:base="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.7641.xml">
          <front>
            <title>Observing Resources in the Constrained Application Protocol (CoAP)</title>
            <author initials="K." surname="Hartke" fullname="K. Hartke">
              <organization/>
            </author>
            <date year="2015" month="September"/>
            <abstract>
              <t>The Constrained Application Protocol (CoAP) is a RESTful application protocol for constrained nodes and networks.  The state of a resource on a CoAP server can change over time.  This document specifies a simple protocol extension for CoAP that enables CoAP clients to "observe" resources, i.e., to retrieve a representation of a resource and keep this representation updated by the server over a period of time.  The protocol follows a best-effort approach for sending new representations to clients and provides eventual consistency between the state observed by each client and the actual resource state at the server.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7641"/>
          <seriesInfo name="DOI" value="10.17487/RFC7641"/>
        </reference>
        <reference anchor="RFC8259" target="https://www.rfc-editor.org/info/rfc8259" xml:base="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.8259.xml">
          <front>
            <title>The JavaScript Object Notation (JSON) Data Interchange Format</title>
            <author initials="T." surname="Bray" fullname="T. Bray" role="editor">
              <organization/>
            </author>
            <date year="2017" month="December"/>
            <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="RFC7519" target="https://www.rfc-editor.org/info/rfc7519" xml:base="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.7519.xml">
          <front>
            <title>JSON Web Token (JWT)</title>
            <author initials="M." surname="Jones" fullname="M. Jones">
              <organization/>
            </author>
            <author initials="J." surname="Bradley" fullname="J. Bradley">
              <organization/>
            </author>
            <author initials="N." surname="Sakimura" fullname="N. Sakimura">
              <organization/>
            </author>
            <date year="2015" month="May"/>
            <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="RFC8126" target="https://www.rfc-editor.org/info/rfc8126" xml:base="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.8126.xml">
          <front>
            <title>Guidelines for Writing an IANA Considerations Section in RFCs</title>
            <author initials="M." surname="Cotton" fullname="M. Cotton">
              <organization/>
            </author>
            <author initials="B." surname="Leiba" fullname="B. Leiba">
              <organization/>
            </author>
            <author initials="T." surname="Narten" fullname="T. Narten">
              <organization/>
            </author>
            <date year="2017" month="June"/>
            <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="RFC8174" target="https://www.rfc-editor.org/info/rfc8174" xml:base="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.8174.xml">
          <front>
            <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
            <author initials="B." surname="Leiba" fullname="B. Leiba">
              <organization/>
            </author>
            <date year="2017" month="May"/>
            <abstract>
              <t>RFC 2119 specifies common key words that may be used in protocol  specifications.  This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the  defined special meanings.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="8174"/>
          <seriesInfo name="DOI" value="10.17487/RFC8174"/>
        </reference>
        <reference anchor="RFC8392" target="https://www.rfc-editor.org/info/rfc8392" xml:base="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.8392.xml">
          <front>
            <title>CBOR Web Token (CWT)</title>
            <author initials="M." surname="Jones" fullname="M. Jones">
              <organization/>
            </author>
            <author initials="E." surname="Wahlstroem" fullname="E. Wahlstroem">
              <organization/>
            </author>
            <author initials="S." surname="Erdtman" fullname="S. Erdtman">
              <organization/>
            </author>
            <author initials="H." surname="Tschofenig" fullname="H. Tschofenig">
              <organization/>
            </author>
            <date year="2018" month="May"/>
            <abstract>
              <t>CBOR Web Token (CWT) is a compact means of representing claims to be transferred between two parties.  The claims in a CWT are encoded in the Concise Binary Object Representation (CBOR), and CBOR Object Signing and Encryption (COSE) is used for added application-layer security protection.  A claim is a piece of information asserted about a subject and is represented as a name/value pair consisting of a claim name and a claim value.  CWT is derived from JSON Web Token (JWT) but uses CBOR rather than JSON.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8392"/>
          <seriesInfo name="DOI" value="10.17487/RFC8392"/>
        </reference>
        <reference anchor="RFC8610" target="https://www.rfc-editor.org/info/rfc8610" xml:base="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.8610.xml">
          <front>
            <title>Concise Data Definition Language (CDDL): A Notational Convention to Express Concise Binary Object Representation (CBOR) and JSON Data Structures</title>
            <author initials="H." surname="Birkholz" fullname="H. Birkholz">
              <organization/>
            </author>
            <author initials="C." surname="Vigano" fullname="C. Vigano">
              <organization/>
            </author>
            <author initials="C." surname="Bormann" fullname="C. Bormann">
              <organization/>
            </author>
            <date year="2019" month="June"/>
            <abstract>
              <t>This document proposes a notational convention to express Concise Binary Object Representation (CBOR) data structures (RFC 7049).  Its main goal is to provide an easy and unambiguous way to express structures for protocol messages and data formats that use CBOR or JSON.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8610"/>
          <seriesInfo name="DOI" value="10.17487/RFC8610"/>
        </reference>
        <reference anchor="RFC8949" target="https://www.rfc-editor.org/info/rfc8949" xml:base="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.8949.xml">
          <front>
            <title>Concise Binary Object Representation (CBOR)</title>
            <author initials="C." surname="Bormann" fullname="C. Bormann">
              <organization/>
            </author>
            <author initials="P." surname="Hoffman" fullname="P. Hoffman">
              <organization/>
            </author>
            <date year="2020" month="December"/>
            <abstract>
              <t>The Concise Binary Object Representation (CBOR) is a data format whose design goals include the possibility of extremely small code size, fairly small message size, and extensibility without the need for version negotiation. These design goals make it different from earlier binary serializations such as ASN.1 and MessagePack.</t>
              <t>This document obsoletes RFC 7049, providing editorial improvements, new details, and errata fixes while keeping full compatibility with the interchange format of RFC 7049.  It does not create a new version of the format.</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="94"/>
          <seriesInfo name="RFC" value="8949"/>
          <seriesInfo name="DOI" value="10.17487/RFC8949"/>
        </reference>
        <reference anchor="Named.Information.Hash.Algorithm" target="https://www.iana.org/assignments/named-information/named-information.xhtml">
          <front>
            <title>Named Information Hash Algorithm</title>
            <author>
              <organization>IANA</organization>
            </author>
            <date/>
          </front>
        </reference>
      </references>
      <references>
        <name>Informative References</name>
        <reference anchor="RFC7009" target="https://www.rfc-editor.org/info/rfc7009" xml:base="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.7009.xml">
          <front>
            <title>OAuth 2.0 Token Revocation</title>
            <author initials="T." surname="Lodderstedt" fullname="T. Lodderstedt" role="editor">
              <organization/>
            </author>
            <author initials="S." surname="Dronia" fullname="S. Dronia">
              <organization/>
            </author>
            <author initials="M." surname="Scurtescu" fullname="M. Scurtescu">
              <organization/>
            </author>
            <date year="2013" month="August"/>
            <abstract>
              <t>This document proposes an additional endpoint for OAuth authorization servers, which allows clients to notify the authorization server that a previously obtained refresh or access token is no longer needed. This allows the authorization server to clean up security credentials.  A revocation request will invalidate the actual token and, if applicable, other tokens based on the same authorization grant.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7009"/>
          <seriesInfo name="DOI" value="10.17487/RFC7009"/>
        </reference>
        <reference anchor="I-D.bormann-t2trg-stp" xml:base="https://xml2rfc.tools.ietf.org/public/rfc/bibxml3/reference.I-D.bormann-t2trg-stp.xml" target="https://www.ietf.org/archive/id/draft-bormann-t2trg-stp-03.txt">
          <front>
            <title>The Series Transfer Pattern (STP)</title>
            <author fullname="Carsten Bormann">
              <organization>Universität Bremen TZI</organization>
            </author>
            <author fullname="Klaus Hartke">
              <organization>Ericsson</organization>
            </author>
            <date month="April" day="7" year="2020"/>
            <abstract>
              <t>   Many applications make use of Series of data items, i.e., an array of
   data items where new items can be added over time.  Where such Series
   are to be made available using REST protocols such as CoAP or HTTP,
   the Series has to be mapped into a structure of one or more resources
   and a protocol for a client to obtain the Series and to learn about
   new items.

   Various protocols have been standardized that make Series-shaped data
   available, with rather different properties and objectives.  The
   present document is an attempt to extract a common underlying pattern
   and to define media types and an access scheme that can be used right
   away for further protocols that provide Series-shaped data.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-bormann-t2trg-stp-03"/>
        </reference>
      </references>
    </references>
    <section anchor="sec-series-pattern" numbered="true" toc="default">
      <name>On using the Series Transfer Pattern</name>
      <t>Performing a diff query of the TRL as specified in <xref target="ssec-trl-diff-query" format="default"/> is a usage example of the Series Transfer Pattern defined in <xref target="I-D.bormann-t2trg-stp" format="default"/>.</t>
      <t>That is, a diff query enables the transfer of a series of TRL updates, with the Authorization Server specifying U &lt;= N_MAX diff entries as the U most recent  updates to the portion of the TRL pertaining to a registered device.</t>
      <t>For each registered device, the Authorization Server maintains an update collection of maximum N_MAX items. Each time the TRL changes, the Authorization Server performs the following operations for each registered device.</t>
      <ol spacing="normal" type="1"><li>The Authorization Server considers the portion of the TRL pertaining to that registered device. If the TRL portion is not affected by this TRL update, the Authorization Server stops the processing for that registered device.</li>
        <li>Otherwise, the Authorization Server creates two sets 'trl_patch' of token hashes, i.e., one  "removed" set and one "added" set, as related to this TRL update.</li>
        <li>The Authorization Server fills the two sets with the token hashes of the removed and added Access Tokens, respectively, from/to the TRL portion from step 1.</li>
        <li>The Authorization Server creates a new series item including the two sets from step 3, and adds the series item to the update collection associated with the registered device.</li>
      </ol>
      <t>When responding to a diff query request from a registered device (see <xref target="ssec-trl-diff-query" format="default"/>), 'diff-set' is a subset of the collection associated with the requester, where each 'diff_entry' record is a series item from that collection. Note that 'diff-set' specifies the whole current collection when the value of U is equal to SIZE, i.e., the current number of series items in the collection.</t>
      <t>The value N of the query parameter 'diff' in the GET request allows the requester and the Authorization Server to trade the amount of provided information with the latency of the information transfer.</t>
      <t>Since the collection associated with each registered device includes up to N_MAX series item, the Authorization Server deletes the oldest series item when a new one is generated and added to the end of the collection, due to a new TRL update pertaining to that registered device. This addresses the question "When can the server decide to no longer retain older items?" in <xref section="3.2" sectionFormat="of" target="I-D.bormann-t2trg-stp" format="default"/>.</t>
    </section>
    <section anchor="sec-cursor-pattern" numbered="true" toc="default">
      <name>Usage of the "Cursor" Pattern</name>
      <t>This section defines how the execution of a diff query of the TRL specified in <xref target="ssec-trl-diff-query" format="default"/> can be extended, by using the "Cursor" pattern of the Series Transfer Pattern (see <xref section="3.3" sectionFormat="of" target="I-D.bormann-t2trg-stp" format="default"/>).</t>
      <t>[ TODO</t>
      <t>Merge what is defined below into the document body.</t>
      <ul spacing="normal">
        <li>What is defined below for "Full Query Response" becomes part of the full query processing in the document body. The successful response payload is a CBOR map if the AS supports both the "Diff Query" mode and the "Cursor" pattern, or just the CBOR array full-set otherwise.</li>
        <li>The diff-query processing in the document body becomes as defined below for "Diff Query Request" and "Diff Query Response". The successful response payload is a CBOR map if the AS supports both the "Diff Query" mode and the "Cursor" pattern, or just the CBOR array diff-set otherwise.</li>
        <li>An example using also the "Cursor" pattern can be added in "Interaction Examples".</li>
      </ul>
      <t>]</t>
      <t>This has two benefits. First, the Authorization Server can avoid excessively big latencies when several diff entries have to be transferred, by delivering one adjacent subset at the time, in different diff query responses. Second, a requester can retrieve diff entries associated with TRL updates that, even if not the most recent ones, occurred after a TRL update indicated as reference point.</t>
      <t>To this end, each series item X in an update collection is also associated with an unsigned integer 'index', with value the absolute counter of series items added to that collection until and including X, minus 1. That is, the first series item added to a collection has 'index' with value 0. Then, the values of 'index' are used as cursor information.</t>
      <t>Within an update collection, the unsigned integer LAST_INDEX denotes the value of 'index' associated with the latest added series item, i.e., the total number of series items added to the collection minus 1.</t>
      <t>Furthermore, the Authorization Server defines an unsigned integer MAX_DIFF_BATCH &lt;= N_MAX, specifying the maximum number of diff entries to be included in a single diff query response. If supporting diff queries, the Authorization Server SHOULD provide registered devices and administrators with the value of MAX_DIFF_BATCH, upon their registration (see <xref target="sec-registration" format="default"/>).</t>
      <t>Finally, the full query and diff query exchanges defined in <xref target="ssec-trl-full-query" format="default"/> and <xref target="ssec-trl-diff-query" format="default"/> are extended as follows.</t>
      <t>In particular, successful responses from the TRL endpoint MUST use the Content-Format "application/ace-trl+cbor" defined in <xref target="iana-content-type" format="default"/> of this specification.</t>
      <section anchor="ssec-trl-full-query-extended-req" numbered="true" toc="default">
        <name>Full Query Request</name>
        <t>No changes apply to what is defined in <xref target="ssec-trl-full-query" format="default"/>.</t>
      </section>
      <section anchor="full-query-response" numbered="true" toc="default">
        <name>Full Query Response</name>
        <t>When sending a 2.05 (Content) response to a full query request (see <xref target="ssec-trl-full-query-extended-req" format="default"/>), the response payload includes a CBOR map with the following fields, whose CBOR labels are defined in <xref target="trl-registry-parameters" format="default"/>.</t>
        <ul spacing="normal">
          <li>'full-set': this field MUST include a CBOR array of token hashes. The CBOR array is populated and formatted as defined for the CBOR array 'full-set' in <xref target="ssec-trl-full-query" format="default"/>.</li>
          <li>
            <t>'cursor': this field MUST include either the CBOR simple value "null" (0xf6) or a CBOR unsigned integer.  </t>
            <t>
The CBOR simple value "null" MUST be used to indicate that there are currently no TRL updates pertinent to the requester, i.e., the update collection for that requester is empty. This is the case from when the requester registers at the Authorization Server until a first update pertaining that requester occurs to the TRL.  </t>
            <t>
Otherwise, the field MUST include a CBOR unsigned integer, encoding the 'index' value of the last series item in the collection, as corresponding to the most recent update pertaining to the requester occurred to the TRL.</t>
          </li>
        </ul>
      </section>
      <section anchor="ssec-trl-diff-query-extended-req" numbered="true" toc="default">
        <name>Diff Query Request</name>
        <t>In addition to the query parameter 'diff' (see <xref target="ssec-trl-diff-query" format="default"/>), the requester can specify a query parameter 'cursor', with value an unsigned integer.</t>
        <t>The Authorization Server MUST return a 4.00 (Bad Request) response in case the query parameter 'cursor' is present but the query parameter 'diff' is not present. The response MUST have Content-Format "application/ace-trl+cbor". The payload of the response is a CBOR map, which MUST include the 'error' field with value 1 ("Invalid set of parameters") and MAY include the 'error_description' field to provide additional context.</t>
      </section>
      <section anchor="diff-query-response" numbered="true" toc="default">
        <name>Diff Query Response</name>
        <t>The Authorization Server composes a response to a diff query request (see <xref target="ssec-trl-diff-query-extended-req" format="default"/>) as follows, depending on the parameters specified in the request and on the current status of the update collection for the requester.</t>
        <section anchor="empty-collection" numbered="true" toc="default">
          <name>Empty Collection</name>
          <t>If the collection associated with the requester has no elements, the Authorization Server returns a 2.05 (Content) diff query response.</t>
          <t>The response payload includes a CBOR map with the following fields, whose CBOR labels are defined in <xref target="trl-registry-parameters" format="default"/>.</t>
          <ul spacing="normal">
            <li>'diff-set': this field MUST include an empty CBOR array.</li>
            <li>'cursor': this field MUST include the CBOR simple value "null" (0xf6).</li>
            <li>'more': this field MUST include the CBOR simple value "false" (0xf4).</li>
          </ul>
        </section>
        <section anchor="sec-cursor-pattern-response-to-no-cursor-request" numbered="true" toc="default">
          <name>Cursor Not Specified in the Diff Query Request</name>
          <t>If the update collection associated with the requester is not empty and the diff query request does not include the query parameter 'cursor', the Authorization Server returns a 2.05 (Content) diff query response.</t>
          <t>The response payload includes a CBOR map with the following fields, whose CBOR labels are defined in <xref target="trl-registry-parameters" format="default"/>.</t>
          <ul spacing="normal">
            <li>
              <t>'diff-set': this field MUST include a CBOR array, containing L = min(U, MAX_DIFF_BATCH) diff entries. In particular, the CBOR array is populated as follows.  </t>
              <ul spacing="normal">
                <li>If U &lt;= MAX_DIFF_BATCH, these diff entries are the last series items in the collection associated with the requester, corresponding to the L most recent TRL updates pertaining to the requester.</li>
                <li>If U &gt; MAX_DIFF_BATCH, these diff entries are the eldest of the last U series items in the collection associated with the requester, as corresponding to the first L of the U most recent TRL updates pertaining to the requester.</li>
              </ul>
              <t>
The 'diff-set' CBOR array as well as the individual diff entries have the same format specified in <xref target="cddl-diff" format="default"/> and used for the response payload defined in <xref target="ssec-trl-diff-query" format="default"/>.</t>
            </li>
            <li>
              <t>'cursor': this field MUST include a CBOR unsigned integer. This takes the 'index' value of the series element of the collection included as first diff entry in the 'diff-set' CBOR array. That is, it takes the 'index' value of the series item in the collection corresponding to the most recent update pertaining to the requester and returned in this diff query response.  </t>
              <t>
Note that 'cursor' takes the same 'index' value of the last series item in the collection when U &lt;= MAX_DIFF_BATCH.</t>
            </li>
            <li>
              <t>'more': this field MUST include the CBOR simple value "false" (0xf4) if U &lt;= MAX_DIFF_BATCH, or the CBOR simple value "true" (0xf5) otherwise.  </t>
              <t>
If 'more' has value "true", the requester can send a follow-up diff query request including the query parameter 'cursor', with the same value of the 'cursor' field included in this diff query response. As defined in <xref target="sec-cursor-pattern-response-to-with-cursor-request" format="default"/>, this would result in the Authorization Server transferring the following subset of series items as diff entries, i.e., resuming from where interrupted in the previous transfer.</t>
            </li>
          </ul>
        </section>
        <section anchor="sec-cursor-pattern-response-to-with-cursor-request" numbered="true" toc="default">
          <name>Cursor Specified in the Diff Query Request</name>
          <t>If the update collection associated with the requester is not empty and the diff query request includes the query parameter 'cursor' with value P, the Authorization Server proceeds as follows.</t>
          <ul spacing="normal">
            <li>
              <t>The Authorization Server MUST return a 4.00 (Bad Request) response in case the query parameter 'cursor' specifies a value other than 0 or than a positive integer.  </t>
              <t>
The response MUST have Content-Format "application/ace-trl+cbor". The payload of the response is a CBOR map, which MUST include the 'error' field with value 0 ("Invalid parameter value") and MAY include the 'error_description' field to provide additional context.</t>
            </li>
            <li>
              <t>The Authorization Server MUST return a 4.00 (Bad Request) response in case the 'cursor' parameter specifies a value strictly greater than the current LAST_INDEX for the update collection associated with the requester.  </t>
              <t>
The response MUST have Content-Format "application/ace-trl+cbor". The payload of the response is a CBOR map, which MUST include the 'error' field with value 2 ("Out of bound cursor value") and the 'cursor' field with value the current LAST_INDEX for the update collection associated with the requester. The CBOR map MAY also include the 'error_description' field to provide additional context.</t>
            </li>
            <li>
              <t>The Authorization Server returns a 2.05 (Content) diff query response formatted as follows, in case the series item X with 'index' having value P and the series item Y with 'index' having value P+1 are both not found in the collection associated with the requester. This occurs when the item Y (and possibly further ones after it) has been previously removed from the history of updates for that requester (see <xref target="sec-series-pattern" format="default"/>).  </t>
              <t>
The response payload includes a CBOR map with the following fields, whose CBOR labels are defined in <xref target="trl-registry-parameters" format="default"/>.  </t>
              <ul spacing="normal">
                <li>'diff-set': this field MUST include an empty CBOR array.</li>
                <li>'cursor': this field MUST include the CBOR simple value "null" (0xf6).</li>
                <li>'more': this field MUST include the CBOR simple value "true" (0xf5).</li>
              </ul>
              <t>
With the combination ('cursor', 'more') = ("null", "true"), the Authorization Server is signaling that the update collection is in fact not empty, but that one or more series items have been lost due to their removal. These include the item with 'index' value P+1, that the requester wished to obtain as the first one following the specified reference point with 'index' value P.  </t>
              <t>
When receiving this diff query response, the requester should send a new full query request to the Authorization Server, in order to fully retrieve the current pertaining portion of the TRL.</t>
            </li>
            <li>
              <t>The Authorization Server returns a 2.05 (Content) diff query response formatted as follows, in case i) the series item X with 'index' having value P is found in the collection associated with the requester; or ii) the series item X is not found and the series item Y with 'index' having value P+1 is found in the collection associated with the requester.  </t>
              <t>
The response payload includes a CBOR map with the following fields, whose CBOR labels are defined in <xref target="trl-registry-parameters" format="default"/>.  </t>
              <ul spacing="normal">
                <li>
                  <t>'diff-set': this field MUST include a CBOR array, containing L = min(SUB_U, MAX_DIFF_BATCH) diff entries, where SUB_U = min(NUM, SUB_SIZE), and SUB_SIZE is the number of series items in the collection following the series item X.      </t>
                  <t>
That is, these are the L updates pertaining to the requester that immediately follow the series item X indicated as reference point. In particular, the CBOR array is populated as follows.      </t>
                  <ul spacing="normal">
                    <li>If SUB_U &lt;= MAX_DIFF_BATCH, these diff entries are the last series items in the collection associated with the requester, corresponding to the L most recent TRL updates pertaining to the requester.</li>
                    <li>If SUB_U &gt; MAX_DIFF_BATCH, these diff entries are the eldest of the last SUB_U series items in the collection associated with the requester, corresponding to the first L of the SUB_U most recent TRL updates pertaining to the requester.</li>
                  </ul>
                  <t>
The 'diff-set' CBOR array as well as the individual diff entries have the same format specified in <xref target="cddl-diff" format="default"/> and used for the response payload defined in <xref target="ssec-trl-diff-query" format="default"/>.</t>
                </li>
                <li>
                  <t>'cursor': this field MUST include a CBOR unsigned integer. In particular:      </t>
                  <ul spacing="normal">
                    <li>If L is equal to 0, i.e., the series item X is the last one in the collection, 'cursor' takes the same 'index' value of the last series item in the collection.</li>
                    <li>If L is different than 0, 'cursor' takes the 'index' value of the series element of the collection included as first diff entry in the 'diff-set' CBOR array. That is, it takes the 'index' value of the series item in the collection corresponding to the most recent update pertaining to the requester and returned in this diff query response.</li>
                  </ul>
                  <t>
Note that 'cursor' takes the same 'index' value of the last series item in the collection when SUB_U &lt;= MAX_DIFF_BATCH.</t>
                </li>
                <li>
                  <t>'more': this field MUST include the CBOR simple value "false" (0xf4) if SUB_U &lt;= MAX_DIFF_BATCH, or the CBOR simple value "true" (0xf5) otherwise.      </t>
                  <t>
If 'more' has value "true", the requester can send a follow-up diff query request including the query parameter 'cursor', with the same value of the 'cursor' field specified in this diff query response. This would result in the Authorization Server transferring the following subset of series items as diff entries, i.e., resuming from where interrupted in the previous transfer.</t>
                </li>
              </ul>
            </li>
          </ul>
        </section>
      </section>
    </section>
    <section anchor="sec-document-updates" numbered="true" toc="default">
      <name>Document Updates</name>
      <t>RFC EDITOR: Please remove this section.</t>
      <section anchor="sec-0-01" numbered="true" toc="default">
        <name>Version -00 to -01</name>
        <ul spacing="normal">
          <li>Added actions to perform upon receiving responses from the TRL endpoint.</li>
          <li>Fixed off-by-one error when using the "Cursor" pattern.</li>
          <li>Improved error handling, with registered error codes.</li>
          <li>Section restructuring (full- and diff-query as self-standing sections).</li>
          <li>Renamed identifiers and CBOR parameters.</li>
          <li>Clarifications and editorial improvements.</li>
        </ul>
      </section>
    </section>
    <section numbered="false" anchor="acknowldegment" toc="default">
      <name>Acknowledgments</name>
      <t>The authors sincerely thank Carsten Bormann, Benjamin Kaduk, Marco Rasori, Michael Richardson, Jim Schaad, Goeran Selander and Travis Spencer for their comments and feedback.</t>
      <t>The work on this document has been partly supported by VINNOVA and the Celtic-Next project CRITISEC; and by the H2020 project SIFIS-Home (Grant agreement 952652).</t>
    </section>
  </back>
  <!-- ##markdown-source:
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
XSOY4MuDIV5HmpnL7uyK1nb6bydi5lRDOxyPgZXiTYOVcO3KYOlEmuUu1Pir
eWe8s8Kuc64sdSrIgjmnvGAOB+BGp0QFKgkXhdowMUrXwqExNTB3TocK1m8W
5WlssGEi4rnD0kfkRrGnx2KbZMy1lQb6hDwUIJvGFWm41PmpmCvnem+q8Vbq
R0XIltz252SHdnkyW7vIFXpGr+tueasuwNpah7VaZeQFbU+dp2wmk6n1aTSJ
oXDYqiKcJfidaIkGy9/9gYxu0IGWWP0AnbYmbOeW2WwUmrHiG41jZJkccsWj
Xmjz9WVl1qwDvK7HWDN/5wFsLEnEvq3krYPJmXEiDyD3lcDCVQhk/Y2GMVRT
kQ0acXj4rrVX93Wq/klNrS4rrLCmyy9sy+W0ZpYB5N42UuvEeHDJGa6RwqsY
YkxHSzgoVLOeDX/quCUVMYS5YxXgJCs4EQ0dAdJ5ySmvJdd/uKwLFpSH05aO
KQMA9CmSFDGfZ0oTQkUriUd0kRpQMcsSo206iByF43esJNfScwkNa9METMAP
HuaE6VJnZtoEhBXhyzgJpsIAMIk6UdHU0s4sEvPeVNKKmlzfMnfciVIQ1zNs
tpBynp59XrEQF3I0qljceQKk6EM9IbO2mFin+FZxD3EqNuMfgBXglsiWuVba
jVbX6ku7PammEUswuZkzUqYoqenNhNm+2/DtthRUt9oq9O0MWN8+YkcNvJqz
ILWNnb3m2DYCrbcF35jtrcUFv6MNn2emZAdxiyyl2NsDbhUtLVVOdQEarSPb
hWp02Xw5yN6qNVZ/Fvvaloebht5UQ/ZHtnTyO77syobTDgoqCFa7atMi+jdT
VXCAVkWlpj0geNos8/m2jE2Wm0vF3CCIeS7VVtGsnKi+hjjJ+UuBCVRCTOto
nc0JOTRRs7zpxv6OXNl3Us29JrPHSeePgLRkfEjIl+JJYdADbL5Fv17Pzjmv
yU7y+3kspN9bYyCVd43R6f6LXA2rQRK1hj08bxr00regW3fNWveeVwmKzSTv
9sygllKbhkDabntRBKYWK+hW0GhlxnDQjmvrwk8tt8lH13X9eXu28353u5Z0
tMYbW9N5Pae0tiVMHs2GHlTYXwxNnMFusRIc21WMOJwAw2BPDKfGD0yItA0r
wYbBw9lOub8reSH6iwP4gtqnMOxWjZBaOq/hCG66rORw1Osu8v2ugwaHeeBk
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

-->

</rfc>
