<?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 1.7.21 (Ruby 3.3.4) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-tiloca-ace-bidi-access-control-00" category="std" consensus="true" submissionType="IETF" updates="9200" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.25.0 -->
  <front>
    <title abbrev="Bidirectional Access Control in ACE">Bidirectional Access Control in the Authentication and Authorization for Constrained Environments (ACE) Framework</title>
    <seriesInfo name="Internet-Draft" value="draft-tiloca-ace-bidi-access-control-00"/>
    <author initials="M." surname="Tiloca" fullname="Marco Tiloca">
      <organization>RISE AB</organization>
      <address>
        <postal>
          <street>Isafjordsgatan 22</street>
          <city>Kista</city>
          <code>164 40</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="2025" month="March" day="03"/>
    <area>Security</area>
    <workgroup>ACE Working Group</workgroup>
    <keyword>Internet-Draft</keyword>
    <abstract>
      <?line 58?>

<t>This document updates the Authentication and Authorization for Constrained Environments (ACE) framework, for which it defines a method to enforce bidirectional access control by means of a single access token. Therefore, this document updates RFC 9200.</t>
    </abstract>
    <note removeInRFC="true">
      <name>Discussion Venues</name>
      <t>Discussion of this document takes place on the
  Authentication and Authorization for Constrained Environments Working Group mailing list (ace@ietf.org),
  which is archived at <eref target="https://mailarchive.ietf.org/arch/browse/ace/"/>.</t>
      <t>Source for this draft and an issue tracker can be found at
  <eref target="https://gitlab.com/crimson84/draft-tiloca-ace-bidi-access-control"/>.</t>
    </note>
  </front>
  <middle>
    <?line 62?>

<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>In some deployments using the ACE framework, two devices DEV1 and DEV2 might wish to access each other's protected resources. That is, DEV1 wishes to act as client and access protected resources hosted at DEV2 acting as resource server. At the same, DEV2 also wishes to act as client and access protected resources hosted at DEV1 acting as resource server.</t>
      <t>In such a case, bidirectional access control 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>The two access tokens have to be separately requested and handled by DEV1 and DEV2, separately uploaded at DEV1 and DEV2, and separately managed by the AS (e.g., for providing token introspection or to enforce early token revocation). While this model results in a clean split between the two directions of access control, it also yields substantial interactions and communication overhead for both DEV1 and DEV2.</t>
      <t>Instead, it can be desirable to achieve the same bidirectional access control without such downsides, by means of a single access token that is requested by and issued to a single device.</t>
      <t>In order to enable that, this document updates <xref target="RFC9200"/> as follows.</t>
      <ul spacing="normal">
        <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>"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.      </t>
              <t>
A corresponding access token claim, namely "rev_aud", is also defined in this document.</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.      </t>
              <t>
A corresponding access token claim, namely "rev_scope", is also defined in this document.</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>
      </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>
        <?line -18?>

<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"/>.</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"/>, 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 term originally defined in <xref target="I-D.ietf-ace-workflow-and-params"/>.</t>
        <ul spacing="normal">
          <li>
            <t>Token series: a set of access tokens, all of which are bound to the same proof-of-possession (PoP) key and are sequentially issued by the same AS for the same pair (client, audience) per the same profile of ACE. 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>
        </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'rev_audience' : "rs1", e'rev_scope_param' : h'00ff'} stands for {56 : "rs1", 57 : h'00ff'}.</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-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-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>This section considers two devices DEV1 and DEV2 that wish to access each other's protected resources, and defines a method that DEV1 and DEV2 can use to enforce bidirectional access control by means of a single access token.</t>
      <t>It is assumed that the access token is requested by and issued to DEV1 acting as ACE client. At the same time, the access token specifies access rights concerning the access of DEV1 (DEV2) to protected resources hosted at DEV2 (DEV1). 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 do 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>
    <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 alternative ACE workflow defined in <xref section="2" sectionFormat="of" target="I-D.ietf-ace-workflow-and-params"/>.</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 anchor="sec-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.</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: "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: "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: "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: "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>
  </middle>
  <back>
    <references anchor="sec-combined-references">
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <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="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="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="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="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="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 anchor="sec-informative-references">
        <name>Informative References</name>
        <reference anchor="I-D.ietf-ace-workflow-and-params">
          <front>
            <title>Short Distribution Chain (SDC) Workflow and New OAuth Parameters for 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="Göran Selander" initials="G." surname="Selander">
              <organization>Ericsson AB</organization>
            </author>
            <date day="3" month="March" year="2025"/>
            <abstract>
              <t>   This document updates the Authentication and Authorization for
   Constrained Environments Framework (ACE, RFC 9200) as follows. (1) It
   defines the Short Distribution Chain (SDC) workflow that the
   authorization server can use for uploading an access token to a
   resource server on behalf of the client. (2) For the OAuth 2.0 token
   endpoint, it defines new parameters and encodings, and extends the
   semantics of the "ace_profile" parameter. (3) It defines how the
   client and the authorization server can coordinate on the exchange of
   the client's and resource server's public authentication credentials,
   when those can be transported by value or identified by reference;
   this extends the semantics of the "rs_cnf" parameter for the OAuth
   2.0 token endpoint, thus updating RFC 9201. (4) It amends two of the
   requirements on profiles of the framework. (5) It deprecates the
   original payload format of error responses conveying an error code,
   when CBOR is used to encode message payloads.  For those responses,
   it defines a new payload format aligned with RFC 9290, thus updating
   in this respect also the profiles defined in RFC 9202, RFC 9203, and
   RFC 9431.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-ace-workflow-and-params-04"/>
        </reference>
      </references>
    </references>
    <?line 404?>

<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
rev_audience = 56
rev_scope_param = 57

; CBOR Web Token (CWT) Claims
rev_aud = 43
rev_scope_claim = 44
]]></artwork>
      </figure>
    </section>
    <section numbered="false" anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>The authors sincerely thank <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.</t>
    </section>
  </back>
  <!-- ##markdown-source:
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

-->

</rfc>
