<?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.17 (Ruby 3.3.3) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-oauth-identity-chaining-02" category="info" submissionType="IETF" xml:lang="en" version="3">
  <!-- xml2rfc v2v3 conversion 3.22.0 -->
  <front>
    <title>OAuth Identity and Authorization Chaining Across Domains</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-oauth-identity-chaining-02"/>
    <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>MITRE</organization>
      <address>
        <email>kburgin@mitre.org</email>
      </address>
    </author>
    <author initials="M." surname="Jenkins" fullname="Mike Jenkins">
      <organization>NSA-CCSS</organization>
      <address>
        <email>mjjenki@cyber.nsa.gov</email>
      </address>
    </author>
    <author initials="B." surname="Campbell" fullname="Brian Campbell">
      <organization>Ping Identity</organization>
      <address>
        <email>bcampbell@pingidentity.com</email>
      </address>
    </author>
    <date year="2024" month="July" day="08"/>
    <area>sec</area>
    <workgroup>oauth</workgroup>
    <abstract>
      <?line 59?>

<t>This specification defines a mechanism to preserve identity information and federate authorization across trust domains that use the OAuth 2.0 Framework.</t>
    </abstract>
    <note removeInRFC="true">
      <name>Discussion Venues</name>
      <t>Discussion of this document takes place on the
    Web Authorization Protocol Working Group mailing list (oauth@ietf.org),
    which is archived at <eref target="https://mailarchive.ietf.org/arch/browse/oauth/"/>.</t>
      <t>Source for this draft and an issue tracker can be found at
    <eref target="https://github.com/oauth-wg/oauth-identity-chaining"/>.</t>
    </note>
  </front>
  <middle>
    <?line 63?>

<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. This document refers to this as "chaining" and defines a mechanism for preserving identity and authorization information across domains using a combination of OAuth 2.0 Token Exchange <xref target="RFC8693"/> and JSON Web Token (JWT) Profile for OAuth 2.0 Client Authentication and Authorization Grants <xref target="RFC7523"/>.</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-and-authorization-chaining-across-domains">
      <name>Identity and Authorization Chaining Across Domains</name>
      <t>This specification describes a combination of OAuth 2.0 Token Exchange <xref target="RFC8693"/> and JWT Profile for OAuth 2.0 Client Authentication and Authorization Grants <xref target="RFC7523"/> to achieve identity and authorization chaining across domains.</t>
      <t>A client in trust domain A that needs to access a resource server in trust domain B requests a JWT 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="overview">
        <name>Overview</name>
        <t>The identity and authorization chaining flow outlined below describes how a combination of OAuth 2.0 Token Exchange <xref target="RFC8693"/> and JWT Profile for OAuth 2.0 Client Authentication and Authorization Grants <xref target="RFC7523"/> 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 and Authorization 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 JWT>   |                     |             |
       | - - - - - - - - - >|                     |             |
       |                    |                     |             |
       |                    | (D) present         |             |
       |                    | authorization grant |             |
       |                    | [RFC 7523]          |             |
       |                    | ------------------->|             |
       |                    |                     |             |
       |                    | (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>
            <t>(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>.</t>
          </li>
          <li>
            <t>(B) The client exchanges its token at the authorization server of its own domain (Domain A) for a JWT authorization grant that can be used at the authorization server in Domain B. See <xref target="token-exchange">Token Exchange</xref>.</t>
          </li>
          <li>
            <t>(C) The authorization server of Domain A processes the request and returns a JWT 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).</t>
          </li>
          <li>
            <t>(D) The client presents the authorization grant to the authorization server of Domain B. See <xref target="access-token-request">Access Token Request</xref>.</t>
          </li>
          <li>
            <t>(E) Authorization server of Domain B validates the JWT authorization grant and returns an access token.</t>
          </li>
          <li>
            <t>(F) The client now possesses an access token to access the protected resource in Domain B.</t>
          </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> maintain a static mapping or use other means to identify the authorization server. The <tt>authorization_servers</tt> property in <xref target="I-D.ietf-oauth-resource-metadata"/> <bcp14>MAY</bcp14> be used.</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 a JWT 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="token-exchange-request">
          <name>Token Exchange 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>scope</dt>
            <dd>
              <t><bcp14>OPTIONAL</bcp14>. Additional scopes to indicate scopes included in the returned JWT 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>
              <t>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.</t>
            </li>
            <li>
              <t>The authorization server <bcp14>MAY</bcp14> add, remove or change claims. See <xref target="claims-transcription">Claims transcription</xref>.</t>
            </li>
          </ul>
        </section>
        <section anchor="token-exchange-response">
          <name>Token Exchange 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>
              <t>The "aud" claim in the returned JWT 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 misuse and to prevent clients from presenting access tokens as an authorization grant to an authorization server in a different domain.</t>
            </li>
            <li>
              <t>The "aud" claim included in the returned JWT 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.</t>
            </li>
          </ul>
        </section>
        <section anchor="example">
          <name>Example</name>
          <t>The example below shows the message invoked by the client in trust domain A to perform token exchange with the authorization server in domain A (https://as.a.org/auth) to receive a JWT authorization grant for the authorization server in trust domain B (https://as.b.org/auth).</t>
          <figure>
            <name>Token exchange request</name>
            <artwork><![CDATA[
POST /auth/token HTTP/1.1
Host: as.a.org
Content-Type: application/x-www-form-urlencoded

grant_type=urn%3Aietf%3Aparams%3Aoauth%3Agrant-type%3Atoken-exchange
&resource=https%3A%2F%2Fas.b.org%2Fauth
&subject_token=ey...
&subject_token_type=urn%3Aietf%3Aparams%3Aoauth%3Atoken-type%3Aaccess_token
]]></artwork>
          </figure>
          <figure>
            <name>Token exchange response</name>
            <artwork><![CDATA[
HTTP/1.1 200 OK
Content-Type: application/json
Cache-Control: no-cache, no-store

{
  "access_token":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJo
  dHRwczovL2FzLmEub3JnL2F1dGgiLCJleHAiOjE2OTUyODQwOTIsImlhdCI6MTY5N
  TI4NzY5Miwic3ViIjoiam9obl9kb2VAYS5vcmciLCJhdWQiOiJodHRwczovL2FzLm
  Iub3JnL2F1dGgifQ.304Pv9e6PnzcQPzz14z-k2ZyZvDtP5WIRkYPScwdHW4",
  "token_type":"N_A",
  "issued_token_type":"urn:ietf:params:oauth:token-type:jwt",
  "expires_in":60
}
]]></artwork>
          </figure>
        </section>
      </section>
      <section anchor="jwt-authorization-grant">
        <name>JWT Authorization Grant</name>
        <t>The client presents the JWT authorization grant it received from the authorization server in its own domain as an authorization grant to the authorization server in the domain of the resource server it wants to access as defined in <xref target="RFC7523"/>.</t>
        <section anchor="access-token-request">
          <name>Access Token Request</name>
          <t>The authorization grant is a JWT bearer token, which the client uses to request an access token as described in the JWT Profile for OAuth 2.0 Client Authentication and Authorization Grants <xref target="RFC7523"/>. For the purpose of this specification the following descriptions apply:</t>
          <dl newline="true">
            <dt>grant_type</dt>
            <dd>
              <t><bcp14>REQUIRED</bcp14>. As defined in Section 2.1 of <xref target="RFC7523"/> the value <tt>urn:ietf:params:oauth:grant-type:jwt-bearer</tt> indicates the request is a JWT bearer assertion authorization grant.</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>The authorization server <bcp14>MUST</bcp14> validate the JWT authorization grant as specified in Sections 3 and 3.1 of <xref target="RFC7523"/>. The following processing rules also apply:</t>
          <ul spacing="normal">
            <li>
              <t>The "aud" claim <bcp14>MUST</bcp14> identify the Authorization Server as a valid intended audience of the assertion using either the token endpoint as described Section 3 <xref target="RFC7523"/> or the issuer identifier as defined in Section 2 of <xref target="RFC8414"/>.</t>
            </li>
            <li>
              <t>The authorization server <bcp14>SHOULD</bcp14> deny the request if it is not able to identify the subject.</t>
            </li>
            <li>
              <t>Due to policy the request <bcp14>MAY</bcp14> be denied (for instance if the federation from domain A is not allowed).</t>
            </li>
          </ul>
        </section>
        <section anchor="access-token-response">
          <name>Access Token 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://as.b.org/auth) to receive an access token for a protected resource in trust domain B.</t>
          <figure>
            <name>Assertion request</name>
            <artwork><![CDATA[
POST /auth/token HTTP/1.1
Host: as.b.org
Content-Type: application/x-www-form-urlencoded

grant_type=urn%3Aietf%3Aparams%3Aoauth%3Agrant-type%3Ajwt-bearer
&assertion=ey...
]]></artwork>
          </figure>
          <figure>
            <name>Assertion response</name>
            <artwork><![CDATA[
HTTP/1.1 200 OK
Content-Type: application/json
Cache-Control: no-cache, no-store

{
  "access_token":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJo
  dHRwczovL2FzLmIub3JnL2F1dGgiLCJleHAiOjE2OTUyODQwOTIsImlhdCI6MTY5N
  TI4NzY5Miwic3ViIjoiam9obi5kb2UuMTIzIiwiYXVkIjoiaHR0cHM6Ly9iLm9yZy
  9hcGkifQ.CJBuv6sr6Snj9in5T8f7g1uB61Ql8btJiR0IXv5oeJg",
  "token_type":"Bearer",
  "expires_in":60
}
]]></artwork>
          </figure>
        </section>
      </section>
      <section anchor="claims-transcription">
        <name>Claims transcription</name>
        <t>Authorization servers <bcp14>MAY</bcp14> transcribe claims when either producing JWT authorization grants in the token exchange flow or access tokens in the assertion flow.</t>
        <ul spacing="normal">
          <li>
            <t><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 identifier is reflected in returned JWT 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.</t>
          </li>
          <li>
            <t><strong>Selective disclosure</strong>: Authorization servers <bcp14>MAY</bcp14> remove or hide certain claims due to privacy requirements or reduced trust towards the targeting trust domain. To hide and enclose claims <xref target="I-D.ietf-oauth-selective-disclosure-jwt"/> <bcp14>MAY</bcp14> be used.</t>
          </li>
          <li>
            <t><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 privileged than the scopes of presented subject_token.</t>
          </li>
          <li>
            <t><strong>Including JWT authorization grant claims</strong>: The authorization server performing the assertion flow <bcp14>MAY</bcp14> leverage claims from the presented JWT 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.</t>
          </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="I-D.ietf-oauth-security-topics"/> for client authentication.</t>
      </section>
    </section>
  </middle>
  <back>
    <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="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="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="RFC8414">
          <front>
            <title>OAuth 2.0 Authorization Server Metadata</title>
            <author fullname="M. Jones" initials="M." surname="Jones"/>
            <author fullname="N. Sakimura" initials="N." surname="Sakimura"/>
            <author fullname="J. Bradley" initials="J." surname="Bradley"/>
            <date month="June" year="2018"/>
            <abstract>
              <t>This specification defines a metadata format that an OAuth 2.0 client can use to obtain the information needed to interact with an OAuth 2.0 authorization server, including its endpoint locations and authorization server capabilities.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8414"/>
          <seriesInfo name="DOI" value="10.17487/RFC8414"/>
        </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-oauth-selective-disclosure-jwt">
          <front>
            <title>Selective Disclosure for JWTs (SD-JWT)</title>
            <author fullname="Daniel Fett" initials="D." surname="Fett">
              <organization>Authlete</organization>
            </author>
            <author fullname="Kristina Yasuda" initials="K." surname="Yasuda">
              <organization>Keio University</organization>
            </author>
            <author fullname="Brian Campbell" initials="B." surname="Campbell">
              <organization>Ping Identity</organization>
            </author>
            <date day="8" month="July" year="2024"/>
            <abstract>
              <t>   This specification defines a mechanism for selective disclosure of
   individual elements of a JSON object used as the payload of a JSON
   Web Signature (JWS) structure.  It encompasses various applications,
   including but not limited to the selective disclosure of JSON Web
   Token (JWT) claims.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-oauth-selective-disclosure-jwt-10"/>
        </reference>
        <reference anchor="I-D.ietf-oauth-security-topics">
          <front>
            <title>OAuth 2.0 Security Best Current Practice</title>
            <author fullname="Torsten Lodderstedt" initials="T." surname="Lodderstedt">
              <organization>SPRIND</organization>
            </author>
            <author fullname="John Bradley" initials="J." surname="Bradley">
              <organization>Yubico</organization>
            </author>
            <author fullname="Andrey Labunets" initials="A." surname="Labunets">
              <organization>Independent Researcher</organization>
            </author>
            <author fullname="Daniel Fett" initials="D." surname="Fett">
              <organization>Authlete</organization>
            </author>
            <date day="3" month="June" year="2024"/>
            <abstract>
              <t>   This document describes best current security practice for OAuth 2.0.
   It updates and extends the threat model and security advice given in
   RFC 6749, RFC 6750, and RFC 6819 to incorporate practical experiences
   gathered since OAuth 2.0 was published and covers new threats
   relevant due to the broader application of OAuth 2.0.  Further, it
   deprecates some modes of operation that are deemed less secure or
   even insecure.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-oauth-security-topics-29"/>
        </reference>
        <reference anchor="I-D.ietf-oauth-resource-metadata">
          <front>
            <title>OAuth 2.0 Protected Resource Metadata</title>
            <author fullname="Michael B. Jones" initials="M. B." surname="Jones">
              <organization>Self-Issued Consulting</organization>
            </author>
            <author fullname="Phil Hunt" initials="P." surname="Hunt">
              <organization>Independent Identity, Inc.</organization>
            </author>
            <author fullname="Aaron Parecki" initials="A." surname="Parecki">
              <organization>Okta</organization>
            </author>
            <date day="8" month="July" year="2024"/>
            <abstract>
              <t>   This specification defines a metadata format that an OAuth 2.0 client
   or authorization server can use to obtain the information needed to
   interact with an OAuth 2.0 protected resource.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-oauth-resource-metadata-06"/>
        </reference>
      </references>
    </references>
    <?line 300?>

<section anchor="use-cases">
      <name>Use cases</name>
      <t>This sections outlines some use cases where the identity and authorization chaining described in this document can be applied. This section is not complete and other use cases not mentioned here are also valid.</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="continuous-integration-accessing-external-resources">
        <name>Continuous Integration Accessing External Resources</name>
        <t>A continuous integration system needs to access external resources, for example to upload an artifact or to run tests. These resources are protected by different authorization servers. The identity information of the build, for example metadata such as commit hashes or repository, should be preserved and carried across the domain boundary. This not just prevents maintaining credentials it also allows fine grained access control at the resource.</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="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>
            <t>Authorization Server B is reachable by the resource server by network and is able to perform the appropriate client authentication (if required).</t>
          </li>
          <li>
            <t>The resource server has the ability to determine the authorization server of the protected resource outside its trust domain.</t>
          </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) request protected resource  |
       |                     |      metadata                     |
       |                     | --------------------------------->|
       |                     | <- - - - - - - - - - - - - - - - -|
       |                     |                     |             |
       | (B) exchange token  |                     |             |
       |   [RFC 8693]        |                     |             |
       |<--------------------|                     |             |
       |                     |                     |             |
       | (C) <authorization  |                     |             |
       |        grant>       |                     |             |
       | - - - - - - - - - ->|                     |             |
       |                     |                     |             |
       |                     | (D) present         |             |
       |                     |  authorization      |             |
       |                     |  grant [RFC 7523]   |             |
       |                     | ------------------->|             |
       |                     |                     |             |
       |                     | (E) <access token>  |             |
       |                     | <- - - - - - - - - -|             |
       |                     |                     |             |
       |                     |               (F) 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. In this example <xref target="I-D.ietf-oauth-resource-metadata"/> is used to receive information about the authorization server which protects the resource in domain B. This step <bcp14>MAY</bcp14> be skipped if discovery is not needed and other means of discovery <bcp14>MAY</bcp14> be used. The protected resource returns its metadata along with the authorization server information.</t>
        <t>(B) Now, after the resource server has identified the authorization server for Domain B, the resource server requests a JWT 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>(C) If successful, the authorization server returns a JWT authorization grant to the resource server.</t>
        <t>(D) The resource server presents the JWT authorization grant to the authorization server of Domain B.</t>
        <t>(E) The authorization server of Domain B uses claims from the JWT authorization grant to identify the user and its access. If access is granted an access token is returned.</t>
        <t>(F) 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>
            <t>Resource servers may not have knowledge of authorization servers.</t>
          </li>
          <li>
            <t>Resource servers may not have network access to other authorization servers.</t>
          </li>
          <li>
            <t>A strict access control on resources outside the trust domain is required and enforced by authorization servers.</t>
          </li>
          <li>
            <t>Authorization servers require client authentication. Managing clients for resource servers outside of the trust domain is not intended.</t>
          </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 or       |                       |             |
    | exchange token for   |                       |             |
    | protected resource   |                       |             |
    | in domain B.         |                       |             |
    | -------------------->|                       |             |
    |                      |                       |             |
    |                      |----+                  |             |
    |                      |    | (B) determine    |             |
    |                      |<---+ authorization    |             |
    |                      |      server B         |             |
    |                      |                       |             |
    |                      |                       |             |
    |                      |----+                  |             |
    |                      |    | (C) issue        |             |
    |                      |<---+ authorization    |             |
    |                      |      grant ("internal |             |
    |                      |      token exchange") |             |
    |                      |                       |             |
    |                      |                       |             |
    |                      | (D) present           |             |
    |                      |   authorization grant |             |
    |                      |   [RFC 7523]          |             |
    |                      | --------------------->|             |
    |                      |                       |             |
    |                      | (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 a JWT 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 JWT 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 anchor="Acknowledgements">
      <name>Acknowledgements</name>
      <t>The editors would like to thank Joe Jubinski, Justin Richer, Aaron Parecki, Dean H. Saxe, and others (please let us know, if you've been mistakenly omitted) for their valuable input, feedback and general support of this work.</t>
    </section>
    <section anchor="document-history">
      <name>Document History</name>
      <t>[[ To be removed from the final specification ]]</t>
      <t>-02</t>
      <ul spacing="normal">
        <li>
          <t>remove recommendation to not use RFC8693's requested_token_type</t>
        </li>
        <li>
          <t>Corrected discrepancy between alphabetic numbering of the diagram and text in the resource acting as client example</t>
        </li>
      </ul>
      <t>-01</t>
      <ul spacing="normal">
        <li>
          <t>limit the authorization grant format to RFC7523 JWT</t>
        </li>
        <li>
          <t>minor example fixes</t>
        </li>
        <li>
          <t>editorial fixes</t>
        </li>
        <li>
          <t>added Aaron Parecki to acknowledgements</t>
        </li>
        <li>
          <t>renamed section headers to be more explicit</t>
        </li>
        <li>
          <t>use more specific term "JWT authorization grant"</t>
        </li>
        <li>
          <t>changed name to "OAuth Identity and Authorization Chaining Across Domains"</t>
        </li>
        <li>
          <t>move use cases to appendix and add continuous integration use case</t>
        </li>
      </ul>
      <t>-00</t>
      <ul spacing="normal">
        <li>
          <t>initial working group version (previously draft-schwenkschuster-oauth-identity-chaining)</t>
        </li>
      </ul>
    </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:
H4sIAAAAAAAAA9U9a3fbNrLf+StwnbNbO2sptvNqdNps5EcSpXHs2k6z2WxO
A5GQhJgiePmwojzub7m/5f6yOzMASIIiZdnx9nTdnlYiwcFgMJj3UJ1Ox0sz
HgW/81BFoseyJBeejBP6lGY7W1uPtnY8n2c9JqOR8tJ8OJVpKlWUzWMYPzg4
e+rxRPAeS4XvzcY9pnieTTwvUH7EpzAkSPgo60iRjTp0qyMDEWUym3f8CZeR
jMYdmMKDKyGMPurDEDYwQxigxvCKSuRnnsG0bM88xPp+otKU7aspXEg9Phwm
4qLnhTwCJETknc967N177xYLeAaAd7Z2dmAi+Jd1OnSNyZSNZBiKANbGADWA
lEmfh+GcDefs0zTcSUY+kyMWqYyN5QUA5YRLz+swvbh+EgUZO/UnMxGdp/4E
aCYSjzGVABKHElFUowwuCMAy7DGO49MnU3un66tpAewYiCQS9gtPUxFOeRQt
ARTT2O65HdsC8hcB65uz3TwZyxLc4OzkoAR1PqS7ACFLRBdGFE8fynPBXsDK
kMDm4Ven/c7e3ulp+fz040cc8sSfDwGjKOXdsbooYOwmksOu8Wk8BFwslGPc
QbvLJaihb8Y9iWGAZRRakQ8sl8gh7FKV/FkesrM8TCdyyMczHgo7wemzVy8r
ZIdx6ZN0HIVdLounnwkYKtjTUGT+pNy2PR7LjIfsKBIlhDGN7Y7M2Ce+HgSH
xqH3iRxxDgwxEeeTzts8FSML9eBtCSyhUd2URs1xFMDrirkD6jkwgEjZGXCV
GolIjsvnJ3SrmxW3noynn7qRyDwvUgly8YXowfCTp3sPHt571GO3zLna6W7V
jtPTBCabqeRcD//xwaO77vAzdS4idvAJDms0FnrUw/s7NOrF6dEr9kYMzaD1
F2/ONthxouBUCTZSSQXMXihhM2ly3FRfz754vJ8lPMpSg8zDrYc4zYlIVZ74
gg2iAJ9USepCN8Pvbd9bttRTkVzA8ToUGYfjzz0PJVpBLYAx6Ox3K3IKDpbw
8WYnkKkfqjRPROfjLOs1DfXzBEVapmLppw0jErOGztRMDzN6HZBEfJhmCfdh
684mIJDSWPhyZOkTiJFEJuBsKnADZDplmWIxQMPFMHtCWLEUQ9SRCESCMo47
JOBaZpJsZ4GWnCybAMcCE8IHUSFewRldjehUBgGcLxCoAziJKsh9BOn14zg0
6KYMxA/wQSL+O5cJzO37AmdTzK7eTAYKgwFN9XkG8WvQmuZhJmNgHRe/GZw3
wQT3J84NOAUpkxlMOosqaLsLJjIlXdZHGgIWMMMmUPVChCoWwEaIiUZ6xH3A
ZCYBDNIhlVmuQWiMgeYqA3aAMXYxqD9CBUs3CgSWNBoBqsDmDp64HxlohgoI
UC/V4S04EyEFAJryOYDkUQrXYZ8KOhWY6EdSRKOFiEMBDCIYCBi4l4FwBfhh
2LAqBHKhwgu9qDQHqvMCkUjAZdjP80jNGKA6myjAZygmPBwR2ezAGewNrAjU
CqlT0NiZJEKty67o0lDguGRjE0DwOgHw4THKAWQNIJ6K8TIBmk0kIKTg+WRx
9TPkE9Tf8FycSJAQgOqUn6Ou4VFtkgDOGdoxXUbnrnqAcJXEtkNRHLVgkwHX
4IpFVCEIMS7QDPQArJdNkcYO4Q14sIbyKW51IkaIKgDP8DqsdM2aQWu02KYj
j8LOIIJrkVXryF2VIwf0qbIckKdEB2SBIWwLDVGjVknPvnwx+uDbN5ro3ybs
9UyoU759A1lzCwU+CRAkWMpeAjY5B9UDAlKwc7BmQCjB/qwdvj49W9vU/2ev
jujzycGvrwcnB/v4+fR5/+XL4oNnRpw+P3r9cr/8VD65d3R4ePBqXz8MV5lz
yVs77L+FO7iKtaPjs8HRq/7LNTwjmbPBKFE060hg4AS2jdg49QKR+iDw9Lna
3Tv+v//dvgdL/y9Y+8729iOgsv7y4/bDe/AFGU3PpiJifPwK9Jx7PI4FT0jk
wAk2hki6ibyUTlAYorwEQt5+h5R532M/Df14+95jcwEX7Fy0NHMuEs0Wryw8
rInYcKlhmoKazvUapV18+2+d75bulYs//T2E88I62z/+/bFH2unqvkOz6tXb
lX7PkXlzduMnBJkLVKEUVfW/KAisUKlJAWCLPvP15Mi6VT3V16qukH5GffO6
oF14cNeKQxyMa3ZRIVHORomaktxvUnZEnRoyF5IDuIwoLAyFUZqKdvxJRiK9
tCryhUQ1pueH04E6AKR1otW6ascGgBVLg/+AuBGkS9Qw0wq9NG0QO0J+IhpN
hBJSHfcCa9TuIC4W6LyJGkVm9n47thlYqiMtOY8uUEeImRaWq/DHKERVnmd4
isAwEfi15H2QJ382/kcBC7YD2SE8CBLaB21PgDBEZayXPZIi0DRHgQmewyeg
uh/mAZByRo9KbVYAd3G0ioxxahdPayfZTiSSKc3aBeuXtL15aNPwmntCwJ4n
3Z6VO45rI2UhtPmy2b6hi0/D5v4P/Hl/61T//saW/NWHlt//5n11iPx18ZkS
cn3o12PL5F+9r8ajMiPLZ8zuVi/Vhn4tfDoAs29PQg2Mvb54adeCKb5/baVN
w6KW0WZhNZW/xou1q1+XQ2jctytB0P9Z72+gC+UrTdUrQfiJcHAP2tVxYMzZ
02tBcLbzWhCWXr1RCOu7G4UeMoL/yji8AzHGUEC+vxYOP3UW//54OuxtsJ9c
uXUtHLRaBhXx+Oo4dBb+efyH06Fx7Pr+hrVCrgmhyXa6GgRiMlSW76tXrwKh
gc0e/+GUPEA2q5hZj68K4adFLun80atw/9afbljLcWUIDXtR35k/hZwk++RL
j1Ee5+cfVvHCnoJd9cM3bapqGysMc4yGmojaUznOwdjbJrdWm0NpJmLHrCqc
gMKIKPyXWCQYDHFcmWYT3fVmyMQrDL/N6mwYcuRshuE4VarfZX5EoeHIBDcz
JSLUAdOJjEGnSPSchiKbCRGV68AHiqfXRXfcRVQSlY8nNrwLIDYA28watpoy
IxUC3kDgnufdJkOh4niA+b5IqctXUj4G5DkVgr1rjK3vG0Dz9+u3HDgdDadj
Z5pvdAm5XQc5q151XFfrWLDIl2FlA8Bm89bt4jbI4Wh3R8nU98GTGxpvYtk8
lX00q3cdH1gtIduxCzCr29Oru4Si6Lcq5E+ROjFUZIBEZHkSLfOraSEVFsU1
oStURLIv30+KfpigfdrMpNfmTqLDvrPLjpfeuKQlrnkDI+qzrXfkRNMO2Y8u
d/S+GJIadECz9C+BzS54KDFJrLFsI76zRW5UQE/11Fk5Rs1jChjjXtfDCKWc
ag8mFGsnb3/5GWyMaimYGNPZOszcTOPikGIOwqB+2H/LcGodAAE5jKlyuBJj
ohYDFchzOi4/FTwisWL88Hnrbmr3/INz63cTzf+AFAARTskt9uXLZfm0b98I
R3OcNX1quUuvyoRaOaS1ABO63Zo0gZ62DGgsP1AjitW4skifilIiNYWSVhdQ
lx7oakapEQUQtrxgCJPfEZTFY9vduwiC1ospYxOJr5PQni9NyphjijDDfIYT
3LZAd7rbBVAbFYrjcE4B6nI9hb5CTs8SSQ+noLy+9C7SmPvimwf8GAuvx2z8
FxizDN/QTc1wOj8s7CWjFovAiz6qImgjupEoeyGXyBmYcYNVUfYJJIpPlzvO
ZZQolhUBPxtKx6IRngfAaTpNiCcuFQD/9cmAtqplCzOejCk7V2ygNUpwIgux
NlE1H1lM9EaEIaXpojuhGmNVC5UVXH9yZIZjradoq/JQpCjiBm7iTwcjLSok
RSmMqUdREU2JMGpoSyUK60WEMQU+9XcUiHHGh6FgQ46nADCOVSj9+ZL4GWU5
QPbMq5h1AddWZYySgwfBJgyeguTD+Q3D602/HmM0np80BuYGWYTZVyB6eVZ2
ms6KFCmZozZauVk7MWYMMT+GIzEFZXLxWoCoyNrA2YI2IBWFNFmDXVjTS131
qGgiOxLeEFrUQ82lrAcEfJUkRAOwPEkCFN4qkFiT4u4mO1agadjd9+uTLIvT
3p07KOGxTOIcAKEWwDKlO4Hy70yyaXgnGfkI4ZYhZufuhg63kibV+bhEBDlw
2VSmqKgoJU91FBdkM5FOSHWOwpgnOndSqufUZhCaDZaFO6XpuCiXWwh/NWFF
TFtsQJH2b8Ii3URleiERurYXFyy8VPshhVSeat3R7nGk1aRdaYU6K0oLiW7C
9QxlRwuS1Q1ZQk2MvRu5VN+u0gr+If3Ofap6hF32FORBJd4vkXWpeEJju5L/
14RsE44yKzNXRc6sdHYLA3yZkYzGiBm4Z+TQgUZfK26zFpPtKb3rKXA7Hwuq
ADnXZSpNrnZQwaF0sh0zarmxUs1+FUecp11Oxxof2dBnluiwLKmolnvftTRl
da5hOZfOrnjHRyDR6ModvZrnZ2fHd7a7295zlWY9ZhH09lSUAUE6Z1QCy8sC
qDufOrPZrIME6eRJCHpNwZHzPEL2d6yY/RmO9F/u9lGEwf/IgErhA9m08H8a
2MGB8MV1Kb2/WrX5M60CBvxl5yn8a9eCH7Hy9q9pPvwIgvB3ev5nMe92u7WL
q6CiZzeoaEGoH/bcQM+Zu/FGCWBYB8dZErKdrS129MsS0n1MVeTtcX8iOjgo
UWEPTIiOj1c28VOaqQT494vHQMhU8FnrrYn5i8nwmS+P5IvB68+D7VdykA6i
k/v+3uDB4Dz+x297Lx51YVDs3z3EQQpgBM9PZv5ndfFy5+nnl9ODfHj3RQSf
t4NnY/ly70Uonvfl0ceDnaOz1/Oj/V9nR2cAcxpOAoB5ePb2/iuAcTa49+rz
2/uHcib9u7/JwUcl+fSRGoaPzoc7v/Xfnt6/8Kc+gpsEb36lmd1psU7QmXn0
a/fu1r3ji0fiwXH02f/1+PPn7XufO+c7/5z/82I/O77/ZnBy/vb41J8Fz9/c
W9tEYpRbCqR49XtfX5Vpmovgd+cm7HgP97und7tHe90rd7r3cZbpp8WnGIMB
v0sg74Mt79tlm66tGtx1kDV4WhvSuK7/VQ0CtB3vRlnYdtZr3tdSbb1UZkwK
BaOsbVurf8D6NsK9jCwuuo2Vgibw1BuCFJoejeu2AZ+hADM40cJ10xS/VSRy
ngpTXmkjRm5EgdccM0vrG6/aIg1JUYs8ibEkkCi3EH1wbVeNWqytVXIMHZ+v
FJoVf4cqOSuUPm1wNW2dDEwG/kcu2Idmvi+FLfJ9R9P6Q+FEusG4+paUhSRN
fiT4ava+i3zDZhd2ntG2NU26/qEq7D4UZw211oJb7Bwxsg+tR6w53nqktJ4s
mZMhUgk7aVsPx34g2B9KH5+ZHf5gT0P13kLI5OHWw4L3F73Gdj8MnQobelse
easFMgwjpOwucezdBX7QsaaS++IaVoyHqSrYcNE8X/R3GqNvlCDQbi/W/0UB
uUOG7kaelLyjazKFpLhZZfOjICYPyDnAhX/ksLnZFhL3SVn6ktREUnFQSi/z
3vY93KMlbrGp5Ku70ujNaxZCH5+c83q0z5gbCH0/p9vaa3fAmHgdPIebuE4h
tAjbkZBFNalKt0MrgMJstJPjdopgo1nMWl+7dYGuK3qZ+LS++v0KcznBsnYj
OzVWtq4pWqWE7ZrKayWD1zGuG4rZVsyTrWw2D/9Is7mU5d5fi5NmzGDXiukX
5/A/1God3KjVKu+D1fo6PzwbfB7Avbf/+O2c7j0/2fKfHz54OX8kX04fzf+J
/VqPJv6zc7RW917s5hcP0uTBafTxkYzun/04ejjezncfbP8a/jjMXsiTrcE/
Lu4r8WLcYK3u0j6tZHJWN8uxNpuCcp7XlOBJSeLYgUMb3NM1/UYIx9TZglK5
RfOk1pCq6WldR5nUYkZmbCnxcRiFf27fPrOI2HCAEZoVIX77do+dLlyltICO
VRSJuUzH4zNZaeDQZpkVqT2QLthzgaKTwqyY8izkDhgfax/VJAqUeEJe7hob
5tU61V0aAre7OOwJHek1rVRtFogkNMZnKqgaeaUzQ0h+Q+cJFWW20BKz/KZt
RrA8DnRBQAmUAkujUAsoGV0eKlPJ4k7QJLq3qGWamcpDLIl1JyMo1UQfqBvY
ujhWSaaN3qFCZdLKgBRoNitViQ05G150dA4fwp0uMcupbUZjZTMackc7n5eh
7AmsifmwbNxHM09gtHIiLzio5aTacUFIYbg0MBI/UzOOLRe0VUWWwI2RARFo
Htw2kOAhegFmroXkXVtnXT2Hhws3YjXEGckmxVXvmYAtjrada3SzYpPC6nz9
bOXIBxYnHd0M4BjgcwB8o26dnxpaGiMIPmvjhmeVSLdJNGGyAs2RiRxrISIv
wL8a63BrVKKHHXJWxePT1aCMXu6AosBL5I9ZAFKh1awxQbkizOhIHyJaKGAc
L/IbpXddIrcs510UUmOguB6vrh0OBKriPKTTZaYzNIWNxqQUOXyUJrKmvxOd
J/M2+miML6z5iLSBbXIz2txKhEG9KFNv2HUjUySFSKe8sGErhnJjmuQWG/Rf
9RnwYiqtQQp8fQuvYgET9fvAudaJZzS2qR108QF7x6quBo/bW8qG2oGptWoW
8+2iWb2XJxTDPsa2UumLpvPntKvCsUOrzxaqO9iY5s8h989xZa9tkb3tmbFu
l+kggCtqWq3FLwXsKs0ItWhFta/KpMJ1wisw2SRrkZttNN2NWghplVNiggMQ
EowH+IQWHlty+4ifdM3Ase2tfY26kiy/T5ntojnELEsHJFYOIlx/eT4fJhJF
3oVMVEQC1DOKlmeZmMZunIiOKG4KCRJsPLRpO+oSgwFRPh3qhKyKOsDTU2kS
VjRtR6dBdbe/BpV22a4y4fYlj9jRtOpUjM2cw3m9ZXSo8ijgibQNEXA8I6fB
sTIJsQ3MUSyrSocuO8AqEgdZ2kddBbDg4RQuIuaS+LmJwPhmC4zzbLtKicTU
9DbDVDf2AmO/3VQEktfmpFu0BbCybJNJSkEadQpgSx51n0JCJXmk26hQrVUa
QJ01mbSU4x5hHyoKHM2GlZH2kqM+tThQmBrKVZ5ii7UYG8dXO7WIxMEnWCGu
3XZPIKv55VOy8lQ6BwU1XejmEhZE0e+7SYffeqswMo9DxQPaHtAaIxAiTLfS
Ai1Yhm1eJNXTMjCqSeW0Ny9vbtYQmtvXzT4PcxkGLm621Md0JWMyeTqVVJU5
EcZsiVUqweWab6LDbcy3oodXnwmeJLJsOq+Eew3jz41wQYHxEffIKKK0KIDC
vfDBRELsQX5gMERHj0Jy9amyCvZBVrShNUVMmtRSztRxHQ9KGY4idg9OLGzt
BGVpIDQ3onDj0dxmclFUrO2B9kw4Pr+GGyQiCsaUffcEwKdBQPJj2M8I3QeC
hOdb206w1hKQrqPRfKQPhX6ejYiT6CRpFWq1CAuA/kOFFmIXsEfiaNVU901w
bmvVlxNuYrjBYsYLX9yEf2zkn1fXYhpswXiMQz4vzHLAqUBFMxiJ4Qm3tXZ4
/MvUpIFl6JlUnjAdd6Eajw1wUBFSzJyVFBn1Ys5NE4ybEwDL9yATYZ4x2MTz
ys6UCOh5G7d6SuJYlCG2KBDYygZ8B/KzapFWw2pGQtrueeymL3Axrx6gVc4m
isLa5b3qMon0yinuQbVZbgJZOibiVTMHiNv1uyVmqmivwxcvTMFWwAJvZJKi
v85NEhjiU82bjCqCpKpa9C7aBx33xQR6ZZJmheQoU9wNnXok3hd69chmF7CQ
oAFKW9veAijbz942qR7leYVAL1w4YiE/KwelRUy0iGFTED8XFK9ujEbvaleZ
g4FFJVTzRhrA5QiOqkrObdmMZbgiuz8hyytR4NmgWGg0Fdk6FaPRTmBEVgeW
65NNDH34UIYoPLD8HP21KQrNVtoaRmwIS4LhiSa2rhh3VSrxAVrL2pEPlTpn
Ib7SCLmup0N9rR2VV2wbbGupLDsdK12M1+ipLDsov6+p8qa6Km+yrfIGelTo
KrY6WCHYwCmrgIC/wspoHHMZiO9t12npW6p1Md0oORsaG2+gs/EGWhtvoLfx
Bpobr8mdFCx5fD0sGrb8Bvobb+aYfW+HI16tEfg6IHQsyml1vCKIxrN5RSwu
vXo5Ob+zzfEG+hxvSvxW/67e6XgzsvPGF9IMwk1NXWbeOT2OpWnsmHLU2Ag2
iW3Xq5tNYAAVuZq6T39JqxCW65bdXYtNR4Fi4Lvq4iKZlS1CplOpbIe0dvBK
zTjmfRnVVLPzcipwtpdUzmpszMJqlnvtnSroQGAqx2QO0nMZx+g6jMo+Jhsf
RMLZd4plZauSqg6tJiB08HqRurblC23OwlzAl0GOLy18LSgA9ikq3lfYYcpH
man/aLKWy9eZrFTxu9v8SpJVXtFzSTWtW8ts6+0aR5d9mGaLdL4vpbf6NGT8
kMjKVyFSBVTwYIQxHmTTUR4u6fRYoT1SNVEDp9lvPmgrFSau2qEI0xys1AO6
q2v56tmYJfM75TY63Iy+G24wEa6LRDRHXVbfp+eef/IPdeIGsX3aTJTc9qZe
rWGRZ0sbFlu94eakZoNHnCll+0p0eiASiA8GgIfC57muRKw2mPFU95bdrjvl
Gj4l8TjIKsyQhyIYt3ZMpd1LYRROdRH10VKnFVyf6W6JetBQRZVQq3V46RRV
I85lE29gsrBwoH0T8mmdspHU9g2ezSkhdsgjPqYgqG2cUQ2vY7SIGt+9jiuS
yZbIOc46Bdgb0XJ2fyWvvslhrd1Y6tUvOu8L3nvb9Uavvsmhr1kYK3n1TQ59
Hc4qXv130qfdYmq73GiNfXVcd9UQ/VgBRM2FHanF9yJdBqIpaHBFEI5x0jz0
MhDNlu+VQKww9HogajxzXSx00KGM+10RhH6B1YIXeXVapDZMet2FXHr9P2hH
wO6iKuLrgLixHdH2zfoaJXMxT3l1EK5pubbxH7ipjVGWK2PRZDleEcSq75Jq
BdHix18Ni8uvX0bOhijLFUE0R2X/fQtBU3x5YOgyEI0Y/1kYvPxbf1aGilZX
iKv9Pf6zHPZaLfMqbtANRY0K67ASAFjltbWus79CWKBvgzHNL5yxL5gy4Zqu
fu0RtaEBlkteJFvJB5uYSas/vV5Zb8W8WJKzrTyxu1G8ogD9CvLghli+EGP9
ZK0ZepPROrj9vRhbGaLLGIN5xKfmDtKUirF1ZOMo8pe9yjctsQ6WRDWwboz6
O5nVk+G8eI8T1SqTu/nO7dNcfE1VS5+eLpMhhzoVwvZSljq5pmEr0RSD1RK8
ywLTlV/zROtyqjttNKlaYdLiMi4UG5oZivcuFz5zJd/dnN+eTZBbA0UnT10l
uNPyjijdbOPUhFxyGC9p/ymOYhnKuQS3foGb/p2LWnynKZJYm+dZs+ipvqsg
L19tZrp5v+vFV6zvF+EZXQ3y5Vb90jfdgxVI+rUYEyqgKIGimuxz9kIJ9iIf
glA9l5vwKQXxy06kT+9m7vMEqHXMAWG8uy9g55532Sn/JDbL+HHK1uNQ8FSw
UGA3LkWNNjH0PFf5D1Z+TGWK1Yz4Fn81lRmsbMPKXkklzzmVW8gozkGuYN0N
VtvSLGMRiQRfcWTaC+xxNT/LcgvIYspjn0vsNJp73r/e/esd0wXJugOg0jo9
osJJ96y/f+959ANct23HAKxZTQFoYJp2FclvjKUZofxDWlYEVRrMAcIevt2F
9g4D6omIOVY92VPKw3jC4Yv0TZErvTpMR4cCyUFETHXpDZZ7FlXlNpZYU482
G4E/o7O1jeiHEosBF49HEdzGgm9YjemdRCEFT4GorZQYjuQnkcJVzTgSqGWv
UHW3yxeacV2+IzJiUXtQFENNBA/Mb37AplAFrfiELWQyg9FIV7pWFDOh/Gdr
LSJ0DR7RYjfQL3QCqGvX/dE0BEZbXlZJZ6p8XTrJziBoqzC1D+EGbOEG6F95
CYk7cbJxovIYy9RSqg7CMkoJQOAc6N+ES92fTWv7ebgN7/8BIsfcaKduAAA=

-->

</rfc>
