<?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-rfc version  (Ruby 3.2.3) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-ace-workflow-and-params-03" category="std" consensus="true" submissionType="IETF" updates="9200, 9202, 9203, 9431" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.21.0 -->
  <front>
    <title abbrev="Alternative ACE Workflow and Parameters">Alternative Workflow and OAuth Parameters for the Authentication and Authorization for Constrained Environments (ACE) Framework</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-ace-workflow-and-params-03"/>
    <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="G." surname="Selander" fullname="Göran Selander">
      <organization>Ericsson AB</organization>
      <address>
        <postal>
          <street>Torshamnsgatan 23</street>
          <city>Kista</city>
          <code>16440 Stockholm</code>
          <country>Sweden</country>
        </postal>
        <email>goran.selander@ericsson.com</email>
      </address>
    </author>
    <date year="2024" month="October" day="21"/>
    <area>Security</area>
    <workgroup>ACE Working Group</workgroup>
    <keyword>Internet-Draft</keyword>
    <abstract>
      <t>This document updates the Authentication and Authorization for Constrained Environments Framework (ACE, RFC 9200) as follows. First, it defines a new, alternative workflow that the authorization server can use for uploading an access token to a resource server on behalf of the client. Second, it defines new parameters and encodings for the OAuth 2.0 token endpoint at the authorization server. Third, it defines a method for the ACE framework to enforce bidirectional access control by means of a single access token. Fourth, it amends two of the requirements on profiles of the framework. Finally, it deprecates the original payload format of error responses that convey an error code, when CBOR is used to encode message payloads. For such error responses, it defines a new payload format aligned with RFC 9290, thus updating in this respect also the profiles of ACE defined in RFC 9202, RFC 9203, and RFC 9431.</t>
    </abstract>
    <note removeInRFC="true">
      <name>About This Document</name>
      <t>
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-ietf-ace-workflow-and-params/"/>.
      </t>
      <t>
        Discussion of this document takes place on the
        Authentication and Authorization for Constrained Environments (ace) Working Group mailing list (<eref target="mailto:ace@ietf.org"/>),
        which is archived at <eref target="https://mailarchive.ietf.org/arch/browse/ace/"/>.
        Subscribe at <eref target="https://www.ietf.org/mailman/listinfo/ace/"/>.
      </t>
      <t>Source for this draft and an issue tracker can be found at
        <eref target="https://github.com/ace-wg/ace-workflow-and-params"/>.</t>
    </note>
  </front>
  <middle>
    <section anchor="intro">
      <name>Introduction</name>
      <t>The Authentication and Authorization for Constrained Environments (ACE) framework <xref target="RFC9200"/> defines an architecture to enforce access control for constrained devices. A client (C) requests an assertion of granted permissions from an authorization server (AS) in the form of an access token, then uploads the access token to the target resource server (RS), and finally accesses protected resources at the RS according to the permissions specified in the access token.</t>
      <t>The framework has as main building blocks the OAuth 2.0 framework <xref target="RFC6749"/>, the Constrained Application Protocol (CoAP) <xref target="RFC7252"/> for message transfer, Concise Binary Object Representation (CBOR) <xref target="RFC8949"/> for compact encoding, and CBOR Object Signing and Encryption (COSE) <xref target="RFC9052"/><xref target="RFC9053"/> for self-contained protection of access tokens. In addition, separate profile documents define in detail how the participants in the ACE architecture communicate, especially as to the security protocols that they use.</t>
      <t>This document updates <xref target="RFC9200"/> as follows.</t>
      <ul spacing="normal">
        <li>
          <t>It defines a new, alternative protocol workflow for the ACE framework (see <xref target="sec-workflow"/>), according to which the AS uploads the access token to the RS on behalf of C, and then informs C about the outcome. The new workflow is especially convenient in deployments where the communication leg between C and the RS is constrained, but the communication leg between the AS and the RS is not.  </t>
          <t>
The new workflow has no ambition to replace the original workflow. The AS can use one workflow or the other depending, for example, on the specific RS for which an access token has been issued and the nature of the communication leg with that RS.</t>
        </li>
        <li>
          <t>It defines additional parameters and encodings for the OAuth 2.0 token endpoint at the AS (see <xref target="sec-parameters"/>). These include:  </t>
          <ul spacing="normal">
            <li>
              <t>"token_upload", used by C to inform the AS that it opts in to use the new ACE workflow, and by the AS to inform C about the outcome of the token uploading to the RS per the new workflow.</t>
            </li>
            <li>
              <t>"token_hash", used by the AS to provide C with a token hash, corresponding to an access token that the AS has issued for C and has successfully uploaded to the RS on behalf of C per the new ACE workflow.</t>
            </li>
            <li>
              <t>"to_rs", used by C to provide the AS with information to relay to the RS, upon asking the AS to upload the access token to the RS per the new ACE workflow. Its specific use with the OSCORE profile <xref target="RFC9203"/> is also defined, thereby effectively enabling the use of the new ACE workflow for that profile.</t>
            </li>
            <li>
              <t>"from_rs", used by the AS to provide C with information to relay from the RS, after the AS has successfully uploaded the access token to the RS per the new ACE workflow. Its specific use with the OSCORE profile <xref target="RFC9203"/> is also defined, thereby effectively enabling the use of the new ACE workflow for that profile.</t>
            </li>
            <li>
              <t>"rs_cnf2", used by the AS to provide C with the public keys of the RSs in the group-audience for which the access token is issued (see <xref section="6.9" sectionFormat="of" target="RFC9200"/>).</t>
            </li>
            <li>
              <t>"audience2", used by the AS to provide C with the identifiers of the RSs in the group-audience for which the access token is issued.</t>
            </li>
            <li>
              <t>"anchor_cnf", used by the AS to provide C with the public keys of trust anchors, which C can use to validate the public key of an RS (e.g., as provided in the "rs_cnf" parameter defined in <xref target="RFC9201"/> or in the "rs_cnf2" parameter defined in this document).</t>
            </li>
            <li>
              <t>"token_series_id", used by the AS to provide C with the identifier of a token series, and by C to ask the AS for a new access token in the same token series that dynamically updates access rights. A corresponding access token claim, namely "token_series_id", is also defined.</t>
            </li>
            <li>
              <t>"rev_audience", used by C to provide the AS with an identifier of itself as a reverse audience, and by the AS to possibly confirm that identifier in a response to C. A corresponding access token claim, namely "rev_aud", is also defined.</t>
            </li>
            <li>
              <t>"rev_scope", used by C to ask the AS that the requested access token specifies additional access rights as a reverse scope, allowing the access token's audience to accordingly access protected resources at C. This parameter is also used by the AS to provide C with the access rights that are actually granted as reverse scope to the access token's audience. A corresponding access token claim, namely "rev_scope", is also defined.</t>
            </li>
          </ul>
        </li>
        <li>
          <t>It defines a method for the ACE framework to enforce bidirectional access control by means of a single access token (see <xref target="sec-bidirectional-access-control"/>), building on the two new parameters "rev_audience" and "rev_scope" as well as on the corresponding access token claims "rev_aud" and "rev_scope".</t>
        </li>
        <li>
          <t>It amends two of the requirements on profiles of the ACE framework (see <xref target="sec-updated-requirements"/>).</t>
        </li>
        <li>
          <t>It deprecates the original payload format of error responses that convey an error code, when CBOR is used to encode message payloads in the ACE framework. For such error responses, it defines a new payload format according to the problem-details format specified in <xref target="RFC9290"/> (see <xref target="sec-updated-error-responses"/>).  </t>
          <t>
In this respect, it also updates the profiles of the ACE framework defined in <xref target="RFC9202"/>, <xref target="RFC9203"/>, and <xref target="RFC9431"/>.</t>
        </li>
      </ul>
      <section anchor="terminology">
        <name>Terminology</name>
        <t>The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", "<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL
NOT</bcp14>", "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", "<bcp14>RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>",
"<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" in this document are to be interpreted as
described in BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> 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="RFC9200"/><xref target="RFC9201"/>, as well as with terms and concepts related to CBOR Web Tokens (CWTs) <xref target="RFC8392"/> and CWT Confirmation Methods <xref target="RFC8747"/>.</t>
        <t>The terminology for entities in the considered architecture is defined in OAuth 2.0 <xref target="RFC6749"/>. In particular, this includes client (C), resource server (RS), and authorization server (AS).</t>
        <t>Readers are also expected to be familiar with the terms and concepts related to CoAP <xref target="RFC7252"/>, Concise Data Definition Language (CDDL) <xref target="RFC8610"/>, CBOR <xref target="RFC8949"/>, JavaScript Object Notation (JSON) <xref target="RFC8259"/>, and COSE <xref target="RFC9052"/><xref target="RFC9053"/>.</t>
        <t>Note that the term "endpoint" is used here following its OAuth definition <xref target="RFC6749"/>, aimed at denoting resources such as /token and /introspect at the AS, and /authz-info at the RS. This document does not use the CoAP definition of "endpoint", which is "An entity participating in the CoAP protocol."</t>
        <t>Furthermore, this document uses the following terms.</t>
        <ul spacing="normal">
          <li>
            <t>Token series: the set comprising all the access tokens issued by the same AS for the same pair (client, resource server). A token series ends when the latest access token of that token series becomes invalid (e.g., when it expires or gets revoked).  </t>
            <t>
Profiles of ACE can provide their extended and specialized definition, e.g., by further taking into account the public authentication credentials of C and the RS.</t>
          </li>
          <li>
            <t>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"/>.</t>
          </li>
        </ul>
        <t>CBOR <xref target="RFC8949"/> and CDDL <xref target="RFC8610"/> are used in this document. CDDL predefined type names, especially bstr for CBOR byte strings and tstr for CBOR text strings, are used extensively in this document.</t>
        <t>Examples throughout this document are expressed in CBOR diagnostic notation as defined in <xref section="8" sectionFormat="of" target="RFC8949"/> and <xref section="G" sectionFormat="of" target="RFC8610"/>. Diagnostic notation comments are often used to provide a textual representation of the parameters' keys and values.</t>
        <t>In the CBOR diagnostic notation used in this document, constructs of the form e'SOME_NAME' are replaced by the value assigned to SOME_NAME in the CDDL model shown in <xref target="fig-cddl-model"/> of <xref target="sec-cddl-model"/>. For example, {e'audience2' : ["rs1", "rs2"]} stands for {53 : ["rs1", "rs2"]}.</t>
        <t>Note to RFC Editor: Please delete the paragraph immediately preceding this note. Also, in the CBOR diagnostic notation used in this document, please replace the constructs of the form e'SOME_NAME' with the value assigned to SOME_NAME in the CDDL model shown in <xref target="fig-cddl-model"/> of <xref target="sec-cddl-model"/>. Finally, please delete this note.</t>
      </section>
    </section>
    <section anchor="sec-workflow">
      <name>New ACE Workflow</name>
      <t>As defined in <xref section="4" sectionFormat="of" target="RFC9200"/>, the ACE framework considers what is shown in <xref target="fig-old-workflow"/> as its basic protocol workflow.</t>
      <t>That is, the client first sends an Access Token Request to the token endpoint at the AS (step A), specifying permissions that it seeks to obtain for accessing protected resources at the RS, possibly together with information on its own public authentication credential.</t>
      <t>Then, if the request has been successfully verified, authenticated, and authorized, the AS replies to the client (step B), providing an access token and possibly additional parameters as access information including the actually granted permissions.</t>
      <t>Finally, the client uploads the access token to the RS and, consistently with the permissions granted according to the access token, accesses a resource at the RS (step C), which replies with the result of the resource access (step F). Details about what protocol the client and the RS use to establish a secure association, mutually authenticate, and secure their communications are defined in the specific profile of ACE used, e.g., <xref target="RFC9202"/><xref target="RFC9203"/><xref target="RFC9431"/><xref target="I-D.ietf-ace-edhoc-oscore-profile"/><xref target="I-D.ietf-ace-group-oscore-profile"/><xref target="RFC9431"/>.</t>
      <t>Further interactions are possible between the AS and the RS, i.e., the exchange of an introspection request and response where the AS validates a previously issued access token for the RS (steps D and E).</t>
      <figure anchor="fig-old-workflow">
        <name>ACE Basic Protocol Workflow.</name>
        <artwork><![CDATA[
+--------+                               +---------------+
|        |---(A)-- Token Request ------->|               |
|        |                               | Authorization |
|        |<--(B)-- Access Token ---------|    Server     |
|        |    + Access Information       |               |
|        |    + Refresh Token (optional) +---------------+
|        |                                      ^ |
|        |            Introspection Request  (D)| |
| Client |                         Response     | |(E)
|        |            (optional exchange)       | |
|        |                                      | v
|        |                               +--------------+
|        |---(C)-- Token + Request ----->|              |
|        |                               |   Resource   |
|        |<--(F)-- Protected Resource ---|    Server    |
|        |                               |              |
+--------+                               +--------------+
]]></artwork>
      </figure>
      <t>This section defines a new, alternative protocol workflow shown in <xref target="fig-new-workflow"/>, which <bcp14>MAY</bcp14> be supported by the AS. Unlike in the original protocol workflow, the AS uploads the access token to the RS on behalf of the client, and then informs the client about the outcome.</t>
      <t>If the token uploading has been successfully completed, the client typically does not need to obtain the access token from the AS altogether. Instead, the client simply establishes a secure association with the RS (if that has not happened already), and then accesses protected resources at the RS according to the permissions granted per the access token and specified by the AS as access information.</t>
      <figure anchor="fig-new-workflow">
        <name>ACE Alternative Protocol Workflow.</name>
        <artwork><![CDATA[
+--------+                               +----------------------------+
|        |---(A)-- Token Request ------->|                            |
|        |                               |       Authorization        |
|        |<--(B)-- Token Response -------|           Server           |
|        |    + Access Information       |                            |
|        |    + Access Token (optional)  +----------------------------+
|        |    + Refresh Token (optional)   ^ |         | ^
|        |                                 | |         | | Token-Upload
|        |        Introspection Request (D)| |     (A1)| |      Request
| Client |                     Response    | |(E)      | |(A2) Response
|        |        (optional exchange)      | |         | |
|        |                                 | v         v |
|        |                               +----------------------------+
|        |---(C1)-- Token (Optional) --->|                            |
|        |                               |                            |
|        |---(C2)-- Protected Request -->|          Resource          |
|        |                               |           Server           |
|        |<--(F)--- Protected Resource --|                            |
|        |                               |                            |
+--------+                               +----------------------------+
]]></artwork>
      </figure>
      <t>More specifically, the new workflow consists of the following steps.</t>
      <ul spacing="normal">
        <li>
          <t>Step A - Like in the original workflow, the client sends an Access Token Request to the token endpoint at the AS, with the additional indication that it opts in to use the alternative workflow.  </t>
          <t>
As defined in <xref target="sec-token_upload"/>, this information is conveyed to the AS by means of the "token_upload" parameter. The parameter also specifies what the AS has to return in the Access Token Response at step B, following a successful uploading of the access token from the AS to the RS.</t>
        </li>
        <li>
          <t>Step A1 - This new step consists of the AS uploading the access token to the RS, typically at the authz-info endpoint, just like the client does in the original workflow.</t>
        </li>
        <li>
          <t>Step A2 - This new step consists of the RS replying to the AS, following the uploading of the access token at step A1.</t>
        </li>
        <li>
          <t>Step B - In the Access Token Response, the AS tells the client that it has attempted to upload the access token to the RS, specifying the outcome of the token uploading based on the reply received from the RS at step A2.  </t>
          <t>
As defined in <xref target="sec-token_upload"/>, this information is conveyed to the client by means of the "token_upload" parameter included in the Access Token Response. If the token uploading has failed, the Access Token Response also includes the access token. Otherwise, the Access Token Response includes information consistent with what was specified by the "token_upload" parameter of the Access Token Request at Step A.</t>
        </li>
        <li>
          <t>Step C1 - This step occurs only if the token uploading from the AS has failed, and the AS has provided the client with the access token at step B. In such a case, the client uploads the access token to the RS just like at step C of the original workflow.</t>
        </li>
        <li>
          <t>Step C2 - The client attempts to access a protected resource at the RS, according to the permissions granted per the access token and specified by the AS as access information at step B.</t>
        </li>
        <li>
          <t>Steps D, E, and F are as in the original workflow.</t>
        </li>
      </ul>
      <t>The new workflow has no ambition to replace the original workflow defined in <xref target="RFC9200"/>. The AS can use one workflow or the other depending, for example, on the specific RS for which the access token has been issued and the nature of the communication leg with that RS.</t>
      <t>When using the new workflow, all the communications between the AS and the RS <bcp14>MUST</bcp14> be protected, consistent with Sections <xref target="RFC9200" section="5.8.4.3" sectionFormat="bare"/> and <xref target="RFC9200" section="6.5" sectionFormat="bare"/> of <xref target="RFC9200"/>. Unlike in the original workflow, this results in protecting also the uploading of the first access token in a token series, i.e., in addition to the uploading of the following access tokens in the token series for dynamically updating the access rights of the client.</t>
      <t>Note that the new workflow is also suitable for deployments where devices meant to access protected resources at the RS are not required or expected to be actual ACE clients. That is, consistent with the intended access policies, the AS can be configured to automatically issue access tokens for such devices and upload those access tokens to the RS. This means that those devices do not have to request for an access token to be issued in the first place, and instead can immediately send requests to the RS for accessing its protected resources, in accordance with the access tokens already issued and uploaded by the AS.</t>
    </section>
    <section anchor="sec-parameters">
      <name>New ACE Parameters</name>
      <t>The rest of this section defines a number of additional parameters and encodings for the OAuth 2.0 token endpoint at the AS.</t>
      <section anchor="sec-token_upload">
        <name>token_upload</name>
        <t>This section defines the additional "token_upload" parameter. The parameter can be used in an Access Token Request sent by C to the token endpoint at the AS, as well as in the successful Access Token Response sent as reply by the AS.</t>
        <ul spacing="normal">
          <li>
            <t>The "token_upload" parameter is <bcp14>OPTIONAL</bcp14> in an Access Token Request. The presence of this parameter indicates that C opts in to use the new, alternative ACE workflow defined in <xref target="sec-workflow"/>, whose actual use for uploading the issued access token to the RS is an exclusive prerogative of the AS.  </t>
            <t>
This parameter can take one of the following integer values. When the Access Token Request is encoded in CBOR, those values are encoded as CBOR unsigned integers. The value of the parameter determines whether the follow-up successful Access Token Response will have to include certain information, in case the AS has successfully uploaded the access token to the RS.  </t>
            <ul spacing="normal">
              <li>
                <t>0: The Access Token Response will have to include neither the access token nor its corresponding token hash.</t>
              </li>
              <li>
                <t>1: The Access Token Response will have to include the token hash corresponding to the access token, but not the access token.</t>
              </li>
              <li>
                <t>2: The Access Token Response will have to include the access token, but not the corresponding token hash.</t>
              </li>
            </ul>
            <t>
If the AS supports the new ACE workflow and the Access Token Request includes the "token_upload" parameter with value 0, 1, or 2, then the AS <bcp14>MAY</bcp14> use the new ACE workflow to upload the access token to the RS on behalf of C. Otherwise, following that Access Token Request, the AS <bcp14>MUST NOT</bcp14> use the new ACE workflow.</t>
          </li>
          <li>
            <t>The "token_upload" parameter is <bcp14>REQUIRED</bcp14> in a successful Access Token Response with response code 2.01 (Created), if both the following conditions apply. Otherwise, the "token_upload" parameter <bcp14>MUST NOT</bcp14> be present.  </t>
            <ul spacing="normal">
              <li>
                <t>The corresponding Access Token Request included the "token_upload" parameter, with value 0, 1, or 2.</t>
              </li>
              <li>
                <t>The AS has attempted to upload the issued access token to the RS as per the new ACE workflow, irrespective of the result of the token upload.</t>
              </li>
            </ul>
            <t>
When the "token_upload" parameter is present in the Access Token Response, it can take one of the following integer values. When the Access Token Response is encoded in CBOR, those values are encoded as CBOR unsigned integers.  </t>
            <ul spacing="normal">
              <li>
                <t>If the token upload to the RS was not successful, then the "token_upload" parameter <bcp14>MUST</bcp14> specify the value 1.      </t>
                <t>
In this case, the Access Token Response <bcp14>MUST</bcp14> include the "access_token" parameter specifying the issued access token.</t>
              </li>
              <li>
                <t>If the token upload at the RS was successful, then the "token_upload" parameter <bcp14>MUST</bcp14> specify the value 0.      </t>
                <t>
In this case, the Access Token Response can include additional parameters as defined below, depending on the value of the "token_upload" parameter in the corresponding Access Token Request.      </t>
                <ul spacing="normal">
                  <li>
                    <t>If the "token_upload" parameter in the Access Token Request specified the value 0, then the Access Token Response <bcp14>MUST NOT</bcp14> include the "access_token" parameter and <bcp14>MUST NOT</bcp14> include the "token_hash" parameter defined in <xref target="sec-token_hash"/>.</t>
                  </li>
                  <li>
                    <t>If the "token_upload" parameter in the Access Token Request specified the value 1, then the Access Token Response <bcp14>MUST NOT</bcp14> include the "access_token" parameter and <bcp14>MUST</bcp14> include the "token_hash" parameter defined in <xref target="sec-token_hash"/>, specifying the hash corresponding to the issued access token and computed as defined in <xref target="sec-token_hash"/>.</t>
                  </li>
                  <li>
                    <t>If the "token_upload" parameter in the Access Token Request specified the value 2, then the Access Token Response <bcp14>MUST</bcp14> include the "access_token" parameter specifying the issued access token and <bcp14>MUST NOT</bcp14> include the "token_hash" parameter defined in <xref target="sec-token_hash"/>.</t>
                  </li>
                </ul>
              </li>
            </ul>
          </li>
        </ul>
        <section anchor="examples">
          <name>Examples</name>
          <t><xref target="fig-example-AS-to-C-token-upload"/> shows an example with first an Access Token Request from C to the AS, and then an Access Token Response from the AS to C, following the issue of an access token bound to a symmetric PoP key.</t>
          <t>The Access Token Request specifies the "token_upload" parameter with value 0. That is, C indicates that it requires neither the access token nor the corresponding token hash from the AS, in case the AS successfully uploads the access token to the RS.</t>
          <t>The Access Token Response specifies the "token_upload" parameter with value 0, which indicates that the AS has successfully uploaded the access token to the RS on behalf of C.</t>
          <t>Consistent with the value of the "token_upload" parameter in the Access Token Request, the Access Token Response includes neither the access token nor its corresponding token hash. The Access Token Response also includes the "cnf" parameter specifying the symmetric PoP key bound to the access token.</t>
          <figure anchor="fig-example-AS-to-C-token-upload">
            <name>Example of Access Token Request-Response Exchange. Following a successful uploading of the access token from the AS to the RS, the Access Token Response includes the "token_upload" parameter but not the access token, which is bound to a symmetric key and was uploaded to the RS by the AS.</name>
            <artwork><![CDATA[
   Access Token Request

   Header: POST (Code=0.02)
   Uri-Host: "as.example.com"
   Uri-Path: "token"
   Content-Format: 19 (application/ace+cbor)
   Payload:
   {
     / audience /  5 : "tempSensor4711",
     / scope /     9 : "read",
     e'token_upload' : 0
   }


   Access Token Response

   Header: Created (Code=2.01)
   Content-Format: 19 (application/ace+cbor)
   Max-Age: 3560
   Payload:
   {
     e'token_upload' : 0,
     / expires_in / 2 : 3600,
     / cnf /        8 : {
       / COSE_Key / 1 : {
         / kty / 1 : 4 / Symmetric /,
         / kid / 2 : h'3d027833fc6267ce',
         / k /  -1 : h'73657373696f6e6b6579'
       }
     }
   }
]]></artwork>
          </figure>
          <t><xref target="fig-example-AS-to-C-token-upload-success-ret-token"/> shows another example with first an Access Token Request from C to the AS, and then an Access Token Response from the AS to C, following the issue of an access token bound to a symmetric PoP key.</t>
          <t>The Access Token Request specifies the "token_upload" parameter with value 2. That is, C indicates that it requires the access token from the AS, even in case the AS successfully uploads the access token to the RS.</t>
          <t>The Access Token Response specifies the "token_upload" parameter with value 0, which indicates that the AS has successfully uploaded the access token to the RS on behalf of C.</t>
          <t>Consistent with the value of the "token_upload" parameter in the Access Token Request, the Access Token Response includes the "access_token" parameter specifying the issued access token. The Access Token Response also includes the "cnf" parameter specifying the symmetric PoP key bound to the access token.</t>
          <figure anchor="fig-example-AS-to-C-token-upload-success-ret-token">
            <name>Example of Access Token Request-Response Exchange. Following a successful uploading of the access token from the AS to the RS, the Access Token Response includes the "token_upload" parameter as well as the "access_token" parameter conveying the access token, which is bound to a symmetric key and was uploaded to the RS by the AS.</name>
            <artwork><![CDATA[
   Access Token Request

   Header: POST (Code=0.02)
   Uri-Host: "as.example.com"
   Uri-Path: "token"
   Content-Format: 19 (application/ace+cbor)
   Payload:
   {
     / audience /  5 : "tempSensor4711",
     / scope /     9 : "read",
     e'token_upload' : 2
   }


   Access Token Response

   Header: Created (Code=2.01)
   Content-Format: 19 (application/ace+cbor)
   Max-Age: 3560
   Payload:
   {
        e'token_upload' : 0,
     / access_token / 1 : h'd08343a1...4819',
       / (full CWT elided for brevity;
          CWT contains the symmetric PoP key in the "cnf" claim) /
     / expires_in /   2 : 3600,
     / cnf /          8 : {
       / COSE_Key / 1 : {
         / kty / 1 : 4 / Symmetric /,
         / kid / 2 : h'3d027833fc6267ce',
         / k /  -1 : h'73657373696f6e6b6579'
       }
     }
   }
]]></artwork>
          </figure>
          <t><xref target="fig-example-AS-to-C-token-upload-failed"/> shows another example with first an Access Token Request from C to the AS, and then an Access Token Response from the AS to C, also following the issue of an access token bound to a symmetric PoP key.</t>
          <t>The Access Token Request specifies the "token_upload" parameter with value 0. That is, C indicates that it requires neither the access token nor the corresponding token hash from the AS, in case the AS successfully uploads the access token to the RS.</t>
          <t>In this example, the Access Token Response includes the "token_upload" parameter with value 1, which indicates that the AS has attempted and failed to upload the access token to the RS on behalf of C. The Access Token Response also includes the "access_token" parameter specifying the issued access token, together with the "cnf" parameter specifying the symmetric PoP key bound to the access token.</t>
          <t>Note that, even though the AS has failed to upload the access token to the RS, the response code 2.01 (Created) is used when replying to C, since the Access Token Request as such has been successfully processed at the AS, with the following issue of the access token.</t>
          <figure anchor="fig-example-AS-to-C-token-upload-failed">
            <name>Example of Access Token Request-Response Exchange. Following a failed uploading of the access token from the AS to the RS, the Access Token Response includes the "token_upload" parameter with value 1 as well the "access_token" parameter conveying the access token bound to a symmetric key.</name>
            <artwork><![CDATA[
   Access Token Request

   Header: POST (Code=0.02)
   Uri-Host: "as.example.com"
   Uri-Path: "token"
   Content-Format: 19 (application/ace+cbor)
   Payload:
   {
     / audience /  5 : "tempSensor4711",
     / scope /     9 : "read",
     e'token_upload' : 0
   }


   Access Token Response

   Header: Created (Code=2.01)
   Content-Format: 19 (application/ace+cbor)
   Max-Age: 3560
   Payload:
   {
        e'token_upload' : 1,
     / access_token / 1 : h'd08343a1...4819',
       / (full CWT elided for brevity;
          CWT contains the symmetric PoP key in the "cnf" claim) /
     / expires_in /   2 : 3600,
     / cnf /          8 : {
       / COSE_Key / 1 : {
         / kty / 1 : 4 / Symmetric /,
         / kid / 2 : h'3d027833fc6267ce',
         / k /  -1 : h'73657373696f6e6b6579'
       }
     }
   }
]]></artwork>
          </figure>
        </section>
      </section>
      <section anchor="sec-token_hash">
        <name>token_hash</name>
        <t>This section defines the additional "token_hash" parameter. The parameter can be used in a successful Access Token Response sent as reply by the AS to C.</t>
        <t>The following refers to the base64url encoding without padding (see <xref section="5" sectionFormat="of" target="RFC4648"/>), and denotes as "binary representation" of a text string the corresponding UTF-8 encoding <xref target="RFC3629"/>, which is the implied charset used in JSON (see <xref section="8.1" sectionFormat="of" target="RFC8259"/>).</t>
        <t>The "token_hash" parameter is <bcp14>REQUIRED</bcp14> in a successful Access Token Response with response code 2.01 (Created), if both the following conditions apply. Otherwise, the "token_hash" parameter <bcp14>MUST NOT</bcp14> be present.</t>
        <ul spacing="normal">
          <li>
            <t>The corresponding Access Token Request included the "token_upload" parameter with value 1.</t>
          </li>
          <li>
            <t>The Access Token Response includes the "token_upload" parameter with value 0. That is, the AS has successfully uploaded the issued access token to the RS, as per the new ACE workflow.</t>
          </li>
        </ul>
        <t>This parameter specifies the token hash corresponding to the access token issued by the AS and successfully uploaded to the RS on behalf of C. In particular:</t>
        <ul spacing="normal">
          <li>
            <t>If the Access Token Response is encoded in CBOR, then the "token_hash" parameter is a CBOR byte string, with value the token hash.</t>
          </li>
          <li>
            <t>If the Access Token Response is encoded in JSON, then the "token_hash" parameter has as value the base64url-encoded text string that encodes the token hash.</t>
          </li>
        </ul>
        <t>The AS computes the token hash as defined in <xref target="sec-token-hash-output"/>.</t>
        <section anchor="sec-token-hash-output">
          <name>Computing the Token Hash</name>
          <t>The AS computes the token hash over the value that the "access_token" parameter would have had in the same Access Token Response, if it was included therein and specifying the access token.</t>
          <t>In particular, the input HASH_INPUT over which the token hash is computed is determined as follows.</t>
          <ul spacing="normal">
            <li>
              <t>If the Access Token Response is encoded in CBOR, then:  </t>
              <ul spacing="normal">
                <li>
                  <t>BYTES denotes the value of the CBOR byte string that would be conveyed by the "access_token" parameter, if this was included in the Access Token Response.</t>
                </li>
                <li>
                  <t>HASH_INPUT_TEXT is the base64url-encoded text string that encodes BYTES.</t>
                </li>
                <li>
                  <t>HASH_INPUT is the binary representation of HASH_INPUT_TEXT.</t>
                </li>
              </ul>
            </li>
            <li>
              <t>If the Access Token Response is encoded in JSON, then HASH_INPUT is the binary representation of the text string conveyed by the "access_token" parameter, if this was included in the Access Token Response.</t>
            </li>
          </ul>
          <t>Once determined HASH_INPUT as defined above, a hash value of HASH_INPUT is generated as per <xref section="6" sectionFormat="of" target="RFC6920"/>. 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 <bcp14>MUST</bcp14> be collision-resistant on byte-strings, and <bcp14>MUST</bcp14> be selected from the "Named Information Hash Algorithm" Registry <xref target="Named.Information.Hash.Algorithm"/>. Consistent with the compliance requirements in <xref section="2" sectionFormat="of" target="RFC6920"/>, the hash function sha-256 as specified in <xref target="SHA-256"/> is mandatory to implement.</t>
          <t>The computation of token hashes defined above is aligned with that specified for the computation of token hashes in <xref target="I-D.ietf-ace-revoked-token-notification"/>, where they are used as identifiers of revoked access tokens. Therefore, given a hash algorithm and an access token, the AS computes the same corresponding token hash in either case.</t>
          <t>If the AS supports the method specified in <xref target="I-D.ietf-ace-revoked-token-notification"/>, then the AS <bcp14>MUST</bcp14> use the same hash algorithm for computing both the token hashes to include in the "token_hash" parameter and the token hashes computed per such a method to identify revoked access tokens.</t>
        </section>
        <section anchor="example">
          <name>Example</name>
          <t><xref target="fig-example-AS-to-C-token-hash"/> shows an example with first an Access Token Request from C to the AS, and then an Access Token Response from the AS to C, following the issue of an access token bound to a symmetric PoP key.</t>
          <t>The Access Token Request specifies the "token_upload" parameter with value 1. That is, C indicates that it requires the token hash corresponding to the access token from the AS, in case the AS successfully uploads the access token to the RS.</t>
          <t>The Access Token Response specifies the "token_upload" parameter with value 0, which indicates that the AS has successfully uploaded the access token to the RS on behalf of C.</t>
          <t>Consistent with the value of the "token_upload" parameter in the Access Token Request, the Access Token Response includes the "token_hash" parameter, which specifies the token hash corresponding to the issued access token. The Access Token Response also includes the "cnf" parameter specifying the symmetric PoP key bound to the access token.</t>
          <figure anchor="fig-example-AS-to-C-token-hash">
            <name>Example of Access Token Request-Response Exchange. Following a successful uploading of the access token from the AS to the RS, the Access Token Response includes the "token_upload" parameter as well as the "token_hash" parameter. The "token_hash" parameter conveys the token hash corresponding to the issued access token, which is bound to a symmetric key and was uploaded to the RS by the AS.</name>
            <artwork><![CDATA[
   Access Token Request

   Header: POST (Code=0.02)
   Uri-Host: "as.example.com"
   Uri-Path: "token"
   Content-Format: 19 (application/ace+cbor)
   Payload:
   {
     / audience /  5 : "tempSensor4711",
     / scope /     9 : "read",
     e'token_upload' : 1
   }


   Access Token Response

   Header: Created (Code=2.01)
   Content-Format: 19 (application/ace+cbor)
   Max-Age: 3560
   Payload:
   {
      e'token_upload' : 0,
        e'token_hash' : h'0153269057e12fe2b74ba07c892560a2d7
                          53877eb62ff44d5a19002530ed97ffe4',
     / expires_in / 2 : 3600,
     / cnf /        8 : {
       / COSE_Key / 1 : {
         / kty / 1 : 4 / Symmetric /,
         / kid / 2 : h'3d027833fc6267ce',
         / k /  -1 : h'73657373696f6e6b6579'
       }
     }
   }
]]></artwork>
          </figure>
        </section>
      </section>
      <section anchor="sec-to_rs-from_rs">
        <name>to_rs and from_rs</name>
        <t>This section defines the additional parameters "to_rs" and "from_rs". The "to_rs" parameter can be used in an Access Token Request sent by C to the token endpoint at the AS. The "from_rs" parameter can be used in an Access Token Response, sent by the AS in reply to a request to the token endpoint from C.</t>
        <ul spacing="normal">
          <li>
            <t>The "to_rs" parameter is <bcp14>OPTIONAL</bcp14> in an Access Token Request. The presence of this parameter indicates that C wishes the AS to relay the information specified therein to the RS, when the AS uploads the issued access token to the RS per the new ACE workflow defined in <xref target="sec-workflow"/>. This parameter <bcp14>MUST NOT</bcp14> be present if the "token_upload" parameter defined in <xref target="sec-token_upload"/> is not present in the Access Token Request.  </t>
            <t>
If present, this parameter specifies the information that C wishes the AS to relay to the RS, when uploading the access token to the RS on behalf of C. If considered together with the access token, this information is expected to consist in what C would have uploaded to the authz-info endpoint at the RS, if uploading the access token per the original ACE workflow. When the Access Token Request is encoded in CBOR, the value of this parameter is encoded as a CBOR byte string.  </t>
            <t>
The semantics and encoding of the information specified in this parameter depend on the specific profile of ACE used. <xref target="sec-to_rs-from_rs-oscore-profile"/> defines those for when this parameter is used with the OSCORE profile <xref target="RFC9203"/>.</t>
          </li>
          <li>
            <t>The "from_rs" parameter is <bcp14>OPTIONAL</bcp14> in an Access Token Response. The presence of this parameter indicates that the AS has to relay the information specified therein to C, which the AS has received from the RS after having successfully uploaded the access token to the RS per the new ACE workflow defined in <xref target="sec-workflow"/>. This parameter <bcp14>MUST NOT</bcp14> be present if the "token_upload" parameter defined in <xref target="sec-token_upload"/> is not present with value 0 in the Access Token Response.  </t>
            <t>
If present, this parameter specifies the information that the AS has to relay to C from the RS, following the successful upload of the access token to the RS on behalf of C. This information is expected to consist in what C would have received in a successful response from the authz-info endpoint at the RS, if uploading the access token per the original ACE workflow. When the Access Token Response is encoded in CBOR, the value of this parameter is encoded as a CBOR byte string.  </t>
            <t>
The semantics and encoding of the information specified in this parameter depend on the specific profile of ACE used. <xref target="sec-to_rs-from_rs-oscore-profile"/> defines those for when this parameter is used with the OSCORE profile <xref target="RFC9203"/>.</t>
          </li>
        </ul>
        <section anchor="sec-to_rs-from_rs-oscore-profile">
          <name>Use with the OSCORE Profile</name>
          <t>This section defines the semantics and encoding of the information specified in the parameters "to_rs" and "from_rs" when used with the OSCORE profile <xref target="RFC9203"/>, thereby effectively enabling the use of the new ACE workflow for that profile.</t>
          <t>The value of the "to_rs" parameter is the binary representation of a CBOR map C_MAP composed of two fields:</t>
          <ul spacing="normal">
            <li>
              <t>A field with the CBOR unsigned integer 40 as map key, and with value the nonce N1 generated by C encoded a CBOR byte string (see <xref section="4.1" sectionFormat="of" target="RFC9203"/>).</t>
            </li>
            <li>
              <t>A field with the CBOR unsigned integer 43 as map key, and with value the Recipient ID ID1 generated by C and encoded as a CBOR byte string (see <xref section="4.1" sectionFormat="of" target="RFC9203"/>).</t>
            </li>
          </ul>
          <t>When building the POST request for uploading the access token to the authz-info endpoint at the RS, the AS composes the request payload as specified in <xref section="4.1" sectionFormat="of" target="RFC9203"/>. In particular, the CBOR map specified as payload includes:</t>
          <ul spacing="normal">
            <li>
              <t>The "access_token" field, with value the access token to upload encoded as a CBOR byte string.</t>
            </li>
            <li>
              <t>The "nonce1" field, with value the same CBOR byte string specified by the field of C_MAP that has the CBOR unsigned integer 40 as map key.</t>
            </li>
            <li>
              <t>The "ace_client_recipientid" field, with value the same CBOR byte string specified by the field of C_MAP that has the CBOR unsigned integer 43 as map key.</t>
            </li>
          </ul>
          <t>In case the upload of the access token to the RS from the AS is successful, the RS replies to the AS with a 2.01 (Created) response, whose payload is a CBOR map RS_MAP that includes:</t>
          <ul spacing="normal">
            <li>
              <t>The "nonce2" field, with value the nonce N2 generated by the RS encoded a CBOR byte string (see <xref section="4.2" sectionFormat="of" target="RFC9203"/>).</t>
            </li>
            <li>
              <t>The "ace_server_recipientid" field, with value the Recipient ID ID2 generated by the RS and encoded as a CBOR byte string (see <xref section="4.2" sectionFormat="of" target="RFC9203"/>).</t>
            </li>
          </ul>
          <t>The value of the "from_rs" parameter is the binary representation of a CBOR map composed of two elements:</t>
          <ul spacing="normal">
            <li>
              <t>A field with the CBOR unsigned integer 42 as map key, and with value the same CBOR byte string specified by the "nonce2" field of RS_MAP.</t>
            </li>
            <li>
              <t>A field with the CBOR unsigned integer 44 as map key, and with value the same CBOR byte string specified by the "ace_server_recipientid" field of RS_MAP.</t>
            </li>
          </ul>
          <t>When C receives from the AS the successful Access Token Response specifying the "token_upload" parameter with value 0, C can retrieve the nonce N2 and the Recipient ID ID2 from the "from_rs" parameter, just like when retrieving those from a 2.01 (Created) response received from the RS when using the original ACE workflow.</t>
          <t><xref target="fig-example-AS-to-C-token-upload-oscore-profile"/> shows an example where the OSCORE profile is used, with first an Access Token Request from C to the AS, and then an Access Token Response from the AS to C, following the issue of an access token bound to a symmetric PoP key.</t>
          <t>The Access Token Request specifies the "token_upload" parameter with value 0. That is, C indicates that it requires neither the access token nor the corresponding token hash from the AS, in case the AS successfully uploads the access token to the RS. Also, the Access Token Request includes the "to_rs" parameter, specifying the values of N1 = 0x018a278f7faab55a and ID1 = 0x1645 intended to the RS.</t>
          <t>The Access Token Response specifies the "token_upload" parameter with value 0, which indicates that the AS has successfully uploaded the access token to the RS on behalf of C.</t>
          <t>Consistent with the value of the "token_upload" parameter in the Access Token Request, the Access Token Response includes neither the access token nor its corresponding token hash. The Access Token Response also includes the "cnf" parameter specifying the symmetric PoP key bound to the access token, as an OSCORE_Input_Material object. Also, the Access Token Response includes the "from_rs" parameter, specifying the values of N2 = 0x25a8991cd700ac01 and ID2 = 0x0000 received from the RS and intended to C.</t>
          <figure anchor="fig-example-AS-to-C-token-upload-oscore-profile">
            <name>Example of Access Token Request-Response Exchange where the OSCORE Profile is Used. Following a successful uploading of the access token from the AS to the RS, the Access Token Response includes the "token_upload" parameter but not the access token, which is bound to a symmetric key and was uploaded to the RS by the AS. C and the RS exchange N1, ID1, N2, and ID2 via the AS by means of the parameters "to_rs" and "from_rs"</name>
            <artwork><![CDATA[
   Access Token Request

   Header: POST (Code=0.02)
   Uri-Host: "as.example.com"
   Uri-Path: "token"
   Content-Format: 19 (application/ace+cbor)
   Payload:
   {
     / audience /  5 : "tempSensor4711",
     / scope /     9 : "read",
     e'token_upload' : 0,
            e'to_rs' : h'a2182848018a278f7faab55a182b421645'
   }


   Access Token Response

   Header: Created (Code=2.01)
   Content-Format: 19 (application/ace+cbor)
   Max-Age: 3560
   Payload:
   {
        e'token_upload' : 0,
             e'from_rs' : h'a2182a4825a8991cd700ac01182c420000',
     / ace_profile / 38 : / coap_oscore / 2,
       / expires_in / 2 : 3600,
       / cnf /        8 : {
         / osc / 4 : {
           / id / 0 : h'01',
           / ms / 2 : h'f9af838368e353e78888e1426bd94e6f'
         }
       }
   }
]]></artwork>
          </figure>
        </section>
      </section>
      <section anchor="sec-rs_cnf2-audience2">
        <name>rs_cnf2 and audience2</name>
        <t>This section defines the additional parameters "rs_cnf2" and "audience2" for an Access Token Response, sent by the AS in reply to a request to the token endpoint from C.</t>
        <ul spacing="normal">
          <li>
            <t>The "rs_cnf2" parameter is <bcp14>OPTIONAL</bcp14> if the token type is "pop", asymmetric keys are used, and the access token is issued for an audience that includes multiple RSs (i.e., a group-audience, see <xref section="6.9" sectionFormat="of" target="RFC9200"/>). Otherwise, the "rs_cnf2" parameter <bcp14>MUST NOT</bcp14> be present.  </t>
            <t>
This parameter specifies information about the public keys used by the RSs of a group-audience for authenticating themselves to C, and is used in case the binding between the public keys and the corresponding RS identities are not established through other means. If this parameter is absent, either the RSs in the group-audience do not use a public key, or the AS knows that the RSs can authenticate themselves to C without additional information.  </t>
            <t>
If present, this parameter <bcp14>MUST</bcp14> encode a non-empty CBOR array of N elements, where N is the number of RSs in the group-audience for which the access token is issued. Each element of the CBOR array specifies the public key of one RS in the group-audience, and <bcp14>MUST</bcp14> follow the syntax and semantics of the "cnf" claim either from <xref section="3.1" sectionFormat="of" target="RFC8747"/> for CBOR-based interactions, or from <xref section="3.1" sectionFormat="of" target="RFC7800"/> for JSON-based interactions. It is not required that all the elements of the CBOR array rely on the same confirmation method.  </t>
            <t>
Each of the public keys may contain parameters specifying information such as the public key algorithm and use (e.g., by means of the parameters "alg" or "key_ops" in a COSE_Key structure). If such information is specified, a client <bcp14>MUST NOT</bcp14> use a public key that is incompatible with the profile of ACE used or with the PoP algorithm according to that information. An RS <bcp14>MUST</bcp14> reject a proof-of-possession that relies on such a key, and reply with a response code equivalent to the CoAP code 4.00 (Bad Request).</t>
          </li>
          <li>
            <t>The "audience2" parameter is <bcp14>OPTIONAL</bcp14> and specifies the identifiers of the RSs in the group-audience for which the access token is issued.  </t>
            <t>
If present, this parameter <bcp14>MUST</bcp14> encode a non-empty CBOR array of N elements, where N is the number of RSs in the group-audience for which the access token is issued. Each element of the CBOR array in the "audience2" parameter <bcp14>MUST</bcp14> be a CBOR text string, with value the identifier of one RS in the group-audience.  </t>
            <t>
The element of the CBOR array referring to an RS in the group-audience <bcp14>SHOULD</bcp14> have the same value that would be used to identify that RS through the "audience" parameter of an Access Token Request to the AS (see <xref section="5.8.1" sectionFormat="of" target="RFC9200"/>) and of an Access Token Response from the AS (see <xref section="5.8.2" sectionFormat="of" target="RFC9200"/>), when requesting and issuing an access token for that individual RS.  </t>
            <t>
The "audience2" parameter is <bcp14>REQUIRED</bcp14> if the "rs_cnf2" parameter is present. In such a case, the i-th element of the CBOR array in the "audience2" parameter <bcp14>MUST</bcp14> be the identifier of the RS whose public key is specified as the i-th element of the CBOR array in the "rs_cnf2" parameter.</t>
          </li>
        </ul>
        <section anchor="example-1">
          <name>Example</name>
          <t><xref target="fig-example-AS-to-C-rs_cnf2"/> shows an example of Access Token Response from the AS to C, following the issue of an access token for a group-audience composed of two RSs "rs1" and "rs2", and bound to C's public key as asymmetric PoP key. The Access Token Response includes the access token, as well as the parameters "audience2" and "rs_cnf2". These specify the public key of the two RSs as intended recipients of the access token and the identifiers of those two RSs, respectively.</t>
          <figure anchor="fig-example-AS-to-C-rs_cnf2">
            <name>Example of Access Token Response with an access token bound to an asymmetric key, using the parameters "audience2" and "rs_cnf2".</name>
            <artwork><![CDATA[
   Access Token Response

   Header: Created (Code=2.01)
   Content-Format: 19 (application/ace+cbor)
   Max-Age: 3600
   Payload:
   {
     / access_token / 1 : b64'SlAV32hk...12',
       / (full CWT elided for brevity;
          CWT contains the client's RPK in the "cnf" claim) /
     / expires_in /   2 : 3600,
           e'audience2' : ["rs1", "rs2"],
             e'rs_cnf2' : [
               {
                 / COSE_Key / 1 : {
                   / kty /  1 : 2 / EC2 /,
                   / crv / -1 : 1 / P-256 /,
                   / x /   -2 : h'bbc34960526ea4d32e940cad2a234148
                                  ddc21791a12afbcbac93622046dd44f0',
                   / y /   -3 : h'4519e257236b2a0ce2023f0931f1f386
                                  ca7afda64fcde0108c224c51eabf6072'
                 }
               },
               {
                 / COSE_Key / 1 : {
                   / kty /  1 : 2 / EC2 /,
                   / crv / -1 : 1 / P-256 /,
                   / x /   -2 : h'ac75e9ece3e50bfc8ed6039988952240
                                  5c47bf16df96660a41298cb4307f7eb6',
                   / y /   -3 : h'6e5de611388a4b8a8211334ac7d37ecb
                                  52a387d257e6db3c2a93df21ff3affc8'
                 }
               }
             ]
   }
]]></artwork>
          </figure>
        </section>
      </section>
      <section anchor="sec-anchor_cnf">
        <name>anchor_cnf</name>
        <t>This section defines the additional "anchor_cnf" parameter for an Access Token Response, sent by the AS in reply to a request to the token endpoint from C.</t>
        <t>The "anchor_cnf" parameter is <bcp14>OPTIONAL</bcp14> if the token type is "pop" and asymmetric keys are used. Otherwise, the "anchor_cnf" parameter <bcp14>MUST NOT</bcp14> be present.</t>
        <t>This parameter specifies information about the public keys of trust anchors, which C can use to validate the public key of the RS/RSs included in the audience for which the access token is issued. This parameter can be used when the access token is issued for an audience including one RS or multiple RSs.</t>
        <t>If this parameter is absent, either the RS/RSs in the audience do not use a public key, or the AS knows that C can validate the public key of such RS/RSs without additional information (e.g., C has already obtained the required public keys of the involved trust anchors from the AS or through other means).</t>
        <t>If present, this parameter <bcp14>MUST</bcp14> encode a non-empty CBOR array that <bcp14>MUST</bcp14> be treated as a set, i.e., the order of its elements has no meaning. Each element of the CBOR array specifies the public key of one trust anchor, which can be used to validate the public key of at least one RS included in the audience for which the access token is issued. Each element of the CBOR array <bcp14>MUST</bcp14> follow the syntax and semantics of the "cnf" claim either from <xref section="3.1" sectionFormat="of" target="RFC8747"/> for CBOR-based interactions, or from <xref section="3.1" sectionFormat="of" target="RFC7800"/> for JSON-based interactions. It is not required that all the elements of the CBOR array rely on the same confirmation method.</t>
        <t>Each of the public keys specified in the "anchor_cnf" parameter may contain parameters specifying information such as the public key algorithm and use (e.g., by means of the parameters "alg" or "key_ops" in a COSE_Key structure). If such information is specified, a client <bcp14>MUST NOT</bcp14> use a public key that is incompatible with the profile of ACE used, or with the public keys to validate and the way to validate those.</t>
        <t>The presence of this parameter does not require that the Access Token Response also includes the "rs_cnf" parameter defined in <xref target="RFC9201"/> or the "rs_cnf2" parameter defined in <xref target="sec-rs_cnf2-audience2"/> of this document. That is, C may be able to obtain the public keys of the RS/RSs for which the access token is issued through other means.</t>
        <t>When the Access Token Response includes both the "anchor_cnf" parameter and the "audience2" parameter defined in <xref target="sec-rs_cnf2-audience2"/>, then C <bcp14>MUST</bcp14> make sure that a public key PK_RS is associated with an RS identified by an element of "audience2", before using any of the public keys specified in "anchor_cnf" to validate PK_RS.</t>
        <t>When the Access Token Response includes the "anchor_cnf" parameter but not the "audience2" parameter, then C can use any of the public keys specified in "anchor_cnf" to validate the public key PK_RS of any RS in the targeted audience. This allows C to use the access token with an RS that is deployed later on as part of the same audience, which is particularly useful in the case of a group-audience.</t>
        <section anchor="example-2">
          <name>Example</name>
          <t><xref target="fig-example-AS-to-C-anchor_cnf"/> shows an example of Access Token Response from the AS to C, following the issue of an access token for a group-audience, and bound to C's public key as asymmetric PoP key.</t>
          <t>The identifier of the group-audience was specified by the "audience" parameter of the Access Token Request to the AS, is specified by the "aud" claim of the issued access token, and is not repeated in the Access Token Response from the AS.</t>
          <t>The Access Token Response includes the "anchor_cnf" parameter. This specifies the public key of a trust anchor that C can use to validate the public keys of any RS with which the access token is going to be used. The public key of the trust anchor is here conveyed within an X.509 certificate used as public authentication credential for that trust anchor, by means of the CWT confirmation method "x5chain" defined in <xref target="I-D.ietf-ace-edhoc-oscore-profile"/>.</t>
          <figure anchor="fig-example-AS-to-C-anchor_cnf">
            <name>Example of Access Token Response with an access token bound to an asymmetric key, using the "anchor_cnf" parameter.</name>
            <artwork><![CDATA[
   Access Token Response

   Header: Created (Code=2.01)
   Content-Format: 19 (application/ace+cbor)
   Max-Age: 3600
   Payload:
   {
     / access_token / 1 : b64'SlAV32hk...12',
       / (full CWT elided for brevity;
          CWT contains the client's RPK in the "cnf" claim) /
     / expires_in /   2 : 3600,
          e'anchor_cnf' : [
            {
              e'x5chain' : h'308201363081dea003020102020301f50d30
                             0a06082a8648ce3d04030230163114301206
                             035504030c0b524643207465737420434130
                             1e170d3230303130313030303030305a170d
                             3231303230323030303030305a3022312030
                             1e06035504030c1730312d32332d34352d46
                             462d46452d36372d38392d41423059301306
                             072a8648ce3d020106082a8648ce3d030107
                             03420004b1216ab96e5b3b3340f5bdf02e69
                             3f16213a04525ed44450b1019c2dfd3838ab
                             ac4e14d86c0983ed5e9eef2448c6861cc406
                             547177e6026030d051f7792ac206a30f300d
                             300b0603551d0f040403020780300a06082a
                             8648ce3d04030203470030440220445d798c
                             90e7f500dc747a654cec6cfa6f037276e14e
                             52ed07fc16294c84660d02205a33985dfbd4
                             bfdd6d4acf3804c3d46ebf3b7fa62640674f
                             c0354fa056dbaea6'
            }
          ]
   }
]]></artwork>
          </figure>
        </section>
      </section>
      <section anchor="sec-token_series_id">
        <name>token_series_id</name>
        <t>This section defines the additional "token_series_id" parameter. The parameter can be used in an Access Token Request sent by C to the token endpoint at the AS, as well as in the successful Access Token Response sent as reply by the AS.</t>
        <ul spacing="normal">
          <li>
            <t>The "token_series_id" parameter is <bcp14>OPTIONAL</bcp14> in an Access Token Request. The presence of this parameter indicates that C wishes to obtain a new access token for dynamically updating its access rights. That is, the new access token is intended to be the next one in an active token series and to supersede the latest access token in that token series. This parameter <bcp14>MUST NOT</bcp14> be present if the requested access token is the first one of a new token series.  </t>
            <t>
If present, this parameter specifies the identifier of the token series that the new access token is intended to extend. The identifier does not change throughout the lifetime of the token series, and was provided to C in the successful Access Token Response that the AS sent when issuing the first access token in that token series. When the Access Token Request is encoded in CBOR, the value of this parameter is encoded as a CBOR byte string.</t>
          </li>
          <li>
            <t>The "token_series_id" parameter is <bcp14>OPTIONAL</bcp14> in an Access Token Response. This parameter <bcp14>MUST NOT</bcp14> be present if the issued access token is not the first one of the token series it belongs to.  </t>
            <t>
If present, this parameter specifies the identifier of the token series to which the issued access token belongs. When the Access Token Response is encoded in CBOR, the value of this parameter is encoded as a CBOR byte string.</t>
          </li>
        </ul>
        <t>If the AS relies on the "token_series_id" parameter to exchange the identifier of token series with clients, then the following applies.</t>
        <ul spacing="normal">
          <li>
            <t>The value assigned to the identifier of a token series <bcp14>MUST</bcp14> be uniquely associated with the access tokens issued by the AS for that token series, and <bcp14>MUST</bcp14> be selected from a pool that the AS exclusively controls.</t>
          </li>
          <li>
            <t>An issued access token that belongs to a token series <bcp14>MUST</bcp14> include the identifier of that token series. This allows the RS to identify the latest access token in the token series to be superseded by the issued access token.  </t>
            <t>
In particular, each of such access tokens <bcp14>MUST</bcp14> include a claim specifying the identifier of the token series to which the access token belongs. When CWTs are used as access tokens, this information <bcp14>MUST</bcp14> be transported in the "token_series_id" claim registered in <xref target="iana-token-cwt-claims"/>.</t>
          </li>
        </ul>
        <t>If a profile of ACE relies on a construct that uses different parameters/claims to transport the identifier of a token series, then the new "token_series_id" parameter and "token_series_id" claim <bcp14>MUST NOT</bcp14> be used when using that profile.</t>
        <t>For example, a number of parameters/claims are already used to transport information that acts de facto as identifier of token series, in the PSK mode of the DTLS profile <xref target="RFC9202"/>, in the OSCORE profile <xref target="RFC9203"/>, and in the EDHOC and OSCORE profile <xref target="I-D.ietf-ace-edhoc-oscore-profile"/>.</t>
      </section>
      <section anchor="sec-rev_audience">
        <name>rev_audience</name>
        <t>This section defines the additional "rev_audience" parameter. The parameter can be used in an Access Token Request sent by C to the token endpoint at the AS, as well as in the successful Access Token Response sent as reply by the AS.</t>
        <ul spacing="normal">
          <li>
            <t>The "rev_audience" parameter is <bcp14>OPTIONAL</bcp14> in an Access Token Request. The presence of this parameter indicates that C wishes the requested access token to specify additional access rights. These are intended for the access token's audience to access protected resources at C as the access token's reverse audience.  </t>
            <t>
This parameter specifies such a reverse audience as a text string identifier of C. When the Access Token Request is encoded in CBOR, the value of this parameter is encoded as a CBOR text string.</t>
          </li>
          <li>
            <t>The "rev_audience" parameter is <bcp14>OPTIONAL</bcp14> in an Access Token Response. If present, it has the same meaning and encoding that it has in the Access Token Request.</t>
          </li>
        </ul>
        <t>Fundamentally, this parameter has the same semantics of the "audience" parameter used in the ACE framework, with the difference that it conveys an identifier of C as a host of protected resources to access, according to the access rights granted as reverse scope to the audience of the access token issued by the AS.</t>
        <t>The use of this parameter is further detailed in <xref target="sec-bidirectional-access-control"/>.</t>
      </section>
      <section anchor="sec-rev_scope">
        <name>rev_scope</name>
        <t>This section defines the additional "rev_scope" parameter. The parameter can be used in an Access Token Request sent by C to the token endpoint at the AS, as well as in the successful Access Token Response sent as reply by the AS.</t>
        <ul spacing="normal">
          <li>
            <t>The "rev_scope" parameter is <bcp14>OPTIONAL</bcp14> in an Access Token Request. The presence of this parameter indicates that C wishes the requested access token to specify additional access rights. These are intended for the access token's audience to access protected resources at C as the access token's reverse audience.  </t>
            <t>
This parameter specifies such access rights as a reverse scope. When the Access Token Request is encoded in CBOR, the value of this parameter is encoded as a CBOR text string or a CBOR byte string.</t>
          </li>
          <li>
            <t>The "rev_scope" parameter is <bcp14>OPTIONAL</bcp14> in an Access Token Response. If present, this parameter specifies the access rights that the AS has actually granted as a reverse scope to the access token's audience, for accessing protected resources at C as the access token's reverse audience.</t>
          </li>
        </ul>
        <t>Fundamentally, this parameter has the same semantics of the "scope" parameter used in the ACE framework, with the difference that it conveys the access rights requested/granted as reverse scope for/to the audience of the access token issued by the AS.</t>
        <t>The use of this parameter is further detailed in <xref target="sec-bidirectional-access-control"/>.</t>
      </section>
    </section>
    <section anchor="sec-bidirectional-access-control">
      <name>Bidirectional Access Control</name>
      <t>In some deployments, two devices DEV1 and DEV2 might wish to access each other's protected resources. This can clearly be achieved by means of two separate access tokens, each of which is used to enforce access control in one direction. That is:</t>
      <ul spacing="normal">
        <li>
          <t>A first access token is requested by and issued to DEV1, for accessing protected resources at DEV2. With respect to this access token, DEV1 is an ACE client, while DEV2 is an ACE RS.</t>
        </li>
        <li>
          <t>A second access token is requested by and issued to DEV2, for accessing protected resources at DEV1. With respect to this access token, DEV2 is an ACE client, while DEV1 is an ACE RS.</t>
        </li>
      </ul>
      <t>This section defines how to enforce such a bidirectional access control by means of a single access token, which is requested by and issued to a device DEV1 acting as ACE client. In particular:</t>
      <ul spacing="normal">
        <li>
          <t>The access token expresses access rights according to which the requesting ACE client DEV1 can access protected resources hosted at the ACE RS DEV2.  </t>
          <t>
For this first direction of access control, the target DEV2 is specified by means of the "audience" parameter and the corresponding access token claim "aud", while the access rights are specified by means of the "scope" parameter and the corresponding access token claim "scope".  </t>
          <t>
This is the original, primary direction of access control, where the ACE client DEV1 that requests the access token wishes access rights to access protected resources at the ACE RS DEV2.</t>
        </li>
        <li>
          <t>The same access token additionally expresses access rights according to which the ACE RS DEV2 can access protected resources hosted at the ACE client DEV1.  </t>
          <t>
For this second direction of access control, the target DEV1 is specified by means of the "rev_audience" parameter defined in <xref target="sec-rev_audience"/> and the corresponding access token claim "rev_aud" defined in this section, while the access rights are specified by means of the "rev_scope" parameter defined in <xref target="sec-rev_scope"/> and the corresponding access token claim "rev_scope" defined in this section.  </t>
          <t>
This is the new, secondary direction of access control, where the ACE client DEV1 that requests the access token also wishes access rights for the ACE RS DEV2 to access resources at DEV1.  </t>
          <t>
Clearly, this requires the ACE client DEV1 to also act as CoAP server, and the ACE RS DEV2 to also act as CoAP client.</t>
        </li>
      </ul>
      <t>Like for the original case with a single access control direction, the access token is uploaded to the ACE RS DEV2, which processes the access token as per <xref section="5.10" sectionFormat="of" target="RFC9200"/> and according to the profile of ACE used by DEV1 and DEV2.</t>
      <t>The protocol workflow is detailed in the following <xref target="sec-bidirectional-access-control-one-as"/> and <xref target="sec-bidirectional-access-control-two-as"/>, in case only one authorization server or two authorization servers are involved, respectively.</t>
      <section anchor="sec-bidirectional-access-control-one-as">
        <name>Scenario with One Authorization Server</name>
        <t>As shown in <xref target="fig-bidirectional-one-as"/>, this section considers a scenario with a single authorization server AS. Both devices DEV1 and DEV2 are registered at AS, and each of them with permissions to access protected resources at the other device. In the following, DEV1 acts as ACE client by requesting an access token from AS.</t>
        <figure anchor="fig-bidirectional-one-as">
          <name>Bidirectional access control with one Authorization Server.</name>
          <artset>
            <artwork type="svg"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="352" width="432" viewBox="0 0 432 352" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
                <path d="M 8,304 L 8,336" fill="none" stroke="black"/>
                <path d="M 48,304 L 48,336" fill="none" stroke="black"/>
                <path d="M 384,32 L 384,160" fill="none" stroke="black"/>
                <path d="M 392,304 L 392,336" fill="none" stroke="black"/>
                <path d="M 408,192 L 408,256" fill="none" stroke="black"/>
                <path d="M 424,32 L 424,160" fill="none" stroke="black"/>
                <path d="M 424,304 L 424,336" fill="none" stroke="black"/>
                <path d="M 384,32 L 424,32" fill="none" stroke="black"/>
                <path d="M 384,160 L 424,160" fill="none" stroke="black"/>
                <path d="M 8,304 L 48,304" fill="none" stroke="black"/>
                <path d="M 392,304 L 424,304" fill="none" stroke="black"/>
                <path d="M 64,320 L 376,320" fill="none" stroke="black"/>
                <path d="M 8,336 L 48,336" fill="none" stroke="black"/>
                <path d="M 392,336 L 424,336" fill="none" stroke="black"/>
                <polygon class="arrowhead" points="416,256 404,250.4 404,261.6" fill="black" transform="rotate(90,408,256)"/>
                <polygon class="arrowhead" points="416,192 404,186.4 404,197.6" fill="black" transform="rotate(270,408,192)"/>
                <polygon class="arrowhead" points="384,320 372,314.4 372,325.6" fill="black" transform="rotate(0,376,320)"/>
                <polygon class="arrowhead" points="72,320 60,314.4 60,325.6" fill="black" transform="rotate(180,64,320)"/>
                <g class="text">
                  <text x="8" y="36">-</text>
                  <text x="36" y="36">DEV1</text>
                  <text x="68" y="36">is</text>
                  <text x="124" y="36">registered</text>
                  <text x="184" y="36">as:</text>
                  <text x="24" y="52">-</text>
                  <text x="60" y="52">Device</text>
                  <text x="132" y="52">authorized</text>
                  <text x="188" y="52">to</text>
                  <text x="228" y="52">access</text>
                  <text x="280" y="52">DEV2;</text>
                  <text x="320" y="52">and</text>
                  <text x="24" y="68">-</text>
                  <text x="60" y="68">Device</text>
                  <text x="108" y="68">that</text>
                  <text x="144" y="68">can</text>
                  <text x="172" y="68">be</text>
                  <text x="220" y="68">accessed</text>
                  <text x="268" y="68">by</text>
                  <text x="300" y="68">DEV2</text>
                  <text x="8" y="100">-</text>
                  <text x="36" y="100">DEV2</text>
                  <text x="68" y="100">is</text>
                  <text x="124" y="100">registered</text>
                  <text x="184" y="100">as:</text>
                  <text x="404" y="100">AS</text>
                  <text x="24" y="116">-</text>
                  <text x="60" y="116">Device</text>
                  <text x="108" y="116">that</text>
                  <text x="144" y="116">can</text>
                  <text x="172" y="116">be</text>
                  <text x="220" y="116">accessed</text>
                  <text x="268" y="116">by</text>
                  <text x="304" y="116">DEV1;</text>
                  <text x="344" y="116">and</text>
                  <text x="24" y="132">-</text>
                  <text x="60" y="132">Device</text>
                  <text x="132" y="132">authorized</text>
                  <text x="188" y="132">to</text>
                  <text x="228" y="132">access</text>
                  <text x="276" y="132">DEV1</text>
                  <text x="28" y="292">DEV2</text>
                  <text x="404" y="292">DEV1</text>
                  <text x="28" y="324">RS</text>
                  <text x="408" y="324">C</text>
                </g>
              </svg>
            </artwork>
            <artwork type="ascii-art"><![CDATA[
- DEV1 is registered as:                       +----+
  - Device authorized to access DEV2; and      |    |
  - Device that can be accessed by DEV2        |    |
                                               |    |
- DEV2 is registered as:                       | AS |
  - Device that can be accessed by DEV1; and   |    |
  - Device authorized to access DEV1           |    |
                                               |    |
                                               +----+

                                                  ^
                                                  |
                                                  |
                                                  |
                                                  v

 DEV2                                           DEV1
+----+                                          +---+
| RS | <--------------------------------------> | C |
+----+                                          +---+
]]></artwork>
          </artset>
        </figure>
        <section anchor="sec-bidirectional-access-control-one-as-req">
          <name>Access Token Request</name>
          <t>As to the Access Token Request that DEV1 sends to AS, the following applies.</t>
          <ul spacing="normal">
            <li>
              <t>The "audience" and "scope" parameters are used as defined in <xref target="RFC9200"/>, and according to the profile of ACE used by DEV1 and DEV2.  </t>
              <t>
In particular, "audience" specifies an identifier of DEV2, while "scope" specifies access rights that DEV1 wishes to obtain for accessing protecting resources at DEV2.  </t>
              <t>
That is, the two parameters pertain to the primary direction of access control.</t>
            </li>
            <li>
              <t>The "req_cnf" parameter defined in <xref target="RFC9201"/> can be included. When present, it specifies the key that DEV1 wishes to bind to the requested access token.</t>
            </li>
            <li>
              <t>The "rev_audience" and "rev_scope" parameters defined in <xref target="sec-rev_audience"/> and <xref target="sec-rev_scope"/> can be included.  </t>
              <t>
In particular, "rev_audience" specifies an identifier of DEV1, while "rev_scope" specifies access rights that DEV1 wishes for DEV2 to obtain for accessing protecting resources at DEV1.  </t>
              <t>
That is, the two parameters pertain to the secondary direction of access control.</t>
            </li>
          </ul>
          <t>If DEV1 wishes that the requested access token also provides DEV2 with access rights pertaining to the secondary direction of access control, then the Access Token Request has to include at least one of the two parameters "rev_audience" and "rev_scope".</t>
        </section>
        <section anchor="sec-bidirectional-access-control-one-as-resp">
          <name>Access Token Response</name>
          <t>When receiving an Access Token Request that includes at least one of the two parameters "rev_audience" and "rev_scope", AS processes it as defined in <xref section="5.2" sectionFormat="of" target="RFC9200"/>, with the following additions:</t>
          <ul spacing="normal">
            <li>
              <t>If the Access Token Request includes the "rev_scope" parameter but not the "rev_audience" parameter, then AS assumes the identifier of DEV1 to be the default one, if any is defined.</t>
            </li>
            <li>
              <t>If the Access Token Request includes the "rev_audience" parameter but not the "rev_scope" parameter, then AS assumes the access rights requested for DEV2 to access DEV1 to be the default ones, if any are defined.</t>
            </li>
            <li>
              <t>AS checks whether the access rights requested for DEV2 as reverse scope can be at least partially granted, in accordance with the installed access policies pertaining to the access to protected resources at DEV1 from DEV2.  </t>
              <t>
That is, AS performs the same evaluation that it would perform if DEV2 sent an Access Token Request as an ACE client, with the intent to access protected resources at DEV1 as an ACE RS.  </t>
              <t>
It is <bcp14>REQUIRED</bcp14> that such evaluation succeeds, in order for AS to issue an access token and reply to DEV1 with a successful Access Token Response.</t>
            </li>
          </ul>
          <t>As to the successful Access Token Response that AS sends to DEV1, the following applies.</t>
          <ul spacing="normal">
            <li>
              <t>The "audience" and "scope" parameters are used as defined in <xref target="RFC9200"/>, and according to the profile of ACE used by DEV1 and DEV2.  </t>
              <t>
In particular, "audience" specifies an identifier of DEV2, while "scope" specifies the access rights that AS has granted to DEV1 for accessing protecting resources at DEV2.  </t>
              <t>
The "scope" parameter has to be present if: i) it was present in the Access Token Request, and the access rights granted to DEV1 are different from the requested ones; or ii) it was not present in the Access Token Request, and the access rights granted to DEV1 are different from the default ones.  </t>
              <t>
If the "scope" parameter is not present, then the granted access rights are the same as those requested by the "scope" parameter in the Access Token Request if present therein, or the default access rights otherwise.</t>
            </li>
            <li>
              <t>The "rs_cnf" parameter defined in <xref target="RFC9201"/> can be included. When present, it specifies information about the public key that DEV2 uses to authenticate.</t>
            </li>
            <li>
              <t>The "rev_audience" parameter defined in <xref target="sec-rev_audience"/> can be included, and specifies an identifier of DEV1.  </t>
              <t>
If the "rev_audience" parameter is present in the Access Token Response and it was also present in the Access Token Request, then the parameter in the Access Token Response <bcp14>MUST</bcp14> have the same value specified by the parameter in the Access Token Request.</t>
            </li>
            <li>
              <t>The "rev_scope" parameter defined in <xref target="sec-rev_scope"/> can be included, and specifies access rights that AS has granted to DEV2 for accessing protecting resources at DEV1.  </t>
              <t>
The "rev_scope" parameter <bcp14>MUST</bcp14> be present if: i) it was present in the Access Token Request, and the access rights granted to DEV2 are different from the requested ones; or ii) it was not present in the Access Token Request, and the access rights granted to DEV2 are different from the default ones.  </t>
              <t>
If the "rev_scope" parameter is not present, then the access rights granted to DEV2 are the same as those requested by the "rev_scope" parameter in the Access Token Request if present therein, or the default access rights otherwise.</t>
            </li>
          </ul>
          <t>The issued access token <bcp14>MUST</bcp14> include information about the reverse audience and reverse scope pertaining to the secondary access control direction. In particular:</t>
          <ul spacing="normal">
            <li>
              <t>The access token <bcp14>MUST</bcp14> contain a claim specifying the identifier of DEV1.  </t>
              <t>
If the Access Token Response includes the "rev_audience" parameter, then the claim specifies the same information conveyed by that parameter.  </t>
              <t>
If this is not the case, then the claim specifies the same information conveyed by the "rev_audience" parameter of the Access Token Request, if included therein, or the default identifier of DEV1 otherwise.  </t>
              <t>
When CWTs are used as access tokens, this information <bcp14>MUST</bcp14> be transported in the "rev_aud" claim registered in <xref target="iana-token-cwt-claims"/>.</t>
            </li>
            <li>
              <t>The access token <bcp14>MUST</bcp14> contain a claim specifying the access rights that AS has granted to DEV2 for accessing protecting resources at DEV1.  </t>
              <t>
If the Access Token Response includes the "rev_scope" parameter, then the claim specifies the same information conveyed by that parameter.  </t>
              <t>
If this is not the case, then the claim specifies the same information conveyed by the "rev_scope" parameter of the Access Token Request, if included therein, or the default access rights for DEV2 to access DEV1 otherwise.  </t>
              <t>
When CWTs are used as access tokens, this information <bcp14>MUST</bcp14> be transported in the "rev_scope" claim, registered in <xref target="iana-token-cwt-claims"/>.</t>
            </li>
          </ul>
        </section>
        <section anchor="sec-bidirectional-access-control-one-as-comm">
          <name>Access to Protected Resources</name>
          <t>As to the secure communication association between DEV1 and DEV2, its establishment and maintenance does not deviate from what is defined in the profile of ACE used by DEV1 and DEV2.</t>
          <t>Furthermore, communications between DEV1 and DEV2 <bcp14>MUST</bcp14> rely on such secure communication association for both directions of access control, i.e., when DEV1 accesses protected resources at DEV2 and vice versa.</t>
          <t>After having received a successful Access Token Response from AS, DEV1 <bcp14>MUST</bcp14> maintain and enforce the information about the access rights granted to DEV2 and pertaining to the secondary access control direction.</t>
          <t>In particular, DEV1 <bcp14>MUST</bcp14> prevent DEV2 from accessing protected resources at DEV1, in case access requests from DEV2 are not authorized as per the reverse scope specified by the issued access token, or after having purged the issued access token (e.g., following its expiration of revocation).</t>
        </section>
      </section>
      <section anchor="sec-bidirectional-access-control-two-as">
        <name>Scenario with Two Authorization Servers</name>
        <t>TBD</t>
      </section>
      <section anchor="practical-considerations">
        <name>Practical Considerations</name>
        <t>When enforcing bidirectional access control by means of a single access token, the following considerations hold.</t>
        <ul spacing="normal">
          <li>
            <t>The access token can be uploaded to the ACE RS DEV2 by the ACE client per the original ACE workflow, or by the AS that has issued the access token per the new ACE workflow defined in <xref target="sec-workflow"/>.</t>
          </li>
          <li>
            <t>Since the access token is requested by the ACE client DEV1, only DEV1 can request for a new access token in the same token series, in order to dynamically update the access rights concerning its own access to protected resources hosted by DEV2 (on the primary access control direction) and/or the access rights concerning the access of DEV2 to access protected resources hosted by DEV1 (on the secondary access control direction).</t>
          </li>
        </ul>
      </section>
    </section>
    <section anchor="sec-updated-requirements">
      <name>Updated Requirements on Profiles</name>
      <t><xref section="C" sectionFormat="of" target="RFC9200"/> compiles a list of requirements on the profiles of ACE. This document amends two of those requirements as follows.</t>
      <t>The text of the fifth requirement</t>
      <blockquote>
        <t>Specify the security protocol the client and RS must use to protect their communication (e.g., OSCORE or DTLS). This must provide encryption and integrity and replay protection (Section 5.8.4.3).</t>
      </blockquote>
      <t>is replaced by the following text:</t>
      <blockquote>
        <t>Specify the security protocol the client and RS must use to protect their communication (e.g., OSCORE or DTLS). In combination with the used communication protocol, this must provide encryption, integrity and replay protection, and a binding between requests and responses (Section 5.8.4.3 and Section 6.5).</t>
      </blockquote>
      <t>The text of the tenth requirement</t>
      <blockquote>
        <t>Specify the communication and security protocol for interactions between the client and AS. This must provide encryption, integrity protection, replay protection, and a binding between requests and responses (Sections 5 and 5.8).</t>
      </blockquote>
      <t>is replaced by the following text:</t>
      <blockquote>
        <t>Specify the communication and security protocol for interactions between the client and AS. The combined use of those protocols must provide encryption, integrity protection, replay protection, and a binding between requests and responses (Sections 5 and 5.8).</t>
      </blockquote>
      <t>At the time of writing, all the profiles of ACE that are published as RFC (i.e., <xref target="RFC9202"/><xref target="RFC9203"/><xref target="RFC9431"/>) already comply with the two updated requirements as formulated above.</t>
    </section>
    <section anchor="sec-updated-error-responses">
      <name>Updated Payload Format of Error Responses</name>
      <t>This section deprecates the original payload format of error responses conveying an error code, when CBOR is used to encode message payloads in the ACE framework. That format is referred to, e.g., when defining the error responses of Sections <xref target="RFC9200" section="5.8.3" sectionFormat="bare"/> and <xref target="RFC9200" section="5.9.3" sectionFormat="bare"/> of <xref target="RFC9200"/>.</t>
      <t>Also, this section defines a new payload format that allows such error responses to convey an error code together with further error-specific information, according to the problem-details format specified in <xref target="RFC9290"/>.</t>
      <t>Such error responses <bcp14>MUST</bcp14> have Content-Format set to application/concise-problem-details+cbor. The payload of these error responses <bcp14>MUST</bcp14> be a CBOR map specifying a Concise Problem Details data item (see <xref section="2" sectionFormat="of" target="RFC9290"/>). The CBOR map is formatted as follows.</t>
      <ul spacing="normal">
        <li>
          <t>It <bcp14>MUST</bcp14> include the Custom Problem Detail entry "ace-error" registered in <xref target="iana-problem-details"/> of this document.  </t>
          <t>
This entry is formatted as a CBOR map including only one field, namely "error-code". The map key for "error-code" is the CBOR unsigned integer with value 0. The value of "error-code" is a CBOR integer specifying the error code associated with the occurred error. This value is taken from the "CBOR Value" column of the "OAuth Error Code CBOR Mappings" registry <xref target="ACE.OAuth.Error.Code.CBOR.Mappings"/>.  </t>
          <t>
The new payload format <bcp14>MUST</bcp14> use the field "error-code" in order to convey the same information that the original payload format conveys through the "error" parameter (see, e.g., Sections <xref target="RFC9200" section="5.8.3" sectionFormat="bare"/> and <xref target="RFC9200" section="5.9.3" sectionFormat="bare"/> of <xref target="RFC9200"/>).  </t>
          <t>
The CDDL notation <xref target="RFC8610"/> of the "ace-error" entry is given below.</t>
        </li>
      </ul>
      <sourcecode type="CDDL"><![CDATA[
   ace-error = {
     &(error-code: 0) => int
   }
]]></sourcecode>
      <ul spacing="normal">
        <li>
          <t>It <bcp14>MAY</bcp14> include further Standard Problem Detail entries or Custom Problem Detail entries (see <xref target="RFC9290"/>). The following Standard Problem Detail entries are of particular relevance for the ACE framework.  </t>
          <ul spacing="normal">
            <li>
              <t>"detail" (map key -2): its value is a CBOR text string that specifies a human-readable, diagnostic description of the occurred error (see <xref section="2" sectionFormat="of" target="RFC9290"/>).      </t>
              <t>
The diagnostic text is intended for software engineers as well as for device and network operators, in order to aid debugging and provide context for possible intervention. The diagnostic message <bcp14>SHOULD</bcp14> be logged by the sender of the error response. The entry "detail" is unlikely relevant in an unattended setup where human intervention is not expected.      </t>
              <t>
The new payload format <bcp14>MUST</bcp14> use the Standard Problem Detail entry "detail" in order to convey the same information that the original payload format conveys through the "error_description" parameter (see, e.g., Sections <xref target="RFC9200" section="5.8.3" sectionFormat="bare"/> and <xref target="RFC9200" section="5.9.3" sectionFormat="bare"/> of <xref target="RFC9200"/>).</t>
            </li>
            <li>
              <t>"instance" (map key -3): its value is a URI reference identifying the specific occurrence of the error (see <xref section="2" sectionFormat="of" target="RFC9290"/>).      </t>
              <t>
The new payload format <bcp14>MUST</bcp14> use the Standard Problem Detail entry "instance" in order to convey the same information that the original payload format conveys through the "error_uri" parameter (see, e.g., Sections <xref target="RFC9200" section="5.8.3" sectionFormat="bare"/> and <xref target="RFC9200" section="5.9.3" sectionFormat="bare"/> of <xref target="RFC9200"/>).</t>
            </li>
          </ul>
        </li>
      </ul>
      <t>An example of error response using the problem-details format is shown in <xref target="fig-example-error-response"/>.</t>
      <figure anchor="fig-example-error-response">
        <name>Example of Error Response with Problem Details.</name>
        <artwork><![CDATA[
Header: Bad Request (Code=4.00)
Content-Format: 257 (application/concise-problem-details+cbor)
Payload:
{
  / title /  -1 : "Incompatible ACE profile",
  / detail / -2 : "The RS supports only the OSCORE profile",
    e'ace-error': {
      / error_code / 0: 8 / incompatible_ace_profiles /
    }
}
]]></artwork>
      </figure>
      <t>When the ACE framework is used with CBOR for encoding message payloads, the following applies.</t>
      <ul spacing="normal">
        <li>
          <t>It is <bcp14>RECOMMENDED</bcp14> that authorization servers, clients, and resource servers support the payload format defined in this section.</t>
        </li>
        <li>
          <t>Authorization servers, clients, and resource servers that support the payload format defined in this section <bcp14>MUST</bcp14> use it when composing an outgoing error response that conveys an error code.</t>
        </li>
      </ul>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <t>The same security considerations from the ACE framework for Authentication and Authorization <xref target="RFC9200"/> apply to this document, together with those from the specific profile of ACE used, e.g., <xref target="RFC9202"/><xref target="RFC9203"/><xref target="RFC9431"/><xref target="I-D.ietf-ace-edhoc-oscore-profile"/><xref target="I-D.ietf-ace-group-oscore-profile"/><xref target="RFC9431"/>.</t>
      <t>When using the problem-details format defined in <xref target="RFC9290"/> for error responses, then the privacy and security considerations from Sections <xref target="RFC9290" section="4" sectionFormat="bare"/> and <xref target="RFC9290" section="5" sectionFormat="bare"/> of <xref target="RFC9290"/> also apply.</t>
      <t>Editor's note: add more security considerations.</t>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <t>This document has the following actions for IANA.</t>
      <t>Note to RFC Editor: Please replace all occurrences of "[RFC-XXXX]" with the RFC number of this specification and delete this paragraph.</t>
      <section anchor="iana-oauth-params">
        <name>OAuth Parameters Registry</name>
        <t>IANA is asked to add the following entries to the "OAuth Parameters" registry.</t>
        <ul spacing="normal">
          <li>
            <t>Name: "token_upload"</t>
          </li>
          <li>
            <t>Parameter Usage Location: token request and token response</t>
          </li>
          <li>
            <t>Change Controller: IETF</t>
          </li>
          <li>
            <t>Reference: [RFC-XXXX]</t>
          </li>
        </ul>
        <t><br/></t>
        <ul spacing="normal">
          <li>
            <t>Name: "token_hash"</t>
          </li>
          <li>
            <t>Parameter Usage Location: token response</t>
          </li>
          <li>
            <t>Change Controller: IETF</t>
          </li>
          <li>
            <t>Reference: [RFC-XXXX]</t>
          </li>
        </ul>
        <t><br/></t>
        <ul spacing="normal">
          <li>
            <t>Name: "to_rs"</t>
          </li>
          <li>
            <t>Parameter Usage Location: token request</t>
          </li>
          <li>
            <t>Change Controller: IETF</t>
          </li>
          <li>
            <t>Reference: [RFC-XXXX]</t>
          </li>
        </ul>
        <t><br/></t>
        <ul spacing="normal">
          <li>
            <t>Name: "from_rs"</t>
          </li>
          <li>
            <t>Parameter Usage Location: token response</t>
          </li>
          <li>
            <t>Change Controller: IETF</t>
          </li>
          <li>
            <t>Reference: [RFC-XXXX]</t>
          </li>
        </ul>
        <t><br/></t>
        <ul spacing="normal">
          <li>
            <t>Name: "rs_cnf2"</t>
          </li>
          <li>
            <t>Parameter Usage Location: token response</t>
          </li>
          <li>
            <t>Change Controller: IETF</t>
          </li>
          <li>
            <t>Reference: [RFC-XXXX]</t>
          </li>
        </ul>
        <t><br/></t>
        <ul spacing="normal">
          <li>
            <t>Name: "audience2"</t>
          </li>
          <li>
            <t>Parameter Usage Location: token response</t>
          </li>
          <li>
            <t>Change Controller: IETF</t>
          </li>
          <li>
            <t>Reference: [RFC-XXXX]</t>
          </li>
        </ul>
        <t><br/></t>
        <ul spacing="normal">
          <li>
            <t>Name: "anchor_cnf"</t>
          </li>
          <li>
            <t>Parameter Usage Location: token response</t>
          </li>
          <li>
            <t>Change Controller: IETF</t>
          </li>
          <li>
            <t>Reference: [RFC-XXXX]</t>
          </li>
        </ul>
        <t><br/></t>
        <ul spacing="normal">
          <li>
            <t>Name: "token_series_id"</t>
          </li>
          <li>
            <t>Parameter Usage Location: token request and token response</t>
          </li>
          <li>
            <t>Change Controller: IETF</t>
          </li>
          <li>
            <t>Reference: [RFC-XXXX]</t>
          </li>
        </ul>
        <t><br/></t>
        <ul spacing="normal">
          <li>
            <t>Name: "rev_audience"</t>
          </li>
          <li>
            <t>Parameter Usage Location: token request and token response</t>
          </li>
          <li>
            <t>Change Controller: IETF</t>
          </li>
          <li>
            <t>Reference: [RFC-XXXX]</t>
          </li>
        </ul>
        <t><br/></t>
        <ul spacing="normal">
          <li>
            <t>Name: "rev_scope"</t>
          </li>
          <li>
            <t>Parameter Usage Location: token request and token response</t>
          </li>
          <li>
            <t>Change Controller: IETF</t>
          </li>
          <li>
            <t>Reference: [RFC-XXXX]</t>
          </li>
        </ul>
      </section>
      <section anchor="iana-oauth-cbor-mappings">
        <name>OAuth Parameters CBOR Mappings Registry</name>
        <t>IANA is asked to add the following entries to the "OAuth Parameters CBOR Mappings" registry, following the procedure specified in <xref target="RFC9200"/>.</t>
        <ul spacing="normal">
          <li>
            <t>Name: "token_upload"</t>
          </li>
          <li>
            <t>CBOR Key: TBD</t>
          </li>
          <li>
            <t>Value Type: unsigned integer</t>
          </li>
          <li>
            <t>Reference: [RFC-XXXX]</t>
          </li>
          <li>
            <t>Original Specification: [RFC-XXXX]</t>
          </li>
        </ul>
        <t><br/></t>
        <ul spacing="normal">
          <li>
            <t>Name: "token_hash"</t>
          </li>
          <li>
            <t>CBOR Key: TBD</t>
          </li>
          <li>
            <t>Value Type: unsigned integer</t>
          </li>
          <li>
            <t>Reference: [RFC-XXXX]</t>
          </li>
          <li>
            <t>Original Specification: [RFC-XXXX]</t>
          </li>
        </ul>
        <t><br/></t>
        <ul spacing="normal">
          <li>
            <t>Name: "to_rs"</t>
          </li>
          <li>
            <t>CBOR Key: TBD</t>
          </li>
          <li>
            <t>Value Type: byte string</t>
          </li>
          <li>
            <t>Reference: [RFC-XXXX]</t>
          </li>
          <li>
            <t>Original Specification: [RFC-XXXX]</t>
          </li>
        </ul>
        <t><br/></t>
        <ul spacing="normal">
          <li>
            <t>Name: "from_rs"</t>
          </li>
          <li>
            <t>CBOR Key: TBD</t>
          </li>
          <li>
            <t>Value Type: byte string</t>
          </li>
          <li>
            <t>Reference: [RFC-XXXX]</t>
          </li>
          <li>
            <t>Original Specification: [RFC-XXXX]</t>
          </li>
        </ul>
        <t><br/></t>
        <ul spacing="normal">
          <li>
            <t>Name: "rs_cnf2"</t>
          </li>
          <li>
            <t>CBOR Key: TBD</t>
          </li>
          <li>
            <t>Value Type: array</t>
          </li>
          <li>
            <t>Reference: [RFC-XXXX]</t>
          </li>
          <li>
            <t>Original Specification: [RFC-XXXX]</t>
          </li>
        </ul>
        <t><br/></t>
        <ul spacing="normal">
          <li>
            <t>Name: "audience2"</t>
          </li>
          <li>
            <t>CBOR Key: TBD</t>
          </li>
          <li>
            <t>Value Type: array</t>
          </li>
          <li>
            <t>Reference: [RFC-XXXX]</t>
          </li>
          <li>
            <t>Original Specification: [RFC-XXXX]</t>
          </li>
        </ul>
        <t><br/></t>
        <ul spacing="normal">
          <li>
            <t>Name: "anchor_cnf"</t>
          </li>
          <li>
            <t>CBOR Key: TBD</t>
          </li>
          <li>
            <t>Value Type: array</t>
          </li>
          <li>
            <t>Reference: [RFC-XXXX]</t>
          </li>
          <li>
            <t>Original Specification: [RFC-XXXX]</t>
          </li>
        </ul>
        <t><br/></t>
        <ul spacing="normal">
          <li>
            <t>Name: "token_series_id"</t>
          </li>
          <li>
            <t>CBOR Key: TBD</t>
          </li>
          <li>
            <t>Value Type: byte string</t>
          </li>
          <li>
            <t>Reference: [RFC-XXXX]</t>
          </li>
          <li>
            <t>Original Specification: [RFC-XXXX]</t>
          </li>
        </ul>
        <t><br/></t>
        <ul spacing="normal">
          <li>
            <t>Name: "rev_audience"</t>
          </li>
          <li>
            <t>CBOR Key: TBD</t>
          </li>
          <li>
            <t>Value Type: text string</t>
          </li>
          <li>
            <t>Reference: [RFC-XXXX]</t>
          </li>
          <li>
            <t>Original Specification: [RFC-XXXX]</t>
          </li>
        </ul>
        <t><br/></t>
        <ul spacing="normal">
          <li>
            <t>Name: "rev_scope"</t>
          </li>
          <li>
            <t>CBOR Key: TBD</t>
          </li>
          <li>
            <t>Value Type: text string or byte string</t>
          </li>
          <li>
            <t>Reference: [RFC-XXXX]</t>
          </li>
          <li>
            <t>Original Specification: [RFC-XXXX]</t>
          </li>
        </ul>
      </section>
      <section anchor="iana-token-json-claims">
        <name>JSON Web Token Claims Registry</name>
        <t>IANA is asked to add the following entries to the "JSON Web Token Claims" registry, following the procedure specified in <xref target="RFC7519"/>.</t>
        <ul spacing="normal">
          <li>
            <t>Claim Name: "token_series_id"</t>
          </li>
          <li>
            <t>Claim Description: The identifier of a token series</t>
          </li>
          <li>
            <t>Change Controller: IETF</t>
          </li>
          <li>
            <t>Reference: [RFC-XXXX]</t>
          </li>
        </ul>
        <t><br/></t>
        <ul spacing="normal">
          <li>
            <t>Claim Name: "rev_aud"</t>
          </li>
          <li>
            <t>Claim Description: The reverse audience of an access token</t>
          </li>
          <li>
            <t>Change Controller: IETF</t>
          </li>
          <li>
            <t>Reference: [RFC-XXXX]</t>
          </li>
        </ul>
        <t><br/></t>
        <ul spacing="normal">
          <li>
            <t>Claim Name: "rev_scope"</t>
          </li>
          <li>
            <t>Claim Description: The reverse scope of an access token</t>
          </li>
          <li>
            <t>Change Controller: IETF</t>
          </li>
          <li>
            <t>Reference: [RFC-XXXX]</t>
          </li>
        </ul>
      </section>
      <section anchor="iana-token-cwt-claims">
        <name>CBOR Web Token (CWT) Claims Registry</name>
        <t>IANA is asked to add the following entries to the "CBOR Web Token (CWT) Claims" registry, following the procedure specified in <xref target="RFC8392"/>.</t>
        <ul spacing="normal">
          <li>
            <t>Claim Name: "token_series_id"</t>
          </li>
          <li>
            <t>Claim Description: The identifier of a token series</t>
          </li>
          <li>
            <t>JWT Claim Name: "token_series_id"</t>
          </li>
          <li>
            <t>Claim Key: TBD</t>
          </li>
          <li>
            <t>Claim Value Type: byte string</t>
          </li>
          <li>
            <t>Change Controller: IETF</t>
          </li>
          <li>
            <t>Reference: <xref target="sec-bidirectional-access-control"/> of [RFC-XXXX]</t>
          </li>
        </ul>
        <t><br/></t>
        <ul spacing="normal">
          <li>
            <t>Claim Name: "rev_aud"</t>
          </li>
          <li>
            <t>Claim Description: The reverse audience of an access token</t>
          </li>
          <li>
            <t>JWT Claim Name: "rev_aud"</t>
          </li>
          <li>
            <t>Claim Key: TBD</t>
          </li>
          <li>
            <t>Claim Value Type: text string</t>
          </li>
          <li>
            <t>Change Controller: IETF</t>
          </li>
          <li>
            <t>Reference: <xref target="sec-bidirectional-access-control"/> of [RFC-XXXX]</t>
          </li>
        </ul>
        <t><br/></t>
        <ul spacing="normal">
          <li>
            <t>Claim Name: "rev_scope"</t>
          </li>
          <li>
            <t>Claim Description: The reverse scope of an access token</t>
          </li>
          <li>
            <t>JWT Claim Name: "rev_scope"</t>
          </li>
          <li>
            <t>Claim Key: TBD</t>
          </li>
          <li>
            <t>Claim Value Type: text string or byte string</t>
          </li>
          <li>
            <t>Change Controller: IETF</t>
          </li>
          <li>
            <t>Reference: <xref target="sec-bidirectional-access-control"/> of [RFC-XXXX]</t>
          </li>
        </ul>
      </section>
      <section anchor="iana-problem-details">
        <name>Custom Problem Detail Keys Registry</name>
        <t>IANA is asked to register the following entry in the "Custom Problem Detail Keys" registry within the "Constrained RESTful Environments (CoRE) Parameters" registry group.</t>
        <ul spacing="normal">
          <li>
            <t>Key Value: TBD</t>
          </li>
          <li>
            <t>Name: ace-error</t>
          </li>
          <li>
            <t>Brief Description: Carry ACE <xref target="RFC9200"/> problem details in a Concise Problem Details data item.</t>
          </li>
          <li>
            <t>Change Controller: IETF</t>
          </li>
          <li>
            <t>Reference: <xref target="sec-updated-error-responses"/> of [RFC-XXXX]</t>
          </li>
        </ul>
      </section>
    </section>
  </middle>
  <back>
    <references>
      <name>References</name>
      <references>
        <name>Normative References</name>
        <reference anchor="RFC3629">
          <front>
            <title>UTF-8, a transformation format of ISO 10646</title>
            <author fullname="F. Yergeau" initials="F." surname="Yergeau"/>
            <date month="November" year="2003"/>
            <abstract>
              <t>ISO/IEC 10646-1 defines a large character set called the Universal Character Set (UCS) which encompasses most of the world's writing systems. The originally proposed encodings of the UCS, however, were not compatible with many current applications and protocols, and this has led to the development of UTF-8, the object of this memo. UTF-8 has the characteristic of preserving the full US-ASCII range, providing compatibility with file systems, parsers and other software that rely on US-ASCII values but are transparent to other values. This memo obsoletes and replaces RFC 2279.</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="63"/>
          <seriesInfo name="RFC" value="3629"/>
          <seriesInfo name="DOI" value="10.17487/RFC3629"/>
        </reference>
        <reference anchor="RFC4648">
          <front>
            <title>The Base16, Base32, and Base64 Data Encodings</title>
            <author fullname="S. Josefsson" initials="S." surname="Josefsson"/>
            <date month="October" year="2006"/>
            <abstract>
              <t>This document describes the commonly used base 64, base 32, and base 16 encoding schemes. It also discusses the use of line-feeds in encoded data, use of padding in encoded data, use of non-alphabet characters in encoded data, use of different encoding alphabets, and canonical encodings. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="4648"/>
          <seriesInfo name="DOI" value="10.17487/RFC4648"/>
        </reference>
        <reference anchor="RFC6749">
          <front>
            <title>The OAuth 2.0 Authorization Framework</title>
            <author fullname="D. Hardt" initials="D." role="editor" surname="Hardt"/>
            <date month="October" year="2012"/>
            <abstract>
              <t>The OAuth 2.0 authorization framework enables a third-party application to obtain limited access to an HTTP service, either on behalf of a resource owner by orchestrating an approval interaction between the resource owner and the HTTP service, or by allowing the third-party application to obtain access on its own behalf. This specification replaces and obsoletes the OAuth 1.0 protocol described in RFC 5849. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6749"/>
          <seriesInfo name="DOI" value="10.17487/RFC6749"/>
        </reference>
        <reference anchor="RFC6920">
          <front>
            <title>Naming Things with Hashes</title>
            <author fullname="S. Farrell" initials="S." surname="Farrell"/>
            <author fullname="D. Kutscher" initials="D." surname="Kutscher"/>
            <author fullname="C. Dannewitz" initials="C." surname="Dannewitz"/>
            <author fullname="B. Ohlman" initials="B." surname="Ohlman"/>
            <author fullname="A. Keranen" initials="A." surname="Keranen"/>
            <author fullname="P. Hallam-Baker" initials="P." surname="Hallam-Baker"/>
            <date month="April" year="2013"/>
            <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">
          <front>
            <title>The Constrained Application Protocol (CoAP)</title>
            <author fullname="Z. Shelby" initials="Z." surname="Shelby"/>
            <author fullname="K. Hartke" initials="K." surname="Hartke"/>
            <author fullname="C. Bormann" initials="C." surname="Bormann"/>
            <date month="June" year="2014"/>
            <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="RFC7519">
          <front>
            <title>JSON Web Token (JWT)</title>
            <author fullname="M. Jones" initials="M." surname="Jones"/>
            <author fullname="J. Bradley" initials="J." surname="Bradley"/>
            <author fullname="N. Sakimura" initials="N." surname="Sakimura"/>
            <date month="May" year="2015"/>
            <abstract>
              <t>JSON Web Token (JWT) is a compact, URL-safe means of representing claims to be transferred between two parties. The claims in a JWT are encoded as a JSON object that is used as the payload of a JSON Web Signature (JWS) structure or as the plaintext of a JSON Web Encryption (JWE) structure, enabling the claims to be digitally signed or integrity protected with a Message Authentication Code (MAC) and/or encrypted.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7519"/>
          <seriesInfo name="DOI" value="10.17487/RFC7519"/>
        </reference>
        <reference anchor="RFC7800">
          <front>
            <title>Proof-of-Possession Key Semantics for JSON Web Tokens (JWTs)</title>
            <author fullname="M. Jones" initials="M." surname="Jones"/>
            <author fullname="J. Bradley" initials="J." surname="Bradley"/>
            <author fullname="H. Tschofenig" initials="H." surname="Tschofenig"/>
            <date month="April" year="2016"/>
            <abstract>
              <t>This specification describes how to declare in a JSON Web Token (JWT) that the presenter of the JWT possesses a particular proof-of- possession key and how the recipient can cryptographically confirm proof of possession of the key by the presenter. Being able to prove possession of a key is also sometimes described as the presenter being a holder-of-key.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7800"/>
          <seriesInfo name="DOI" value="10.17487/RFC7800"/>
        </reference>
        <reference anchor="RFC8259">
          <front>
            <title>The JavaScript Object Notation (JSON) Data Interchange Format</title>
            <author fullname="T. Bray" initials="T." role="editor" surname="Bray"/>
            <date month="December" year="2017"/>
            <abstract>
              <t>JavaScript Object Notation (JSON) is a lightweight, text-based, language-independent data interchange format. It was derived from the ECMAScript Programming Language Standard. JSON defines a small set of formatting rules for the portable representation of structured data.</t>
              <t>This document removes inconsistencies with other specifications of JSON, repairs specification errors, and offers experience-based interoperability guidance.</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="90"/>
          <seriesInfo name="RFC" value="8259"/>
          <seriesInfo name="DOI" value="10.17487/RFC8259"/>
        </reference>
        <reference anchor="RFC8392">
          <front>
            <title>CBOR Web Token (CWT)</title>
            <author fullname="M. Jones" initials="M." surname="Jones"/>
            <author fullname="E. Wahlstroem" initials="E." surname="Wahlstroem"/>
            <author fullname="S. Erdtman" initials="S." surname="Erdtman"/>
            <author fullname="H. Tschofenig" initials="H." surname="Tschofenig"/>
            <date month="May" year="2018"/>
            <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="RFC8446">
          <front>
            <title>The Transport Layer Security (TLS) Protocol Version 1.3</title>
            <author fullname="E. Rescorla" initials="E." surname="Rescorla"/>
            <date month="August" year="2018"/>
            <abstract>
              <t>This document specifies version 1.3 of the Transport Layer Security (TLS) protocol. TLS allows client/server applications to communicate over the Internet in a way that is designed to prevent eavesdropping, tampering, and message forgery.</t>
              <t>This document updates RFCs 5705 and 6066, and obsoletes RFCs 5077, 5246, and 6961. This document also specifies new requirements for TLS 1.2 implementations.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8446"/>
          <seriesInfo name="DOI" value="10.17487/RFC8446"/>
        </reference>
        <reference anchor="RFC8610">
          <front>
            <title>Concise Data Definition Language (CDDL): A Notational Convention to Express Concise Binary Object Representation (CBOR) and JSON Data Structures</title>
            <author fullname="H. Birkholz" initials="H." surname="Birkholz"/>
            <author fullname="C. Vigano" initials="C." surname="Vigano"/>
            <author fullname="C. Bormann" initials="C." surname="Bormann"/>
            <date month="June" year="2019"/>
            <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="RFC8747">
          <front>
            <title>Proof-of-Possession Key Semantics for CBOR Web Tokens (CWTs)</title>
            <author fullname="M. Jones" initials="M." surname="Jones"/>
            <author fullname="L. Seitz" initials="L." surname="Seitz"/>
            <author fullname="G. Selander" initials="G." surname="Selander"/>
            <author fullname="S. Erdtman" initials="S." surname="Erdtman"/>
            <author fullname="H. Tschofenig" initials="H." surname="Tschofenig"/>
            <date month="March" year="2020"/>
            <abstract>
              <t>This specification describes how to declare in a CBOR Web Token (CWT) (which is defined by RFC 8392) that the presenter of the CWT possesses a particular proof-of-possession key. Being able to prove possession of a key is also sometimes described as being the holder-of-key. This specification provides equivalent functionality to "Proof-of-Possession Key Semantics for JSON Web Tokens (JWTs)" (RFC 7800) but using Concise Binary Object Representation (CBOR) and CWTs rather than JavaScript Object Notation (JSON) and JSON Web Tokens (JWTs).</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8747"/>
          <seriesInfo name="DOI" value="10.17487/RFC8747"/>
        </reference>
        <reference anchor="RFC8949">
          <front>
            <title>Concise Binary Object Representation (CBOR)</title>
            <author fullname="C. Bormann" initials="C." surname="Bormann"/>
            <author fullname="P. Hoffman" initials="P." surname="Hoffman"/>
            <date month="December" year="2020"/>
            <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="RFC9052">
          <front>
            <title>CBOR Object Signing and Encryption (COSE): Structures and Process</title>
            <author fullname="J. Schaad" initials="J." surname="Schaad"/>
            <date month="August" year="2022"/>
            <abstract>
              <t>Concise Binary Object Representation (CBOR) is a data format designed for small code size and small message size. There is a need to be able to define basic security services for this data format. This document defines the CBOR Object Signing and Encryption (COSE) protocol. This specification describes how to create and process signatures, message authentication codes, and encryption using CBOR for serialization. This specification additionally describes how to represent cryptographic keys using CBOR.</t>
              <t>This document, along with RFC 9053, obsoletes RFC 8152.</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="96"/>
          <seriesInfo name="RFC" value="9052"/>
          <seriesInfo name="DOI" value="10.17487/RFC9052"/>
        </reference>
        <reference anchor="RFC9053">
          <front>
            <title>CBOR Object Signing and Encryption (COSE): Initial Algorithms</title>
            <author fullname="J. Schaad" initials="J." surname="Schaad"/>
            <date month="August" year="2022"/>
            <abstract>
              <t>Concise Binary Object Representation (CBOR) is a data format designed for small code size and small message size. There is a need to be able to define basic security services for this data format. This document defines a set of algorithms that can be used with the CBOR Object Signing and Encryption (COSE) protocol (RFC 9052).</t>
              <t>This document, along with RFC 9052, obsoletes RFC 8152.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9053"/>
          <seriesInfo name="DOI" value="10.17487/RFC9053"/>
        </reference>
        <reference anchor="RFC9200">
          <front>
            <title>Authentication and Authorization for Constrained Environments Using the OAuth 2.0 Framework (ACE-OAuth)</title>
            <author fullname="L. Seitz" initials="L." surname="Seitz"/>
            <author fullname="G. Selander" initials="G." surname="Selander"/>
            <author fullname="E. Wahlstroem" initials="E." surname="Wahlstroem"/>
            <author fullname="S. Erdtman" initials="S." surname="Erdtman"/>
            <author fullname="H. Tschofenig" initials="H." surname="Tschofenig"/>
            <date month="August" year="2022"/>
            <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="RFC" value="9200"/>
          <seriesInfo name="DOI" value="10.17487/RFC9200"/>
        </reference>
        <reference anchor="RFC9201">
          <front>
            <title>Additional OAuth Parameters for Authentication and Authorization for Constrained Environments (ACE)</title>
            <author fullname="L. Seitz" initials="L." surname="Seitz"/>
            <date month="August" year="2022"/>
            <abstract>
              <t>This specification defines new parameters and encodings for the OAuth 2.0 token and introspection endpoints when used with the framework for Authentication and Authorization for Constrained Environments (ACE). These are used to express the proof-of-possession (PoP) key the client wishes to use, the PoP key that the authorization server has selected, and the PoP key the resource server uses to authenticate to the client.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9201"/>
          <seriesInfo name="DOI" value="10.17487/RFC9201"/>
        </reference>
        <reference anchor="RFC9202">
          <front>
            <title>Datagram Transport Layer Security (DTLS) Profile for Authentication and Authorization for Constrained Environments (ACE)</title>
            <author fullname="S. Gerdes" initials="S." surname="Gerdes"/>
            <author fullname="O. Bergmann" initials="O." surname="Bergmann"/>
            <author fullname="C. Bormann" initials="C." surname="Bormann"/>
            <author fullname="G. Selander" initials="G." surname="Selander"/>
            <author fullname="L. Seitz" initials="L." surname="Seitz"/>
            <date month="August" year="2022"/>
            <abstract>
              <t>This specification defines a profile of the Authentication and Authorization for Constrained Environments (ACE) framework that allows constrained servers to delegate client authentication and authorization. The protocol relies on DTLS version 1.2 or later for communication security between entities in a constrained network using either raw public keys or pre-shared keys. A resource-constrained server can use this protocol to delegate management of authorization information to a trusted host with less-severe limitations regarding processing power and memory.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9202"/>
          <seriesInfo name="DOI" value="10.17487/RFC9202"/>
        </reference>
        <reference anchor="RFC9203">
          <front>
            <title>The Object Security for Constrained RESTful Environments (OSCORE) Profile of the Authentication and Authorization for Constrained Environments (ACE) Framework</title>
            <author fullname="F. Palombini" initials="F." surname="Palombini"/>
            <author fullname="L. Seitz" initials="L." surname="Seitz"/>
            <author fullname="G. Selander" initials="G." surname="Selander"/>
            <author fullname="M. Gunnarsson" initials="M." surname="Gunnarsson"/>
            <date month="August" year="2022"/>
            <abstract>
              <t>This document specifies a profile for the Authentication and Authorization for Constrained Environments (ACE) framework. It utilizes Object Security for Constrained RESTful Environments (OSCORE) to provide communication security and proof-of-possession for a key owned by the client and bound to an OAuth 2.0 access token.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9203"/>
          <seriesInfo name="DOI" value="10.17487/RFC9203"/>
        </reference>
        <reference anchor="RFC9290">
          <front>
            <title>Concise Problem Details for Constrained Application Protocol (CoAP) APIs</title>
            <author fullname="T. Fossati" initials="T." surname="Fossati"/>
            <author fullname="C. Bormann" initials="C." surname="Bormann"/>
            <date month="October" year="2022"/>
            <abstract>
              <t>This document defines a concise "problem detail" as a way to carry machine-readable details of errors in a Representational State Transfer (REST) response to avoid the need to define new error response formats for REST APIs for constrained environments. The format is inspired by, but intended to be more concise than, the problem details for HTTP APIs defined in RFC 7807.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9290"/>
          <seriesInfo name="DOI" value="10.17487/RFC9290"/>
        </reference>
        <reference anchor="RFC9430">
          <front>
            <title>Extension of the Datagram Transport Layer Security (DTLS) Profile for Authentication and Authorization for Constrained Environments (ACE) to Transport Layer Security (TLS)</title>
            <author fullname="O. Bergmann" initials="O." surname="Bergmann"/>
            <author fullname="J. Preuß Mattsson" initials="J." surname="Preuß Mattsson"/>
            <author fullname="G. Selander" initials="G." surname="Selander"/>
            <date month="July" year="2023"/>
            <abstract>
              <t>This document updates "Datagram Transport Layer Security (DTLS) Profile for Authentication and Authorization for Constrained Environments (ACE)" (RFC 9202) by specifying that the profile applies to TLS as well as DTLS.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9430"/>
          <seriesInfo name="DOI" value="10.17487/RFC9430"/>
        </reference>
        <reference anchor="RFC9431">
          <front>
            <title>Message Queuing Telemetry Transport (MQTT) and Transport Layer Security (TLS) Profile of Authentication and Authorization for Constrained Environments (ACE) Framework</title>
            <author fullname="C. Sengul" initials="C." surname="Sengul"/>
            <author fullname="A. Kirby" initials="A." surname="Kirby"/>
            <date month="July" year="2023"/>
            <abstract>
              <t>This document specifies a profile for the Authentication and Authorization for Constrained Environments (ACE) framework to enable authorization in a publish-subscribe messaging system based on Message Queuing Telemetry Transport (MQTT). Proof-of-Possession keys, bound to OAuth 2.0 access tokens, are used to authenticate and authorize MQTT Clients. The protocol relies on TLS for confidentiality and MQTT server (Broker) authentication.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9431"/>
          <seriesInfo name="DOI" value="10.17487/RFC9431"/>
        </reference>
        <reference anchor="I-D.ietf-ace-edhoc-oscore-profile">
          <front>
            <title>Ephemeral Diffie-Hellman Over COSE (EDHOC) and Object Security for Constrained Environments (OSCORE) Profile for Authentication and Authorization for Constrained Environments (ACE)</title>
            <author fullname="Göran Selander" initials="G." surname="Selander">
              <organization>Ericsson</organization>
            </author>
            <author fullname="John Preuß Mattsson" initials="J. P." surname="Mattsson">
              <organization>Ericsson</organization>
            </author>
            <author fullname="Marco Tiloca" initials="M." surname="Tiloca">
              <organization>RISE</organization>
            </author>
            <author fullname="Rikard Höglund" initials="R." surname="Höglund">
              <organization>RISE</organization>
            </author>
            <date day="21" month="October" year="2024"/>
            <abstract>
              <t>   This document specifies a profile for the Authentication and
   Authorization for Constrained Environments (ACE) framework.  It
   utilizes Ephemeral Diffie-Hellman Over COSE (EDHOC) for achieving
   mutual authentication between an ACE-OAuth Client and Resource
   Server, and it binds an authentication credential of the Client to an
   ACE-OAuth access token.  EDHOC also establishes an Object Security
   for Constrained RESTful Environments (OSCORE) Security Context, which
   is used to secure communications when accessing protected resources
   according to the authorization information indicated in the access
   token.  This profile can be used to delegate management of
   authorization information from a resource-constrained server to a
   trusted host with less severe limitations regarding processing power
   and memory.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-ace-edhoc-oscore-profile-06"/>
        </reference>
        <reference anchor="I-D.ietf-ace-revoked-token-notification">
          <front>
            <title>Notification of Revoked Access Tokens in the Authentication and Authorization for Constrained Environments (ACE) Framework</title>
            <author fullname="Marco Tiloca" initials="M." surname="Tiloca">
              <organization>RISE AB</organization>
            </author>
            <author fullname="Francesca Palombini" initials="F." surname="Palombini">
              <organization>Ericsson AB</organization>
            </author>
            <author fullname="Sebastian Echeverria" initials="S." surname="Echeverria">
              <organization>CMU SEI</organization>
            </author>
            <author fullname="Grace Lewis" initials="G." surname="Lewis">
              <organization>CMU SEI</organization>
            </author>
            <date day="22" month="September" year="2024"/>
            <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.  As specified
   in this document, the method allows clients and resource servers to
   access a Token Revocation List on the authorization server by using
   the Constrained Application Protocol (CoAP), with the possible
   additional use of resource observation.  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>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-ace-revoked-token-notification-09"/>
        </reference>
        <reference anchor="ACE.OAuth.Error.Code.CBOR.Mappings" target="https://www.iana.org/assignments/ace/ace.xhtml#oauth-error-code-cbor-mappings">
          <front>
            <title>OAuth Error Code CBOR Mappings</title>
            <author>
              <organization>IANA</organization>
            </author>
            <date/>
          </front>
        </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>
        <reference anchor="SHA-256" target="http://csrc.nist.gov/publications/fips/fips180-3/fips180-3_final.pdf">
          <front>
            <title>Secure Hash Standard</title>
            <author>
              <organization>NIST</organization>
            </author>
            <date year="2008" month="October"/>
          </front>
          <seriesInfo name="FIPS 180-3" value=""/>
        </reference>
        <reference anchor="RFC2119">
          <front>
            <title>Key words for use in RFCs to Indicate Requirement Levels</title>
            <author fullname="S. Bradner" initials="S." surname="Bradner"/>
            <date month="March" year="1997"/>
            <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="RFC8174">
          <front>
            <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
            <author fullname="B. Leiba" initials="B." surname="Leiba"/>
            <date month="May" year="2017"/>
            <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>
      </references>
      <references>
        <name>Informative References</name>
        <reference anchor="I-D.ietf-ace-group-oscore-profile">
          <front>
            <title>The Group Object Security for Constrained RESTful Environments (Group OSCORE) Profile of the Authentication and Authorization for Constrained Environments (ACE) Framework</title>
            <author fullname="Marco Tiloca" initials="M." surname="Tiloca">
              <organization>RISE AB</organization>
            </author>
            <author fullname="Rikard Höglund" initials="R." surname="Höglund">
              <organization>RISE AB</organization>
            </author>
            <author fullname="Francesca Palombini" initials="F." surname="Palombini">
              <organization>Ericsson AB</organization>
            </author>
            <date day="8" month="July" year="2024"/>
            <abstract>
              <t>   This document specifies a profile for the Authentication and
   Authorization for Constrained Environments (ACE) framework.  The
   profile uses Group Object Security for Constrained RESTful
   Environments (Group OSCORE) to provide communication security between
   a Client and one or multiple Resource Servers that are members of an
   OSCORE group.  The profile securely binds an OAuth 2.0 Access Token
   to the public key of the Client associated with the private key used
   by that Client in the OSCORE group.  The profile uses Group OSCORE to
   achieve server authentication, as well as proof-of-possession for the
   Client's public key.  Also, it provides proof of the Client's
   membership to the OSCORE group by binding the Access Token to
   information from the Group OSCORE Security Context, thus allowing the
   Resource Server(s) to verify the Client's membership upon receiving a
   message protected with Group OSCORE from the Client.  Effectively,
   the profile enables fine-grained access control paired with secure
   group communication, in accordance with the Zero Trust principles.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-ace-group-oscore-profile-02"/>
        </reference>
      </references>
    </references>
    <section anchor="sec-benefits-for-profiles">
      <name>Benefits for ACE Profiles</name>
      <t>For any profile of ACE, the following holds.</t>
      <ul spacing="normal">
        <li>
          <t>The new ACE workflow defined in <xref target="sec-workflow"/> is effectively possible to use. This is beneficial for deployments where the communication leg between C and the RS is constrained, but the communication leg between the AS and RS is not.</t>
        </li>
        <li>
          <t>When the new ACE workflow is used, the "token_upload" parameter defined in <xref target="sec-token_upload"/> is used:  </t>
          <ul spacing="normal">
            <li>
              <t>To inform the AS about C opting in to use the new ACE workflow.</t>
            </li>
            <li>
              <t>To request the AS that the follow-up successful Access Token Response will have to include certain information, in case the AS has successfully uploaded the access token to the RS.</t>
            </li>
            <li>
              <t>To inform C that the AS has attempted to upload the issued access token to the RS, specifying whether the uploading has succeeded or failed.</t>
            </li>
          </ul>
        </li>
        <li>
          <t>When the new ACE workflow is used, it remains possible for C to always obtain the issued access token from the AS.  </t>
          <t>
That is, by specifying the value 2 for the "token_upload" parameter in the Access Token Request, C will ensure to receive the access token from the AS, even in case the AS successfully uploads the access token to the RS on behalf of C.  </t>
          <t>
This is useful in profiles of ACE where C can re-upload the same access token to the RS by itself, e.g., in order to perform a key update like defined for the OSCORE profile <xref target="RFC9203"/>.</t>
        </li>
      </ul>
      <section anchor="dtls-profile">
        <name>DTLS Profile</name>
        <t>When the RPK mode of the DTLS profile is used (see <xref section="3.2" sectionFormat="of" target="RFC9202"/>), it becomes possible for the AS to effectively issue an access token intended to an audience that includes multiple RSs. This is enabled by the parameters "rs_cnf2" and "audience2" defined in <xref target="sec-rs_cnf2-audience2"/>, as well as by the "anchor_cnf" parameter defined in <xref target="sec-anchor_cnf"/>. This seamlessly applies also if the profile uses Transport Layer Security (TLS) <xref target="RFC8446"/>, as defined in <xref target="RFC9430"/>.</t>
      </section>
      <section anchor="edhoc-and-oscore-profile">
        <name>EDHOC and OSCORE Profile</name>
        <t>When the EDHOC and OSCORE profile is used <xref target="I-D.ietf-ace-edhoc-oscore-profile"/>, it becomes possible for the AS to effectively issue an access token intended to an audience that includes multiple RSs. This is enabled by the parameters "rs_cnf2" and "audience2" defined in <xref target="sec-rs_cnf2-audience2"/>, as well as by the "anchor_cnf" parameter defined in <xref target="sec-anchor_cnf"/>.</t>
      </section>
    </section>
    <section anchor="sec-open-points">
      <name>Open Points</name>
      <section anchor="sec-open-points-workflow">
        <name>New Workflow</name>
        <t>The following discusses open points related to the use of the new ACE workflow defined in <xref target="sec-workflow"/>.</t>
        <section anchor="sec-open-points-workflow-dynamic-access-rights">
          <name>Prevent Ambiguities in the Dynamic Update of Access Rights</name>
          <t>In some profiles of ACE, C can request a new access token to update its access rights, while preserving the same secure association with the RS. The new access token supersedes the current one stored at the RS, as they are both part of the same token series.</t>
          <t>When using the original ACE workflow, C uploads the new access token to the RS by protecting the message exchange through the secure association with the RS. This allows the RS to determine that the upload of such access token is for updating the access rights of C.</t>
          <t>When using the new ACE workflow, the AS uploads the new access token to the RS also when an update of access rights for C is to be performed. This message exchange is protected through the secure association between the AS and the RS.</t>
          <t>In this latter case, even though the access token claim "token_series_id" defined in <xref target="sec-token_series_id"/> provides the RS with an explicit indication for recognizing a stored access token as belonging to an ongoing token series, such a process might still lead to ambiguities.</t>
          <t>For example, the RS might have deleted a stored access token due to memory limitations. This effectively terminates the corresponding token series, which is however impractical for the RS to remember indefinitely. Consequently, if the AS uploads to the RS a new access token belonging to the same token series, the RS would erroneously interpret it to be the first access token of a new series.</t>
          <t>This can be avoided by relying on a new "updated_rights" parameter, which the AS can include in a POST request to the authz-info endpoint when uploading to the RS an access token for dynamically updating the access rights of C (see <xref target="sec-more-parameters"/>).</t>
        </section>
      </section>
      <section anchor="sec-more-parameters">
        <name>Further New Parameters to Consider</name>
        <t>The following discusses possible, further new parameters that can be defined for addressing the open points raised earlier in <xref target="sec-open-points"/>.</t>
        <ul spacing="normal">
          <li>
            <t>"updated_rights" - When using the new ACE workflow and issuing an access token for dynamically updating the access rights of C, the AS specifies this parameter in the request sent to the RS for uploading the access token on behalf of C (see <xref target="sec-open-points-workflow-dynamic-access-rights"/>). This parameter encodes the CBOR simple value <tt>true</tt> (0xf5).</t>
          </li>
        </ul>
      </section>
    </section>
    <section anchor="sec-cddl-model" removeInRFC="true">
      <name>CDDL Model</name>
      <figure anchor="fig-cddl-model">
        <name>CDDL model</name>
        <artwork type="CDDL" align="left"><![CDATA[
; OAuth Parameters CBOR Mappings
token_upload = 48
token_hash = 49
to_rs = 50
from_rs = 51
rs_cnf2 = 52
audience2 = 53
anchor_cnf = 54
token_series_id_param = 55
rev_audience = 56
rev_scope_param = 57

; CBOR Web Token (CWT) Claims
token_series_id_claim = 42
rev_aud = 43
rev_scope_claim = 44

; CWT Confirmation Methods
x5chain = 5

; Custom Problem Detail Keys Registry
ace-error = 2
]]></artwork>
      </figure>
    </section>
    <section anchor="sec-document-updates" removeInRFC="true">
      <name>Document Updates</name>
      <section anchor="sec-02-03">
        <name>Version -02 to -03</name>
        <ul spacing="normal">
          <li>
            <t>Defined parameter and claim "token_series_id".</t>
          </li>
          <li>
            <t>Defined parameters "to_rs" and "from_rs".</t>
          </li>
          <li>
            <t>Defined use of "to_rs" and "from_rs" in the OSCORE profile.</t>
          </li>
          <li>
            <t>Lowercase use of "client", "resource server", and "authorization server".</t>
          </li>
          <li>
            <t>Fixed naming of parameters/claims for audience.</t>
          </li>
          <li>
            <t>Split elision and comments in the examples in CBOR Diagnostic Notation.</t>
          </li>
          <li>
            <t>SHA-256 is mandatory to implement for computing token hashes.</t>
          </li>
          <li>
            <t>Fixes in the IANA considerations.</t>
          </li>
          <li>
            <t>Removed (parts of) appendices that are not needed anymore.</t>
          </li>
          <li>
            <t>Clarifications and editorial improvements.</t>
          </li>
        </ul>
      </section>
      <section anchor="sec-01-02">
        <name>Version -01 to -02</name>
        <ul spacing="normal">
          <li>
            <t>CBOR diagnostic notation uses placeholders from a CDDL model.</t>
          </li>
          <li>
            <t>Note on the new workflow supporting also non-ACE clients.</t>
          </li>
          <li>
            <t>Revised semantics of the "token_upload" parameter.</t>
          </li>
          <li>
            <t>Defined the new "token_hash" parameter.</t>
          </li>
          <li>
            <t>First definition of bidirectional access control through a single access token.</t>
          </li>
          <li>
            <t>Revised and extended considerations and next steps in appendices.</t>
          </li>
          <li>
            <t>Clarifications and editorial improvements.</t>
          </li>
        </ul>
      </section>
      <section anchor="sec-00-01">
        <name>Version -00 to -01</name>
        <ul spacing="normal">
          <li>
            <t>Definition of the "token series" moved to the "Terminology" section.</t>
          </li>
          <li>
            <t>Clarifications and fixes on using parameters in messages.</t>
          </li>
          <li>
            <t>Amended two of the requirements on profiles of the framework.</t>
          </li>
          <li>
            <t>The client has to opt-in for using the alternative workflow.</t>
          </li>
          <li>
            <t>Parameter "token_uploaded" renamed to "token_upload".</t>
          </li>
          <li>
            <t>Updated format of error response payload to use RFC 9290.</t>
          </li>
          <li>
            <t>Security considerations inherited from other documents.</t>
          </li>
          <li>
            <t>Editorial fixes and improvements.</t>
          </li>
        </ul>
      </section>
    </section>
    <section numbered="false" anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>The authors sincerely thank <contact fullname="Christian Amsüss"/>, <contact fullname="Rikard Höglund"/>, and <contact fullname="Dave Robin"/> for their comments and feedback.</t>
      <t>This work was supported by the Sweden's Innovation Agency VINNOVA within the EUREKA CELTIC-NEXT project CYPRESS; and by the H2020 project SIFIS-Home (Grant agreement 952652).</t>
    </section>
  </back>
  <!-- ##markdown-source:
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
wEZ0zXyK6DViqetI2iyktkD4avmZLG2L50H2o+dNcdNkQSkeXKgdzuJvkmRB
Z0vB+iAuVn2XiVLL2UylRPJvvvHGQbTw0zjhQ30Nc5w544x5jm2kaLXRRuMs
oyDjBd9wDGtx31MQaTq3VTctomQnZ10G2aoAgJXcvsfo/WpZHUFg+Uvgcqlq
u5HJiZnzREvsXk11Y7bkUomoLTgxiUkOejS1TJW5EhVin1Mao6KkHmlNVoyQ
5/vZ7XWjpVmGvanstCYq6bsW/Pmugf3Kn7GYp2Ao0h/Pi5D6JwIK/fmF/rLf
IqInJih+R9+hnppLv7XTH3mrpWWwrfb1Cyr6266wq7ZW3lcdNLrlFT5sXzu+
Jee162vw5z8e8M7Oy/uC79wCEGzs2uIPnluDIbj9S98RwH9BNvSL98+trf78
Hh4dwa4eNldV4F8VhVQhf9+v0wKJbiU1hFsC976pNgzuQNVBRvtPpuyKcVem
UNyI6IJ24pCePZNSoPWxF5ZiRU7gorzoOtMrMtY6yjv6UL5fCiSwlmRsjiVv
hxZaZkZFsx4vmydp3lLMXqU1An8sW1JYnrVi9JDxW4AC9sXJdGr7G1U722r7
n1tmBwqNVdm8Yn62nV6uoVbnVBb2j7Un1VKrzfd1bjkuzlOhW2RbKUVlraO4
pSqccJewHi+6Gi+sVW6NG4gRSkLfFUm6uyLJVuoQB5I456fs7TWOF9IsJACR
xQsR5Zyty1qsK7uldpav9XhIgzod72PnoVvFmpzKuesQrF1JRMUlthsVzZYf
JYuSy6uL+FdPTnXa1yfvookik9Gu4rxET41a5VZzszwKFh0X0wvbkVVEX6UD
ys1CrrIJOEmhNQYPOXXYhJ9lq3llFKRShCU4GXbnr2YEMmrhhwlssd50e/eF
V9lhSmsv7q564TXOF+f22/Jo5a4yvS1kkva+sGPXTRS8y9CSkRdaJNRPWnL5
KIlaYR/RRNuzRnoqs16fsjEVqsSLDD1dhjIsk1kcIP0rX3tNO9aZ41kvKnPC
M+rUifFalgctQvemFb8Vq2KL8ijCjXbMLu2aK+iX7fpme7mUBl2vJrK04boA
PKn4oOsX0hLJ6G+tm7zxUcjxZFzvA8+Js3E5+baoOZqSpuKo0Qr0Bs9+2xbu
tosR5/hwFvOY5/23FPRqfNHih1auVHUcO0t7VeZ/4W9OKPqpFx8QkvuZt0UH
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
4WEPZL//H6L8VyuvZwEA

-->

</rfc>
