<?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.6.37 (Ruby 3.0.2) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-identity-chaining-00" category="info" submissionType="IETF" xml:lang="en" version="3">
  <!-- xml2rfc v2v3 conversion 3.17.4 -->
  <front>
    <title>Identity Chaining across Trust Domains</title>
    <seriesInfo name="Internet-Draft" value="draft-identity-chaining-00"/>
    <author initials="A." surname="Schwenkschuster" fullname="Arndt Schwenkschuster">
      <organization>Microsoft</organization>
      <address>
        <email>arndts@microsoft.com</email>
      </address>
    </author>
    <author initials="P." surname="Kasselmann" fullname="Pieter Kasselmann">
      <organization>Microsoft</organization>
      <address>
        <email>pieter.kasselman@microsoft.com</email>
      </address>
    </author>
    <author initials="K." surname="Burgin" fullname="Kelley Burgin">
      <organization/>
      <address>
        <email>kelley.burgin@gmail.com</email>
      </address>
    </author>
    <author initials="M." surname="Jenkins" fullname="Mike Jenkins">
      <organization>NSA-CCSS</organization>
      <address>
        <email>mjjenki@cyber.nsa.gov</email>
      </address>
    </author>
    <date year="2023" month="July" day="10"/>
    <area>sec</area>
    <workgroup>oauth</workgroup>
    <abstract>
      <?line 75?>

<t>This specification defines a mechanism to preserve identity and call chain information across trust domains that use the OAuth 2.0 Framework.</t>
    </abstract>
  </front>
  <middle>
    <?line 79?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>Applications often require access to resources that are distributed across multiple trust domains where each trust domain has its own OAuth 2.0 authorization server. As a result, developers are often faced with the situation that a protected resource is located in a different trust domain and thus protected by a different authorization server. A request may transverse multiple resource servers in multiple trust domains before completing. All protected resources involved in such a request need to know on whose behalf the request was originally initiated (i.e. the user), what authorization was granted and optionally which other resource servers were called prior to making an authorization decision. This information needs to be preserved, even when a request crosses one or more trust domains. Preserving this information is referred to as identity chaining. This document defines a mechanism for preserving identity chaining information across trust domains using a combination of OAuth 2.0 Token Exchange <xref target="RFC8693"/> and Assertion Framework for OAuth 2.0 Client Authentication and Authorization Grants <xref target="RFC7521"/>.</t>
      <section anchor="requirements-language">
        <name>Requirements Language</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?>

</section>
    </section>
    <section anchor="identity-chaining-across-trust-domains">
      <name>Identity Chaining Across Trust Domains</name>
      <t>This specification describes a combination of OAuth 2.0 Token Exchange <xref target="RFC8693"/> and Assertion Framework for OAuth 2.0 Client Authentication and Authorization Grants <xref target="RFC7521"/> to achieve identity chaining across trust domains.</t>
      <t>A client in trust domain A that needs to access a resource server in trust domain B requests an authorization grant from the authorization server for trust domain A via a token exchange. The client in trust domain A presents the received grant as an assertion to the authorization server in domain B in order to obtain an access token for the protected resource in domain B. The client in domain A may be a resource server, or it may be the authorization server itself. A client in trust domain A that needs to access a resource server in trust domain B requests an authorization grant from the authorization server for trust domain A via a token exchange. The client in trust domain A presents the received grant as an assertion to the authorization server in domain B in order to obtain an access token for the protected resource in domain B.  The client in domain A may be a resource server, or it may be the authorization server itself.</t>
      <section anchor="use-case">
        <name>Use Case</name>
        <t>This section describes two use cases addressed in this specification.</t>
        <section anchor="preserve-user-context-across-multi-cloud-multi-hybrid-environments">
          <name>Preserve User Context across Multi-cloud, Multi-Hybrid environments</name>
          <t>A user attempts to access a service that is implemented as a number of on-premise and cloud-based microservices. Both the on-premise and cloud-based services are segmented by multiple trust boundaries that span one or more on-premise or cloud service environments. Every microservice can apply an authorization policy that takes the context of the original user, as well as intermediary microservices into account, irrespective of where the microservices are running and even when a microservice in one trust domain calls another service in another trust domain.</t>
        </section>
        <section anchor="api-security-use-case">
          <name>API Security Use Case</name>
          <t>A home devices company provides a “Camera API” to enable access to home cameras. Partner companies use this Camera API to integrate the camera feeds into their security dashboards. Using OAuth between the partner and the Camera API, a partner can request the feed from a home camera to be displayed in their dashboard. The user has an account with the camera provider. The user may be logged in to view the partner provided dashboard, or they may authorize emergency access to the camera. The home devices company must be able to independently verify that the request originated and was authorized by a user who is authorized to view the feed of the requested home camera.</t>
        </section>
      </section>
      <section anchor="overview">
        <name>Overview</name>
        <t>The Identity Chaining flow outlined below describes how a combination of OAuth 2.0 Token Exchange <xref target="RFC8693"/> and Assertion Framework for OAuth 2.0 Client Authentication and Authorization Grants <xref target="RFC7521"/> are used to address the use cases identified. The appendix include two additional examples that describe how this flow is used. In one example, the resource server acts as the client and in the other, the authorization server acts as the client.</t>
        <figure>
          <name>Identity Chaining Flow</name>
          <artwork><![CDATA[
+-------------+                            +-------------+ +---------+
|Authorization|         +--------+         |Authorization| |Protected|
|Server       |         |Client  |         |Server       | |Resource |
|Domain A     |         |Domain A|         |Domain B     | |Domain B |
+-------------+         +--------+         +-------------+ +---------+
       |                    |                     |             |     
       |                    |----+                |             |     
       |                    |    | (A) discover   |             |     
       |                    |<---+ Authorization  |             |     
       |                    |      Server         |             |     
       |                    |      Domain B       |             |     
       |                    |                     |             |     
       |                    |                     |             |     
       | (B) exchange token |                     |             |     
       |   [RFC 8693]       |                     |             |     
       |<-------------------|                     |             |     
       |                    |                     |             |     
       | (C) <authorization |                     |             |     
       |       grant>       |                     |             |     
       | - - - - - - - - - >|                     |             |     
       |                    |                     |             |     
       |                    | (D) present         |             |     
       |                    | authorization grant |             |     
       |                    | [RFC 7521]          |             |     
       |                    | ------------------->|             |     
       |                    |                     |             |     
       |                    | (E) <access token>  |             |     
       |                    | <- - - - - - - - - -|             |     
       |                    |                     |             |     
       |                    |               (F) access          |     
       |                    | --------------------------------->|     
       |                    |                     |             |     
       |                    |                     |             |                
]]></artwork>
        </figure>
        <t>The flow illustrated in Figure 1 shows the steps the client in trust Domain A needs to perform to access a protected resource in trust domain B. In this flow, the client has a way to discover the authorization server in Domain B and a trust relationship exists between Domain A and Domain B (e.g., through federation). It includes the following:</t>
        <ul spacing="normal">
          <li>(A) The client of Domain A needs to discover the authorization server of Domain B. See <xref target="authorization-server-discovery">Authorization Server Discovery</xref>.</li>
          <li>(B) The client exchanges its token at the authorization server of its own domain (Domain A) for an authorization grant that can be used at the authorization server in Domain B. See <xref target="token-exchange">Token Exchange</xref>.</li>
          <li>(C) The authorization server of Domain A processes the request and returns an authorization grant that the client can use with the authorization server of Domain B. This requires a trust relationship between Domain A and Domain B (e.g., through federation).</li>
          <li>(D) The client presents the authorization grant to the authorization server of Domain B. See <xref target="authorization-grant">Authorization Grant</xref>.</li>
          <li>(E) Authorization server of Domain B validates the authorization grant and returns an access token.</li>
          <li>(F) The client now possesses an access token to access the protected resource in Domain B.</li>
        </ul>
      </section>
      <section anchor="authorization-server-discovery">
        <name>Authorization Server Discovery</name>
        <t>This specification does not define authorization server discovery. A client <bcp14>MAY</bcp14> contact the resource server and leverage the WWW-Authentication response (see section 3 of <xref target="RFC6750"/>), maintain a static mapping or use other means to identify the authorization server.</t>
      </section>
      <section anchor="token-exchange">
        <name>Token Exchange</name>
        <t>The client performs token exchange as defined in <xref target="RFC8693"/> with the authorization server for its own domain (e.g., Domain A) in order to obtain an authorization grant that can be used with the authorization server of a different domain (e.g., Domain B) as specified in section 1.3 of <xref target="RFC6749"/>.</t>
        <section anchor="request">
          <name>Request</name>
          <t>The parameters described in section 2.1 of <xref target="RFC8693"/> apply here with the following restrictions:</t>
          <dl newline="true">
            <dt>requested_token_type</dt>
            <dd>
              <t><bcp14>OPTIONAL</bcp14> according to <xref target="RFC8693"/>. In the context of this specification this parameter <bcp14>SHOULD NOT</bcp14> be used. See <xref target="authorization-grant-type">Authorization grant type</xref>.</t>
            </dd>
            <dt>scope</dt>
            <dd>
              <t><bcp14>OPTIONAL</bcp14>. Additional scopes to indicate scopes included in returned authorization grant. See <xref target="claims-transcription">Claims transcription</xref>.</t>
            </dd>
            <dt>resource</dt>
            <dd>
              <t><bcp14>REQUIRED</bcp14> if audience is not set. URI of authorization server of targeting domain (domain B).</t>
            </dd>
            <dt>audience</dt>
            <dd>
              <t><bcp14>REQUIRED</bcp14> if resource is not set. Well known/logical name of authorization server of targeting domain (domain B).</t>
            </dd>
          </dl>
        </section>
        <section anchor="processing-rules">
          <name>Processing rules</name>
          <ul spacing="normal">
            <li>If the request itself is not valid or if the given resource or audience are unknown, or are unacceptable based on policy, the authorization server <bcp14>MUST</bcp14> deny the request.</li>
            <li>The authorization server <bcp14>MAY</bcp14> add, remove or change claims. See <xref target="claims-transcription">Claims transcription</xref>.</li>
          </ul>
        </section>
        <section anchor="authorization-grant-type">
          <name>Authorization grant type</name>
          <t>The authorization grant format and content is part of a contract between the authorization servers. To achieve a maintainable and flexible systems clients <bcp14>SHOULD NOT</bcp14> request a specific <tt>requested_token_type</tt> during the token exchange and <bcp14>SHOULD NOT</bcp14> require a certain format or parse the authorization grant (e.g., if the token is encoded as a JWT). The <tt>issued_token_type</tt> parameter in the response indicates the type and <bcp14>SHOULD</bcp14> be passed into the assertion request. This allows flexibility for authorization servers to change format and content.</t>
          <t>Authorization servers <bcp14>MAY</bcp14> use an existing grant type such us <tt>urn:ietf:params:oauth:grant-type:jwt-bearer</tt> to indicate a JWT or <tt>urn:ietf:params:oauth:grant-type:saml2-bearer</tt> to indicate SAML. Other grant types <bcp14>MAY</bcp14> be used to indicate other formats.</t>
        </section>
        <section anchor="response">
          <name>Response</name>
          <t>All of section 2.2 of <xref target="RFC8693"/> applies. In addition, the following applies to implementations that conform to this specification.</t>
          <ul spacing="normal">
            <li>The "aud" claim in the returned authorization grant <bcp14>MUST</bcp14> identify the requested authorization server. This corresponds with <eref target="https://datatracker.ietf.org/doc/html/rfc7523#section-3">RFC 7523 Section 3, Point 3</eref> and is there to reduce missuse and to prevent clients from presenting access tokens as an authorization grant to an authorization server in a different domain.</li>
            <li>The "aud" claim included in the returned authorization grant <bcp14>MAY</bcp14> identify multiple authorization servers, provided that trust relationships exist with them (e.g. through federation). It is <bcp14>RECOMMENDED</bcp14> that the "aud" claim is restricted to a single authorization server to prevent an authorization server in one domain from presenting the client's authorization grant to an authorization server in a different trust domain. For example, this will prevent the authorization server in Domain B from presenting the authorization grant it received from the client in Domain A to the authorization server for Domain C.</li>
          </ul>
        </section>
        <section anchor="example">
          <name>Example</name>
          <t>The example belows shows the message invoked by the client in trust domain A to perform token exchange with the authorization server in domain A (https://a.org/auth) to receive an authorization grant for the authorization server in trust domain B (https://b.org/auth).</t>
          <artwork><![CDATA[
curl --location 'https://a.org/auth/token' \
--form 'grant_type="urn:ietf:params:oauth:grant-type:token-exchange"' \
--form 'subject_token="ey.."' \
--form 'subject_token_type="urn:ietf:params:oauth:token-type:access_token"' \
--form 'resource="https://b.org/auth"'
]]></artwork>
        </section>
      </section>
      <section anchor="authorization-grant">
        <name>Authorization Grant</name>
        <t>The client presents the authorization grant it received from the authorization server in its own domain and presents it to the authorization server in the domain of the resources server it wants to access as defined in the "Assertion Framework for OAuth 2.0 Client Authentication and Authorization Grants" <xref target="RFC7521"/>.</t>
        <section anchor="request-1">
          <name>Request</name>
          <t>If the authorization grant is in the form of a JWT bearer token, the client <bcp14>SHOULD</bcp14> use the "JSON Web Token (JWT) Profile for OAuth 2.0 Client Authentication and Authorization Grants" as defined in <xref target="RFC7521"/>. Otherwise, the client <bcp14>SHOULD</bcp14> request an access token using the "Assertion Framework for OAuth 2.0 Client Authentication and Authorization Grants" as defined in <xref target="RFC7521"/> (Section 4.1). For the purpose of this specification the following descriptions apply:</t>
          <dl newline="true">
            <dt>grant_type</dt>
            <dd>
              <t><bcp14>REQUIRED</bcp14>. In context of this specification clients <bcp14>SHOULD</bcp14> use the type identifier returned by the token exchange (<tt>issued_token_type</tt> response). See <xref target="authorization-grant-type">authorization grant type</xref> for more details.</t>
            </dd>
            <dt>assertion</dt>
            <dd>
              <t><bcp14>REQUIRED</bcp14>. Authorization grant returned by the token exchange (<tt>access_token</tt> response).</t>
            </dd>
            <dt>scope</dt>
            <dd>
              <t><bcp14>OPTIONAL</bcp14>.</t>
            </dd>
          </dl>
          <t>The client <bcp14>MAY</bcp14> indicate the audience it is trying to access through the <tt>scope</tt> parameter or the <tt>resource</tt> parameter defined in <xref target="RFC8707"/>.</t>
        </section>
        <section anchor="processing-rules-1">
          <name>Processing rules</name>
          <t>All of <xref target="RFC7521"/> (Section 5.2 in specific) applies, along with the following processing rules:</t>
          <ul spacing="normal">
            <li>The request <bcp14>MUST</bcp14> be denied if the presented authorization grant does not include an "aud" claim identifying the authorization server that processes the request.</li>
            <li>The authorization server <bcp14>SHOULD</bcp14> deny the request if it is not able to identify the subject.</li>
            <li>Due to policy the request <bcp14>MAY</bcp14> be denied (for instance if the federation from domain A is not allowed).</li>
          </ul>
        </section>
        <section anchor="response-1">
          <name>Response</name>
          <t>The authorization server responds with an access token as described in section 5.1 of <xref target="RFC6749"/>.</t>
        </section>
        <section anchor="example-1">
          <name>Example</name>
          <t>The example belows shows how the client in trust domain A presents an authorization grant to the authorization server in trust domain B (https://b.org/auth) to receive an access token for a protected resource in trust domain B.</t>
          <artwork><![CDATA[
curl --location --request GET 'https://b.org/auth/token' \
--form 'grant_type="urn:ietf:params:oauth:grant-type:jwt-bearer"' \
--form 'assertion="ey..."'
]]></artwork>
        </section>
      </section>
      <section anchor="claims-transcription">
        <name>Claims transcription</name>
        <t>Authorization servers <bcp14>MAY</bcp14> transcribe claims when either producing authorization grants in the token exchange flow or access tokens in the assertion flow.</t>
        <ul spacing="normal">
          <li>
            <strong>Transcribing the subject identifier</strong>: Subject identifier can differ between the parties involved. For instance: A user is known at domain A by "johndoe@a.org" but in domain B by "doe.john@b.org". The mapping from one identifier to the other <bcp14>MAY</bcp14> either happen in the token exchange step and the updated identifer is reflected in returned authorization grant or in the assertion step where the updated identifier would be reflected in the access token. To support this both authorization servers <bcp14>MAY</bcp14> add, change or remove claims as described above.</li>
          <li>
            <strong>Selective disclosure</strong>: Authorization servers <bcp14>MAY</bcp14> remove or hide certain due to privacy requirements or reduced trust towards the targeting trust domain. To hide and enclose claims <xref target="SD-JWT"/> <bcp14>MAY</bcp14> be used.</li>
          <li>
            <strong>Controlling scope</strong>: Clients <bcp14>MAY</bcp14> use the scope parameter to control transcribed claims (e.g. downscoping). Authorization Servers <bcp14>SHOULD</bcp14> verify that requested scopes are not higher priveleged than the scopes of presented subject_token.</li>
          <li>
            <strong>Including authorization grant claims</strong>: The authorization server performing the assertion flow <bcp14>MAY</bcp14> leverage claims from the presented authorization grant and include them in the returned access token. The populated claims <bcp14>SHOULD</bcp14> be namespaced or validated to prevent the injection of invalid claims.</li>
        </ul>
        <t>The representation of transcribed claims and their format is not defined in this specification.</t>
      </section>
    </section>
    <section anchor="IANA">
      <name>IANA Considerations</name>
      <t>To be added.</t>
    </section>
    <section anchor="Security">
      <name>Security Considerations</name>
      <section anchor="client-authentication">
        <name>Client Authentication</name>
        <t>Authorization Servers <bcp14>SHOULD</bcp14> follow the OAuth 2.0 Security Best Current Practice <xref target="OAUTH2-BCP"/> for client authentication.</t>
      </section>
    </section>
  </middle>
  <back>
    <references>
      <name>References</name>
      <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="RFC6750">
          <front>
            <title>The OAuth 2.0 Authorization Framework: Bearer Token Usage</title>
            <author fullname="M. Jones" initials="M." surname="Jones"/>
            <author fullname="D. Hardt" initials="D." surname="Hardt"/>
            <date month="October" year="2012"/>
            <abstract>
              <t>This specification describes how to use bearer tokens in HTTP requests to access OAuth 2.0 protected resources. Any party in possession of a bearer token (a "bearer") can use it to get access to the associated resources (without demonstrating possession of a cryptographic key). To prevent misuse, bearer tokens need to be protected from disclosure in storage and in transport. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6750"/>
          <seriesInfo name="DOI" value="10.17487/RFC6750"/>
        </reference>
        <reference anchor="RFC8693">
          <front>
            <title>OAuth 2.0 Token Exchange</title>
            <author fullname="M. Jones" initials="M." surname="Jones"/>
            <author fullname="A. Nadalin" initials="A." surname="Nadalin"/>
            <author fullname="B. Campbell" initials="B." role="editor" surname="Campbell"/>
            <author fullname="J. Bradley" initials="J." surname="Bradley"/>
            <author fullname="C. Mortimore" initials="C." surname="Mortimore"/>
            <date month="January" year="2020"/>
            <abstract>
              <t>This specification defines a protocol for an HTTP- and JSON-based Security Token Service (STS) by defining how to request and obtain security tokens from OAuth 2.0 authorization servers, including security tokens employing impersonation and delegation.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8693"/>
          <seriesInfo name="DOI" value="10.17487/RFC8693"/>
        </reference>
        <reference anchor="RFC7521">
          <front>
            <title>Assertion Framework for OAuth 2.0 Client Authentication and Authorization Grants</title>
            <author fullname="B. Campbell" initials="B." surname="Campbell"/>
            <author fullname="C. Mortimore" initials="C." surname="Mortimore"/>
            <author fullname="M. Jones" initials="M." surname="Jones"/>
            <author fullname="Y. Goland" initials="Y." surname="Goland"/>
            <date month="May" year="2015"/>
            <abstract>
              <t>This specification provides a framework for the use of assertions with OAuth 2.0 in the form of a new client authentication mechanism and a new authorization grant type. Mechanisms are specified for transporting assertions during interactions with a token endpoint; general processing rules are also specified.</t>
              <t>The intent of this specification is to provide a common framework for OAuth 2.0 to interwork with other identity systems using assertions and to provide alternative client authentication mechanisms.</t>
              <t>Note that this specification only defines abstract message flows and processing rules. In order to be implementable, companion specifications are necessary to provide the corresponding concrete instantiations.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7521"/>
          <seriesInfo name="DOI" value="10.17487/RFC7521"/>
        </reference>
        <reference anchor="RFC7523">
          <front>
            <title>JSON Web Token (JWT) Profile for OAuth 2.0 Client Authentication and Authorization Grants</title>
            <author fullname="M. Jones" initials="M." surname="Jones"/>
            <author fullname="B. Campbell" initials="B." surname="Campbell"/>
            <author fullname="C. Mortimore" initials="C." surname="Mortimore"/>
            <date month="May" year="2015"/>
            <abstract>
              <t>This specification defines the use of a JSON Web Token (JWT) Bearer Token as a means for requesting an OAuth 2.0 access token as well as for client authentication.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7523"/>
          <seriesInfo name="DOI" value="10.17487/RFC7523"/>
        </reference>
        <reference anchor="RFC8707">
          <front>
            <title>Resource Indicators for OAuth 2.0</title>
            <author fullname="B. Campbell" initials="B." surname="Campbell"/>
            <author fullname="J. Bradley" initials="J." surname="Bradley"/>
            <author fullname="H. Tschofenig" initials="H." surname="Tschofenig"/>
            <date month="February" year="2020"/>
            <abstract>
              <t>This document specifies an extension to the OAuth 2.0 Authorization Framework defining request parameters that enable a client to explicitly signal to an authorization server about the identity of the protected resource(s) to which it is requesting access.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8707"/>
          <seriesInfo name="DOI" value="10.17487/RFC8707"/>
        </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="SD-JWT" target="https://datatracker.ietf.org/doc/html/draft-ietf-oauth-selective-disclosure-jwt-04">
          <front>
            <title>Selective Disclosure for JWTs (SD-JWT)</title>
            <author initials="D." surname="Fett" fullname="Daniel Fett">
              <organization>yes.com</organization>
            </author>
            <author initials="K." surname="Yasuda" fullname="Kristina Yasuda">
              <organization>Microsoft</organization>
            </author>
            <author initials="B." surname="Campbell" fullname="Brian Campbell">
              <organization>Ping Identity</organization>
            </author>
            <date>n.d.</date>
          </front>
        </reference>
        <reference anchor="OAUTH2-BCP" target="https://datatracker.ietf.org/doc/html/draft-ietf-oauth-security-topics">
          <front>
            <title>OAuth 2.0 Security Best Current Practice</title>
            <author initials="T." surname="Lodderstedt" fullname="T. Lodderstedt">
              <organization>yes.com</organization>
            </author>
            <author initials="J." surname="Bradley" fullname="J. Bradley">
              <organization>Yubico</organization>
            </author>
            <author initials="A." surname="Labunets" fullname="A. Labunets">
              <organization>Independent Researcher</organization>
            </author>
            <author initials="D." surname="Fett" fullname="D. Fett">
              <organization>Authlete</organization>
            </author>
            <date>n.d.</date>
          </front>
        </reference>
      </references>
    </references>
    <?line 292?>

<section anchor="examples">
      <name>Examples</name>
      <t>This section contains two examples, demonstrating how this specification may be used in different environments with specific requirements. The first example shows the resource server acting as the client and the second example shows the authorization server acting as the client.</t>
      <section anchor="resource-server-acting-as-client">
        <name>Resource server acting as client</name>
        <t>Resources servers may act as clients if the following is true:</t>
        <ul spacing="normal">
          <li>Authorization Server B is reachable by the resource server by network and is able to perform the appropiate client authentication (if required).</li>
          <li>The resource server has the ability to determine the authorization server of the protected resource outside its trust domain.</li>
        </ul>
        <t>The flow would look like this:</t>
        <figure>
          <name>Resource server acting as client</name>
          <artwork><![CDATA[
+-------------+          +--------+         +-------------+ +---------+
|Authorization|          |Resource|         |Authorization| |Protected|
|Server       |          |Server  |         |Server       | |Resource |
|Domain A     |          |Domain A|         |Domain B     | |Domain B |
+-------------+          +--------+         +-------------+ +---------+
       |                     |                     |             |     
       |                     |   (A) access (unauthenticated)    |     
       |                     | --------------------------------->|     
       |                     |                     |             |     
       |                     |   (B) <WWW-Authenticate header>   |     
       |                     | <- - - - - - - - - - - - - - - - -|     
       |                     |                     |             |     
       | (C) exchange token  |                     |             |     
       |   [RFC 8693]        |                     |             |     
       |<--------------------|                     |             |     
       |                     |                     |             |     
       | (D) <authorization  |                     |             |     
       |        grant>       |                     |             |     
       | - - - - - - - - - ->|                     |             |     
       |                     |                     |             |     
       |                     | (E) present         |             |     
       |                     |  authorization      |             |     
       |                     |  grant [RFC 7521]   |             |     
       |                     | ------------------->|             |     
       |                     |                     |             |     
       |                     | (F) <access token>  |             |     
       |                     | <- - - - - - - - - -|             |     
       |                     |                     |             |     
       |                     |               (G) access          |     
       |                     | --------------------------------->|     
       |                     |                     |             |     
       |                     |                     |             |     
]]></artwork>
        </figure>
        <t>The flow contains the following steps:</t>
        <t>(A) The resource server of domain A needs to access protected resource in Domain B. It requires an access token to do so which it does not possess. To receive information about the authorization server which protecs the resource in domain B it calls the resource unauthenticated.</t>
        <t>(B) The protected resource returns the WWW-Authenticate header to indicate its authorization server.</t>
        <t>(C) Now, after the resource server has identified the authorization server for Domain B, the resource server requests an authorization grant for the authorization server in Domain B from its own authorization server (Domain A). This happens via the token exchange protocol.</t>
        <t>(D) If successful, the authorization server returns an authorization grant to the resource server.</t>
        <t>(E) The resource server presents the authorization grant to the authorization server of Domain B.</t>
        <t>(F) The authorization server of Domain B uses claims from the authorization grant to identify the user and its access. If access is granted an access token is returned.</t>
        <t>(G) The resource server uses the access token to access the protected resource at Domain B.</t>
      </section>
      <section anchor="authorization-server-acting-as-client">
        <name>Authorization server acting as client</name>
        <t>Authorization servers may act as clients too. This can be necessary because of following reasons:</t>
        <ul spacing="normal">
          <li>Resource servers may not have knowledge of authorization servers.</li>
          <li>Resource servers may not have network access to other authorization servers.</li>
          <li>A strict access control on resources outside the trust domain is required and enforced by authorization servers.</li>
          <li>Authorization servers require client authentication. Managing clients for resource servers outside of the trust domain is not intended.</li>
        </ul>
        <t>The flow when authorization servers act as client would look like this:</t>
        <figure>
          <name>Authorization server acting as client</name>
          <artwork><![CDATA[
+--------+          +-------------+         +-------------+ +---------+
|Resource|          |Authorization|         |Authorization| |Protected|
|Server  |          |Server       |         |Server       | |Resource |
|Domain A|          |Domain A     |         |Domain B     | |Domain B |
+--------+          +-------------+         +-------------+ +---------+
    |                      |                       |             |     
    | (A) request token for|                       |             |     
    | protected resource   |                       |             |     
    | in domain B.         |                       |             |     
    | -------------------->|                       |             |     
    |                      |                       |             |     
    |                      |----+                  |             |     
    |                      |    | (B) determine    |             |     
    |                      |<---+ authorization    |             |     
    |                      |      server B         |             |     
    |                      |                       |             |     
    |                      |                       |             |     
    |                      |----+                  |             |     
    |                      |    | (C) issue        |             |     
    |                      |<---+ authorization    |             |     
    |                      |      grant ("internal |             |     
    |                      |      token exchange") |             |     
    |                      |                       |             |     
    |                      |                       |             |     
    |                      | (D) present           |             |     
    |                      |   authorization grant |             |     
    |                      |   [RFC 7521]          |             |     
    |                      | --------------------->|             |     
    |                      |                       |             |     
    |                      | (E) <access token>    |             |     
    |                      | <- - - - - - - - - - -|             |     
    |                      |                       |             |     
    |  (F) <access token>  |                       |             |     
    | <- - - - - - - - - - |                       |             |     
    |                      |                       |             |     
    |                      |           (G) access  |             |     
    | ---------------------------------------------------------->|     
    |                      |                       |             |     
    |                      |                       |             |     
]]></artwork>
        </figure>
        <t>The flow contains the following steps:</t>
        <t>(A) The resource server of Domain A requests a token for the protected resource in Domain B from the authorization server in Domain A. This specification does not cover this step. A profile of Token Exchange <xref target="RFC8693"/> may be used.</t>
        <t>(B) The authorization server (of Domain A) determines the authorization server (of Domain B). This could have been passed by the client, is statically maintained or dynamically resolved.</t>
        <t>(C) Once the authorization server is determined an authorization grant is issued internally. This reflects to <xref target="token-exchange">Token exchange</xref> of this specification and can be seen as an "internal token exchange".</t>
        <t>(D) The issued authorization grant is presented to the authorization server of Domain B. This presentation happens between the authorization servers and authorization server A may be required to perform client authentication while doing so.</t>
        <t>(E) The authorization server of Domain B returns an access token for access to the protected resource in Domain B to the authorization server in Domain A.</t>
        <t>(F) The authorization server of Domain A returns that access token to the resource server in Domain A.</t>
        <t>(G) The resource server in Domain A uses the received access token to access the protected resource in Domain B.</t>
      </section>
    </section>
    <section numbered="false" anchor="Acknowledgements">
      <name>Acknowledgements</name>
      <t><contact fullname="Joe Jubinski"/>, <contact fullname="Justin Richer"/></t>
    </section>
    <section anchor="contributors" numbered="false" toc="include" removeInRFC="false">
      <name>Contributors</name>
      <contact initials="A." surname="Tulshibagwale" fullname="Atul Tulshibagwale">
        <organization>SGNL</organization>
        <address>
          <email>atuls@sgnl.ai</email>
        </address>
      </contact>
      <contact initials="G." surname="Fletcher" fullname="George Fletcher">
        <organization>Capital One</organization>
        <address>
          <email>george.fletcher@capitalone.com</email>
        </address>
      </contact>
      <contact initials="R." surname="Shekh-Yusef" fullname="Rifaat Shekh-Yusef">
        <organization>EY</organization>
        <address>
          <email>rifaat.shekh-yusef@ca.ey.com</email>
        </address>
      </contact>
      <contact initials="H." surname="Tschofenig" fullname="Hannes Tschofenig">
        <organization/>
        <address>
          <email>hannes.tschofenig@gmx.net</email>
        </address>
      </contact>
    </section>
  </back>
  <!-- ##markdown-source:
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
i4uLXYFtBd6aFW8i/M/FQGPvfwFMA0wPpG0AAA==

-->

</rfc>
