<?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.7 (Ruby 3.2.2) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-oauth-transaction-tokens-01" category="info" submissionType="IETF" xml:lang="en" version="3">
  <!-- xml2rfc v2v3 conversion 3.20.0 -->
  <front>
    <title abbrev="Txn-Tokens">Transaction Tokens</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-oauth-transaction-tokens-01"/>
    <author initials="A." surname="Tulshibagwale" fullname="Atul Tulshibagwale">
      <organization>SGNL</organization>
      <address>
        <email>atul@sgnl.ai</email>
      </address>
    </author>
    <author initials="G." surname="Fletcher" fullname="George Fletcher">
      <organization>Capital One</organization>
      <address>
        <email>george.fletcher@capitalone.com</email>
      </address>
    </author>
    <author initials="P." surname="Kasselman" fullname="Pieter Kasselman">
      <organization>Microsoft</organization>
      <address>
        <email>pieter.kasselman@microsoft.com</email>
      </address>
    </author>
    <date year="2024" month="March" day="16"/>
    <area>sec</area>
    <workgroup>oauth</workgroup>
    <keyword>Microservices</keyword>
    <keyword>OAuth</keyword>
    <keyword>JWT</keyword>
    <keyword>token exchange</keyword>
    <abstract>
      <?line 102?>

<t>Transaction Tokens (Txn-Tokens) enable workloads in a trusted domain to ensure that user identity and authorization context of an external programmatic request, such as an API invocation, are preserved and available to all workloads that are invoked as part of processing such a request. Txn-Tokens also enable workloads within the trusted domain to optionally immutably assert to downstream workloads that they were invoked in the call chain of the request.</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-transaction-tokens"/>.</t>
    </note>
  </front>
  <middle>
    <?line 106?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>Modern computing architectures often use multiple independently running components called workloads. In many cases, external invocations through externally visible interfaces such as APIs result in a number of internal workloads being invoked in order to process the external invocation. These workloads often run in virtually or physically isolated networks. These networks and the workloads running within their perimeter may be compromised by attackers through software supply chain, privileged user compromise or other attacks. Workloads compromised through external attacks, malicious insiders or software errors can cause any or all of the following unauthorized actions:</t>
      <ul spacing="normal">
        <li>
          <t>Invocations of workloads in the network without any external invocation being present</t>
        </li>
        <li>
          <t>Arbitrary user impersonation</t>
        </li>
        <li>
          <t>Parameter modification or augmentation</t>
        </li>
      </ul>
      <t>The results of these actions are unauthorised access to resources.</t>
    </section>
    <section anchor="overview">
      <name>Overview</name>
      <t>Transaction Tokens (Txn-Token) are a means to mitigate damage from such attacks or spurious invocations. A valid Txn-Token indicates a valid external invocation.
They ensure that the identity of the user or a workload that made the external request is preserved throughout subsequent workload invocations.
They preserve any context such as:</t>
      <ul spacing="normal">
        <li>
          <t>Parameters of the original call</t>
        </li>
        <li>
          <t>Environmental factors, such as IP address of the original caller</t>
        </li>
        <li>
          <t>Any computed context that needs to be preserved in the call chain. This includes information that was not in the original request to the external endpoint.</t>
        </li>
      </ul>
      <t>Cryptographically protected Txn-Tokens ensure that downstream workloads cannot make unauthorized modifications to such information, and cannot make spurious calls without the presence of an external trigger.</t>
      <section anchor="what-are-transaction-tokens">
        <name>What are Transaction Tokens?</name>
        <t>Txn-Tokens are short-lived, signed JWTs <xref target="RFC7519"/> that assert the identity of a user or a workload and assert an authorization context. The authorization context provides information expected to remain constant during the execution of a call as it passes through multiple workloads.</t>
      </section>
      <section anchor="creating-txn-tokens">
        <name>Creating Txn-Tokens</name>
        <section anchor="initial-creation">
          <name>Initial Creation</name>
          <t>Txn-Tokens are typically created when a workload is invoked using an endpoint that is externally visible, and is authorized using a separate mechanism, such as an OAuth <xref target="RFC6749"/> access token or an OpenID Connect <xref target="OpenIdConnect"/> ID token. This workload then performs an OAuth 2.0 Token Exchange <xref target="RFC8693"/> to obtain a Txn-Token. To do this, it invokes a special Token Service (the Txn-Token Service) and provides context that is sufficient for it to generate a Txn-Token. This context MAY include:</t>
          <ul spacing="normal">
            <li>
              <t>The external authorization token (e.g., the OAuth access token)</t>
            </li>
            <li>
              <t>Parameters that are required to be bound for the duration of this call</t>
            </li>
            <li>
              <t>Additional context, such as the incoming IP address, User Agent information, or other context that can help the Txn-Token Service to issue the Txn-Token</t>
            </li>
          </ul>
          <t>The Txn-Token Service responds to a successful invocation by generating a Txn-Token. The calling workload then uses the Txn-Token to authorize its calls to subsequent workloads. Subsequent workloads may obtain Txn-Tokens of their own.</t>
        </section>
        <section anchor="replacement-txn-tokens">
          <name>Replacement Txn-Tokens</name>
          <t>A service within a call chain may choose to replace the Txn-Token. This can typically happen if the service wants to add to the context of the current Txn-Token</t>
          <t>To get a replacement Txn-Token, a service will request a new Txn-Token from the Txn-Token Service and provide the current Txn-Token and other parameters in the request. The Txn-Token service must exercise caution in what kinds of replacement requests it supports so as to not negate the entire value of Txn-Tokens.</t>
        </section>
      </section>
      <section anchor="txn-token-lifetime">
        <name>Txn-Token Lifetime</name>
        <t>Txn-Tokens are expected to be short-lived (order of minutes, e.g., 5 minutes), and as a result MAY be used only for the expected duration of an external invocation. If the token or other credential presented to the Txn-Token service when requesting a Txn-Token has an expiration time, then the Txn-Token MUST NOT exceed the lifetime of the originally presented token or credential. If a long-running process such as an batch or offline task is involved, it can use a separate mechanism to perform the external invocation, but the resulting Txn-Token is still short-lived.</t>
      </section>
      <section anchor="benefits-of-txn-tokens">
        <name>Benefits of Txn-Tokens</name>
        <t>Txn-Tokens help prevent spurious invocations by ensuring that a workload receiving an invocation can independently verify the user or workload on whose behalf an external call was made and any context relevant to the processing of the call. Through the presence of additional signatures on the Txn-Token, a workload receiving an invocation can also independently verify that specific workloads were within the path of the call before it was invoked.</t>
      </section>
      <section anchor="txn-token-issuance-and-usage-flows">
        <name>Txn-Token Issuance and Usage Flows</name>
        <section anchor="basic-flow">
          <name>Basic Flow</name>
          <t><xref target="fig-arch-basic"/> shows the basic flow of how Txn-Tokens are used in an a multi-workload environment.</t>
          <figure anchor="fig-arch-basic">
            <name>Basic Transaction Tokens Architecture</name>
            <artwork type="ascii-art"><![CDATA[
     1    ┌──────────────┐    2      ┌──────────────┐
─────────▶│              ├───────────▶              │
          │   External   │           │  Txn-Token   │
     7    │   Endpoint   │    3      │   Service    │
◀─────────┤              ◀───────────│              │
          └────┬───▲─────┘           └──────────────┘
               │   │
             4 │   │ 6
          ┌────▼───┴─────┐
          │              │
          │   Internal   │
          │  µ-service   │
          │              │
          └────┬───▲─────┘
               │   │
               ▼   │
                 o
             5   o    6
                 o
               │   ▲
               │   │
          ┌────▼───┴─────┐
          │              │
          │   Internal   │
          │  µ-service   │
          │              │
          └──────────────┘
]]></artwork>
          </figure>
          <ol spacing="normal" type="1"><li>
              <t>External endpoint is invoked using conventional authorization mechanism such as an OAuth 2.0 Access token</t>
            </li>
            <li>
              <t>External endpoint provides context and incoming authorization (e.g., access token) to the Txn-Token Service</t>
            </li>
            <li>
              <t>Txn-Token Service mints a Txn-Token that provides immutable context for the transaction and returns it to the requester</t>
            </li>
            <li>
              <t>The external endpoint initiates a call to an internal microservice and provides the Txn-Token as authorization</t>
            </li>
            <li>
              <t>Subsequent calls to other internal microservices use the same Txn-Token to authorize calls</t>
            </li>
            <li>
              <t>Responses are provided to callers based on successful authorization by the invoked microservices</t>
            </li>
            <li>
              <t>External client is provided a response to the external invocation</t>
            </li>
          </ol>
        </section>
        <section anchor="replacement-txn-token-flow">
          <name>Replacement Txn-Token Flow</name>
          <t>An intermediate service may decide to obtain a replacement Txn-Token from the Txn-Token service. That flow is described below in <xref target="fig-arch-replacement"/></t>
          <figure anchor="fig-arch-replacement">
            <name>Replacement Txn-Token Flow</name>
            <artwork type="ascii-art"><![CDATA[
     1    ┌──────────────┐    2      ┌──────────────┐
─────────▶│              ├───────────▶              │
          │   External   │           │              │
     10   │   Endpoint   │    3      │              │
◀─────────┤              ◀───────────│              │
          └────┬───▲─────┘           │              │
               │   │                 │              │
             4 │   │ 9               │              │
          ┌────▼───┴─────┐           │              │
          │              │           │              │
          │   Internal   │           │              │
          │  µ-service   │           │              │
          │              │           │              │
          └────┬───▲─────┘           │  Txn-Token   │
               │   │                 │   Service    │
               ▼   │                 │              │
                 o                   │              │
             5   o    9              │              │
               │ o ▲                 │              │
               │   │                 │              │
               │   │                 │              │
          ┌────▼───┴─────┐    6      │              │
          │              ├───────────▶              │
          │   Internal   │           │              │
          │  µ-service   │    7      │              │
          │              ◀───────────│              │
          └────┬───▲─────┘           │              │
               │   │                 │              │
               ▼   │                 └──────────────┘
                 o
             8   o    9
                 o
               │   ▲
               │   │
          ┌────▼───┴─────┐
          │              │
          │   Internal   │
          │  µ-service   │
          │              │
          └──────────────┘
]]></artwork>
          </figure>
          <t>In the diagram above, steps 1-5 are the same as in <xref target="basic-flow"/></t>
          <ol spacing="normal" type="1" start="6"><li>
              <t>An intermediate service determines that it needs to obtain a Replacement Txn-Token. It requests a Replacement Txn-Token from the Txn-Token Service. It passes the incoming Txn-Token in the request, along with any additional context it needs to send the Txn-Token Service.</t>
            </li>
            <li>
              <t>The Txn-Token Service responds with a replacement Txn-Token</t>
            </li>
            <li>
              <t>The service that requested the Replacement Txn-Token uses that Txn-Token for downstream call authorization</t>
            </li>
            <li>
              <t>Responses are provided to callers based on successful authorization by the invoked microservices</t>
            </li>
            <li>
              <t>External client is provided a response to the external invocation</t>
            </li>
          </ol>
        </section>
      </section>
    </section>
    <section anchor="notational-conventions">
      <name>Notational Conventions</name>
      <t>The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL
NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED",
"MAY", and "OPTIONAL" in this document are to be interpreted as
described in BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only when,
they appear in all capitals, as shown here.</t>
    </section>
    <section anchor="terminology">
      <name>Terminology</name>
      <dl>
        <dt>Workload:</dt>
        <dd>
          <t>An independent computational unit that can autonomously receive and process invocations, and can generate invocations of other workloads. Examples of workloads include containerized microservices, monolithic services and infrastructure services such as managed databases.</t>
        </dd>
        <dt>Trust Domain:</dt>
        <dd>
          <t>A virtually or physically separated network, which contains two or more workloads. The workloads within an Trust Domain may be invoked only through published interfaces. A Trust Domain must have an identifier that is used as the <tt>aud</tt> (audience) value in Txn-Tokens. The format of this identifier is as defined in the JWT specification <xref target="RFC7519"/>.</t>
        </dd>
        <dt>External Endpoint:</dt>
        <dd>
          <t>A published interface to an Trust Domain that results in the invocation of a workload within the Trust Domain.</t>
        </dd>
        <dt>Call Chain:</dt>
        <dd>
          <t>A sequence of invocations that results from the invocation of an external endpoint.</t>
        </dd>
        <dt>Transaction Token (Txn-Token):</dt>
        <dd>
          <t>A signed JWT that has a short lifetime, which provides immutable information about the user or workload, certain parameters of the call and certain contextual attributes of the call.</t>
        </dd>
        <dt>Authorization Context:</dt>
        <dd>
          <t>A JSON object containing a set of claims that represent the immutable context of a call chain.</t>
        </dd>
        <dt>Transaction Token Service (Txn-Token Service):</dt>
        <dd>
          <t>A special service within the Trust Domain, which issues Txn-Tokens to requesting workloads. Each Trust Domain has exactly one Txn-Token Service.</t>
        </dd>
      </dl>
    </section>
    <section anchor="txn-token-format">
      <name>Txn-Token Format</name>
      <t>A Txn-Token is a JSON Web Token <xref target="RFC7519"/> protected by a JSON Web Signature <xref target="RFC7515"/>. The following describes the required values in a Txn-Token:</t>
      <section anchor="txn-token-header">
        <name>JWT Header</name>
        <t>In the JWT Header:</t>
        <ul spacing="normal">
          <li>
            <t>The <tt>typ</tt> claim MUST be present and MUST have the value <tt>txn_token</tt>.</t>
          </li>
          <li>
            <t>Key rotation of the signing key SHOULD be supported through the use of a <tt>kid</tt> claim.</t>
          </li>
        </ul>
        <t><xref target="figtxtokenheader"/> is a non-normative example of the JWT Header of a Txn-Token</t>
        <figure anchor="figtxtokenheader">
          <name>Example: Txn-Token Header</name>
          <sourcecode type="json"><![CDATA[
{
    "typ": "txn_token",
    "alg": "RS256",
    "kid": "identifier-to-key"
}
]]></sourcecode>
        </figure>
      </section>
      <section anchor="txn-token-claims">
        <name>JWT Body Claims</name>
        <t>The transaction token body follows the JWT format and includes existing
JWT claims as well as defines new claims. These claims are described below:</t>
        <dl>
          <dt><tt>iss</tt>:</dt>
          <dd>
            <t>OPTIONAL The <tt>iss</tt> claim as defined in <xref target="RFC7519"/> is not required as Txn-Tokens are bound to a single trust domain as defined by the <tt>aud</tt> claim and often the signing keys are known. The <tt>iss</tt> claim MUST be used in cases where the signing keys are not predetermined or it is desired that the Txn-Token Service signs with unique keys.</t>
          </dd>
          <dt><tt>iat</tt>:</dt>
          <dd>
            <t>REQUIRED The issued at time of the Txn-Token as defined in <xref target="RFC7519"/></t>
          </dd>
          <dt><tt>aud</tt>:</dt>
          <dd>
            <t>REQUIRED This claim, defined in <xref target="RFC7519"/>, contains the trust domain in which the Txn-Token is valid</t>
          </dd>
          <dt><tt>exp</tt>:</dt>
          <dd>
            <t>REQUIRED Expiry time of the Txn-Token as defined in <xref target="RFC7519"/></t>
          </dd>
          <dt><tt>txn</tt>:</dt>
          <dd>
            <t>REQUIRED A unique transaction identifier as defined in Section 2.2 of <xref target="RFC8417"/>. When used in the transaction token, it identifies the entire call chain.</t>
          </dd>
          <dt><tt>sub</tt>:</dt>
          <dd>
            <t>REQUIRED A unique identifier for the subject as defined by the <tt>aud</tt> trust domain. Unlike OpenID Connect, the <tt>sub</tt> claim is NOT associated with the <tt>iss</tt> claim.</t>
          </dd>
          <dt><tt>purp</tt>:</dt>
          <dd>
            <t>REQUIRED A String defining the purpose or intent of this transaction.</t>
          </dd>
          <dt><tt>azd</tt>:</dt>
          <dd>
            <t>OPTIONAL A JSON object that conatains values that remain immutable throughout the call chain.</t>
          </dd>
          <dt><tt>rctx</tt>:</dt>
          <dd>
            <t>OPTIONAL A JSON object that describes the environmental context of the requested transaction.</t>
          </dd>
        </dl>
        <section anchor="requester-context">
          <name>Requester Context</name>
          <t>The Txn-Token SHOULD contain an <tt>rctx</tt> claim. This MAY include the IP address information of the originating user, as well as information about the computational entity that requested the Txn-Token and contextual attributes of the originating request itself.</t>
          <t>The JSON value of the <tt>rctx</tt> claim MAY include any values the Txn-Token Service determines are interesting to downstream services that rely on the Txn-Token. The following claims are defined so that if they are included, they have the following meaning:</t>
          <ul spacing="normal">
            <li>
              <t><tt>req_ip</tt> The IP address of the requester. This MAY be the end-user or a robotic process that requested the Transaction</t>
            </li>
            <li>
              <t><tt>authn</tt> The authentication method used to idenitfy the requester. Its value is a StringOrURI that uniquely identifies the method used.</t>
            </li>
            <li>
              <t><tt>req_wl</tt> The requesting workload. A StringOrURI that uniquely identifies the computational entity that requested the Txn-Token. This entity MUST be within the Trust Domain of the Txn-Token. If a replacement Txn-Token has been requested, then this claim will be an array of StringOrURIs representing the different workloads that have requested Txn-Tokens as part of the transaction processing.</t>
            </li>
          </ul>
          <section anchor="requesting-workload-identifier">
            <name>Requesting Workload Identifier</name>
            <t>It is useful to be able to track the set of workloads that have requested a Txn-Token. The <tt>req_wl</tt> claim allows for tracking this information even through requests for a replacement Txn-Token. By default the <tt>req_wl</tt> is a StringOrURI representing the original workload entity that requested the Txn-Token. However, if a workload within the path of servicing the transaction requests a replacement Txn-Token, then the Transaction Token Service will append the new requesting workload as a subsequent array element in the <tt>req_wl</tt> claim. This provides a "pathing" mechanism to track which services have requested replacement Txn-Tokens. If there is only a single value the <tt>req_wl</tt> will be a StringOrURI. If there is more than a single value, then <tt>req_wl</tt> will be prepresented by an array of StringOrURIs.</t>
            <sourcecode type="json"><![CDATA[
{
    "rctx": {
      "req_ip": "69.151.72.123", // env context of external call
      "authn": "urn:ietf:rfc:6749", // env context of the external call
      "req_wl": [ "apigateway.trust-domain.example", "workload3.trust-domain.example" ]
}
]]></sourcecode>
          </section>
        </section>
        <section anchor="example">
          <name>Example</name>
          <t>The figure below <xref target="figleaftxtokenbody"/> shows a non-normative example of the JWT body of a Txn-Token:</t>
          <figure anchor="figleaftxtokenbody">
            <name>Example: Txn-Token Body</name>
            <sourcecode type="json"><![CDATA[
{
    "iat": "1686536226000",
    "aud": "trust-domain.example",
    "exp": "1686536526000",
    "txn": "97053963-771d-49cc-a4e3-20aad399c312",
    "sub": "d084sdrt234fsaw34tr23t",
    "rctx": {
      "req_ip": "69.151.72.123", // env context of external call
      "authn": "urn:ietf:rfc:6749", // env context of the external call
      "req_wl": "apigateway.trust-domain.example" // the internal entity that requested the Txn-Token
    },
    "purp" : "trade.stocks",
    "azd": {
        "action": "BUY", // parameter of external call
        "ticker": "MSFT", // parameter of external call
        "quantity": "100", // parameter of external call
        "user_level": "vip" // computed value not present in external call
    }
}
]]></sourcecode>
          </figure>
        </section>
      </section>
    </section>
    <section anchor="txn-token-service">
      <name>Txn-Token Service</name>
      <t>A Txn-Token Service defines a profile of the OAuth 2.0 Token Exchange <xref target="RFC8693"/> endpoint that can respond to Txn-Token issuance requests. This profile of the OAuth 2.0 Token Exchange <xref target="RFC8693"/> specification MUST be used to obtain Txn-Tokens. The unique properties of the Txn-Token requests and responses are described below. The Txn-Token Service MAY optionally support other OAuth 2.0 endpoints and features, but that is not a requirement for it to be a Txn-Token Service.</t>
      <t>Each Trust Domain MUST have exactly one logical Txn-Token Service.</t>
    </section>
    <section anchor="requesting-txn-tokens">
      <name>Requesting Txn-Tokens</name>
      <t>A workload requests a Txn-Token from a Transaction Token Service using a profile of the OAuth 2.0 Token Exchange <xref target="RFC8693"/>. Txn-Tokens may be requested for both externally originating or internally originating requests. The profile describes how required and optional context can be provided to the Transaction Token Service in order for the Txn-Token to be issued. The request to obtain a Txn-Token using this method is called a Txn-Token Request, and a successful response is called a Txn-Token Response. The Txn-Token profile of the OAuth 2.0 Token Exchange <xref target="RFC8693"/> is described below.</t>
      <section anchor="txn-token-request">
        <name>Txn-Token Request</name>
        <t>A workload requesting a Txn-Token must provide the Transaction Token Service with proof of its identity (client authentication), the purpose of the Txn-Token and optionally any additional context relating to the transaction being performed. Most of these elements are provided by the OAuth 2.0 Token Exchange specification and the rest are defined as new parameters. Additionally, this profile defines a new token type URN <tt>urn:ieft:params:oauth:token-type:txn-token</tt> which is used by the requesting workload to identify that it is requesting the Txn-Token Response to contain a Txn-Token.</t>
        <t>To request a Txn-Token the workload invokes the OAuth 2.0 <xref target="RFC6749"/> token endpoint with the following parameters:
* <tt>grant_type</tt> REQUIRED. The value MUST be set to <tt>urn:ietf:params:oauth:grant-type:token-exchange</tt>
* <tt>audience</tt> REQUIRED. The value MUST be set to the Trust Domain name
* <tt>scope</tt> REQUIRED. A space-delimited list of case-sensitive strings where the value(s) MUST represent the specific purpose or intent of the transaction.
* <tt>requested_token_type</tt> REQUIRED. The value MUST be <tt>urn:ietf:params:oauth:token-type:txn-token</tt>
* <tt>subject_token</tt> REQUIRED. The value MUST represent the subject of the transaction. This could be an OAuth access_token received by an API Gateway, a JWT assertion constructed by a workload initiating a transaction or a simple string value all identified by <tt>subject_token_type</tt>.
* <tt>subject_token_type</tt> REQUIRED. The value MUST indicate the type of the token or value present in the <tt>subject_token</tt> parameter</t>
        <t>The following additional parameters MAY be present in a Txn-Token Request:</t>
        <ul spacing="normal">
          <li>
            <t><tt>request_context</tt> OPTIONAL. This parameter contains a base64url encoded JSON object which represents the context of this transaction. The parameter SHOULD be present and how the Transaction Token Service uses this parameter is out of scope for this specification.</t>
          </li>
          <li>
            <t><tt>request_details</tt> OPTIONAL. This parameter contains a base64url encoded JSON object which represents additional details of the transaction that MUST remain immutable throughout the processing of the transaction by multiple workloads.</t>
          </li>
        </ul>
        <t>The requesting workload MUST authenticate its identity to the Transaction Token Service. The exact client authentication mechanism used is outside the scope of this specification.</t>
        <t><xref target="figtxtokenrequest"/> shows a non-normative example of a Txn-Token Request.</t>
        <figure anchor="figtxtokenrequest">
          <name>Example: Txn-Token Request</name>
          <sourcecode type="http"><![CDATA[
POST /txn-token-service/token_endpoint HTTP 1.1
Host: txn-token-service.trust-domain.example
Content-Type: application/x-www-form-urlencoded

grant_type=urn%3Aietf%3Aparams%3Aoauth%3Agrant-type%3Atoken-exchange
&requested_token_type=urn%3Aietf%3Aparams%3Aoauth%3Atoken-type%3Atxn-token
&audience=http%3A%2F%2Ftrust-domain.example
&scope=finance.watchlist.add
&subject_token=eyJhbGciOiJFUzI1NiIsImtpZC...kdXjwhw
&subject_token_type=urn%3Aietf%3Aparams%3Aoauth%3Atoken-type%3Aaccess_token
&request_context=eyAiaXBfYWRkcmVzcyI6ICIxMjcuMC4wLjEiLCAiY2xpZW50IjogIm1vYmlsZS1hcHAiLCAiY2xpZW50X3ZlcnNpb24iOiAidjExIiB9
]]></sourcecode>
        </figure>
      </section>
      <section anchor="txn-token-request-processing">
        <name>Txn-Token Request Processing</name>
        <t>When the Transaction Token Service receives a Txn-Token Request it MUST validate the requesting workload client authentication and determine if that workload is authorized to obtain the Txn-Tokens with the requested values. The authorization policy for determining such issuance is out of scope for this specification.</t>
        <t>Next, the Transaction Token Service MUST validate the <tt>subject_token</tt> and determine the value to specify as the <tt>sub</tt> of the issued Txn-Token. The Txn-Token Service MUST ensure the <tt>sub</tt> value is unique within the trust domain defined by the <tt>aud</tt> claim.</t>
        <t>The Transaction Token Service MUST set the <tt>iat</tt> claim to the time of issuance of the Txn-Token.
The Transaction Token Service MUST set the <tt>aud</tt> claim to a Trust Domain of the Transaction Token Service. If the Transaction Token Service supports multiple trust domains, then it MUST determine the correct <tt>aud</tt> value for this request.
The Transaction Token Service MUST set the <tt>exp</tt> claim to the expiry time of the Txn-Token.
The Transaction Token Service MUST set the <tt>txn</tt> claim to a unique ID specific to this transaction.</t>
        <t>The Transaction Token Service MAY set the <tt>iss</tt> claim of the Txn-Token to a value defining the entity that signed the Txn-Token. This claim MUST be ommitted if not set.</t>
        <t>The Transaction Token Service MUST evaluate the value specified in the <tt>scope</tt> parameter of the request to determine the <tt>purp</tt> claim of the issued Txn-Token.</t>
        <t>If a <tt>request_context</tt> parameter is present in the Txn-Token Request, the data SHOULD be added to the <tt>rctx</tt> object of the Txn-Token. In addition, the Transaction Token Service SHOULD add the authenticated requesting workload identifier in the <tt>rctx</tt> object as the <tt>req_wl</tt> claim.</t>
        <t>If a <tt>request_details</tt> parameter is present in the Txn-Token Request, then the Transaction Token Service SHOULD propagate the data from the <tt>request_details</tt> object into the claims in the <tt>azd</tt> object as authorized by the Transaction Token Service authorization policy for the requesting client.</t>
        <t>The Transaction Token Service MAY provide additional processing and verification that is outside the scope of this specification.</t>
      </section>
      <section anchor="txn-token-response">
        <name>Txn-Token Response</name>
        <t>A successful response to a Txn-Token Request by a Transaction Token Service is called a Txn-Token Response. If the Transaction Token Service responds with an error, the error response is as described in Section 5.2 of <xref target="RFC6749"/>. The following describes required values of a Txn-Token Response:</t>
        <ul spacing="normal">
          <li>
            <t>The <tt>token_type</tt> value MUST be set to <tt>N_A</tt> per guidance in OAuth 2.0 Token Exchange <xref target="RFC8693"/></t>
          </li>
          <li>
            <t>The <tt>access_token</tt> value MUST be the Txn-Token JWT</t>
          </li>
          <li>
            <t>The <tt>issued_token_type</tt> value MUST bet set to <tt>urn:ieft:params:oauth:token-type:txn-token</tt></t>
          </li>
          <li>
            <t>The response MUST NOT include the values <tt>expires_in</tt>, <tt>refresh_token</tt> and <tt>scope</tt></t>
          </li>
        </ul>
        <t><xref target="figtxtokenresponse"/> shows a non-normative example of a Txn-Token Response.</t>
        <figure anchor="figtxtokenresponse">
          <name>Example: Txn-Token Response</name>
          <sourcecode type="http"><![CDATA[
HTTP/1.1 200 OK
Content-Type: application/json
Cache-Control: no-cache, no-store

{
  "token_type": "N_A",
  "issued_token_type": "urn:ieft:params:oauth:token-type:txn-token",
  "access_token": "eyJCI6IjllciJ9...Qedw6rx"
}
]]></sourcecode>
        </figure>
      </section>
      <section anchor="creating-replacement-txn-tokens">
        <name>Creating Replacement Txn-Tokens</name>
        <t>A workload within a call chain may request the Transaction Token Server to replace a Txn-Token.</t>
        <t>Workloads MAY request replacement Txn-Tokens in order to change (add to, remove or modify) the asserted values within a Txn-Token.</t>
        <t>The values of the <tt>sub</tt> and <tt>aud</tt> claims MUST remain unchanged in a replacement Txn-Token. If the claim <tt>rctx</tt> is present in the original Txn-Token, then it MUST be present and unchanged in the replacement Txn-Token except for the <tt>req_wl</tt> claim which MUST be updated to include the requesting workload identifier.</t>
        <section anchor="txn-token-service-responsibilities">
          <name>Txn-Token Service Responsibilities</name>
          <t>A Txn-Token Service replacing a Txn-Token must consider that modifying previously asserted values from existing Txn-Tokens can completely negate the benefits of Txn-Tokens. When issuing replacement Txn-Tokens, a Transaction Token Server therefore:</t>
          <ul spacing="normal">
            <li>
              <t>MAY enable modifications to asserted values that reduce the scope of permitted actions</t>
            </li>
            <li>
              <t>MAY enable additional asserted values</t>
            </li>
            <li>
              <t>SHOULD NOT enable modification to asserted values that expand the scope of permitted actions</t>
            </li>
          </ul>
        </section>
        <section anchor="replacement-txn-token-request">
          <name>Replacement Txn-Token Request</name>
          <t>To request a replacement Txn-Token, the requester makes a Txn-Token Request as described in <xref target="txn-token-request"/> but includes the Txn-Token to be replaced as the value of the <tt>subject_token</tt> parameter.</t>
        </section>
        <section anchor="replacement-txn-token-response">
          <name>Replacement Txn-Token Response</name>
          <t>A successful response by the Transaction Token Server to a Replacement Txn-Token Request is a Txn-Token Response as described in <xref target="txn-token-response"/></t>
        </section>
      </section>
      <section anchor="mutual-authentication-of-the-txn-token-request">
        <name>Mutual Authentication of the Txn-Token Request</name>
        <t>A Txn-Token Service MUST ensure that it authenticates any workloads requesting Txn-Tokens. In order to do so:</t>
        <ul spacing="normal">
          <li>
            <t>It MUST name a limited, pre-configured set of workloads that MAY request Txn-Tokens</t>
          </li>
          <li>
            <t>It MUST individually authenticate the requester as being one of the named requesters</t>
          </li>
          <li>
            <t>It SHOULD rely on mechanisms, such as <xref target="Spiffe"/> or some other means of performing MTLS <xref target="RFC8446"/>, to securely authenticate the requester</t>
          </li>
          <li>
            <t>It SHOULD NOT rely on insecure mechanisms, such as long-lived shared secrets to authenticate the requesters</t>
          </li>
        </ul>
        <t>The requesting workload MUST have a pre-configured location for the Transaction Token Service. It SHOULD rely on mechanisms, such as <xref target="Spiffe"/>, to securely authenticate the Transaction Token Service before making a Txn-Token Request.</t>
      </section>
    </section>
    <section anchor="using-txn-tokens">
      <name>Using Txn-Tokens</name>
      <t>Txn-Tokens need to be communicated between workloads that depend upon them to authorize the request. Such workloads will often present HTTP <xref target="RFC9110"/> interfaces for being invoked by other workloads. This section specifies the HTTP header the invoking workload MUST use to communicate the Txn-Token to the invoked workload, when the invoked workload presents an HTTP interface. Note that the standard HTTP <tt>Authorization</tt> header MUST NOT be used because that may be used by the workloads to communicate channel authorization.</t>
      <section anchor="txn-token-http-header">
        <name>Txn-Token HTTP Header</name>
        <t>A workload that invokes another workload using HTTP and needs to present a Txn-Token to the invoked workload MUST use the HTTP Header <tt>Txn-Token</tt> to communicate the Txn-Token. The value of this header MUST be the JWT that represents the Txn-Token.</t>
      </section>
    </section>
    <section anchor="Security">
      <name>Security Considerations</name>
      <section anchor="txn-token-lifetime-1">
        <name>Txn-Token Lifetime</name>
        <t>A Txn-Token is not resistant to replay attacks. A long-lived Txn-Token therefore represents a risk if it is stored in a file, discovered by an attacker, and then replayed. For this reason, a Txn-Token lifetime must be kept short, not exceeding the lifetime of a call-chain. Even for long-running "batch" jobs, a longer lived access token should be used to initiate the request to the batch endpoint. It then obtains short-lived Txn-Tokens that may be used to authorize the call to downstream services in the call-chain.</t>
        <t>Because Txn-Tokens are short-lived, the Txn-Token response from the Txn-Token service does not contain the <tt>refresh_token</tt> field. A Txn-Token cannot be issued by presenting a <tt>refresh_token</tt>.</t>
        <t>The <tt>expires_in</tt> and <tt>scope</tt> fields of the OAuth 2.0 Token Exchange specification <xref target="RFC8693"/> are also not used in Txn-Token responses. The <tt>expires_in</tt> is not required since the issued token has an <tt>exp</tt> field, which indicates the token lifetime. The <tt>scope</tt> field is omitted from the request and therefore omitted in the response.</t>
      </section>
      <section anchor="access-tokens">
        <name>Access Tokens</name>
        <t>When creating Txn-Tokens, the Txn-Token MUST NOT contain the Access Token presented to the external endpoint. If an Access Token is included in a Txn-Token, an attacker may extract the Access Token from the Txn-Token, and replay it to any Resource Server that can accept that Access Token. Txn-Token expiry does not protect against this attack since the Access Token may remain valid even after the Txn-Token has expired.</t>
      </section>
      <section anchor="client-authentication">
        <name>Client Authentication</name>
        <t>How requesting clients authenticate to the Transaction Token Service is out of scope for this specification. However, if using the <tt>actor_token</tt> and <tt>actor_token_type</tt> parameters of the OAuth 2.0 Token Exchange specification, both parameters MUST be present in the request. The <tt>actor_token</tt> MUST autenticate the identity of the requesting workload.</t>
      </section>
    </section>
    <section anchor="Privacy">
      <name>Privacy Considerations</name>
      <section anchor="obsfucation-of-personal-information">
        <name>Obsfucation of Personal Information</name>
        <t>Some <tt>rctx</tt> claims may be considered personal information in some jurisdictions
and if so their values need to be obsfucated. For example, originating IP address
(<tt>req_ip</tt>) is often considerd personal information and in that case must be
protected through some obsfucation method (e.g. SHA256).</t>
      </section>
    </section>
    <section anchor="IANA">
      <name>IANA Considerations</name>
      <t>This specification registers the following claims defined in Section <xref target="txn-token-header"/> to the OAuth Access Token Types Registry defined in <xref target="RFC6749"/>, and the following claims defined in Section <xref target="txn-token-claims"/> in the IANA JSON Web Token Claims Registry defined in <xref target="RFC7519"/></t>
      <section anchor="oauth-registry-contents">
        <name>OAuth Registry Contents</name>
        <ul spacing="normal">
          <li>
            <t>Name: <tt>txn_token</tt></t>
          </li>
          <li>
            <t>Description: JWT of type Transaction Token</t>
          </li>
          <li>
            <t>Additional Token Endpoint Response Parameters: none</t>
          </li>
          <li>
            <t>HTTP Authentication Schemes: TLS <xref target="RFC8446"/></t>
          </li>
          <li>
            <t>Change Controller: IESG</t>
          </li>
          <li>
            <t>Specification Document: Section <xref target="txn-token-header"/> of this specificaiton</t>
          </li>
        </ul>
      </section>
      <section anchor="jwt-registry-contents">
        <name>JWT Registry Contents</name>
        <ul spacing="normal">
          <li>
            <t>Claim Name: <tt>azd</tt>
            </t>
            <ul spacing="normal">
              <li>
                <t>Claim Description: The authorization context details</t>
              </li>
              <li>
                <t>Change Controller: IESG</t>
              </li>
              <li>
                <t>Specification Document: Section <xref target="txn-token-claims"/> of this specification</t>
              </li>
            </ul>
          </li>
          <li>
            <t>Claim Name: <tt>rctx</tt>
            </t>
            <ul spacing="normal">
              <li>
                <t>Claim Description: The requester context</t>
              </li>
              <li>
                <t>Change Controller: IESG</t>
              </li>
              <li>
                <t>Specification Document: Section <xref target="requester-context"/> of this specification</t>
              </li>
            </ul>
          </li>
          <li>
            <t>Claim Name: <tt>purp</tt>
            </t>
            <ul spacing="normal">
              <li>
                <t>Claim Description: The purpose of the transaction</t>
              </li>
              <li>
                <t>Change Controller: IESG</t>
              </li>
              <li>
                <t>Specification Document: Section <xref target="txn-token-claims"/> of this specification</t>
              </li>
            </ul>
          </li>
        </ul>
      </section>
    </section>
  </middle>
  <back>
    <references>
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <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="RFC8446">
          <front>
            <title>The Transport Layer Security (TLS) Protocol Version 1.3</title>
            <author fullname="E. Rescorla" initials="E." surname="Rescorla"/>
            <date month="August" year="2018"/>
            <abstract>
              <t>This document specifies version 1.3 of the Transport Layer Security (TLS) protocol. TLS allows client/server applications to communicate over the Internet in a way that is designed to prevent eavesdropping, tampering, and message forgery.</t>
              <t>This document updates RFCs 5705 and 6066, and obsoletes RFCs 5077, 5246, and 6961. This document also specifies new requirements for TLS 1.2 implementations.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8446"/>
          <seriesInfo name="DOI" value="10.17487/RFC8446"/>
        </reference>
        <reference anchor="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="RFC7519">
          <front>
            <title>JSON Web Token (JWT)</title>
            <author fullname="M. Jones" initials="M." surname="Jones"/>
            <author fullname="J. Bradley" initials="J." surname="Bradley"/>
            <author fullname="N. Sakimura" initials="N." surname="Sakimura"/>
            <date month="May" year="2015"/>
            <abstract>
              <t>JSON Web Token (JWT) is a compact, URL-safe means of representing claims to be transferred between two parties. The claims in a JWT are encoded as a JSON object that is used as the payload of a JSON Web Signature (JWS) structure or as the plaintext of a JSON Web Encryption (JWE) structure, enabling the claims to be digitally signed or integrity protected with a Message Authentication Code (MAC) and/or encrypted.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7519"/>
          <seriesInfo name="DOI" value="10.17487/RFC7519"/>
        </reference>
        <reference anchor="RFC7515">
          <front>
            <title>JSON Web Signature (JWS)</title>
            <author fullname="M. Jones" initials="M." surname="Jones"/>
            <author fullname="J. Bradley" initials="J." surname="Bradley"/>
            <author fullname="N. Sakimura" initials="N." surname="Sakimura"/>
            <date month="May" year="2015"/>
            <abstract>
              <t>JSON Web Signature (JWS) represents content secured with digital signatures or Message Authentication Codes (MACs) using JSON-based data structures. Cryptographic algorithms and identifiers for use with this specification are described in the separate JSON Web Algorithms (JWA) specification and an IANA registry defined by that specification. Related encryption capabilities are described in the separate JSON Web Encryption (JWE) specification.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7515"/>
          <seriesInfo name="DOI" value="10.17487/RFC7515"/>
        </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>
        <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="RFC8417">
          <front>
            <title>Security Event Token (SET)</title>
            <author fullname="P. Hunt" initials="P." role="editor" surname="Hunt"/>
            <author fullname="M. Jones" initials="M." surname="Jones"/>
            <author fullname="W. Denniss" initials="W." surname="Denniss"/>
            <author fullname="M. Ansari" initials="M." surname="Ansari"/>
            <date month="July" year="2018"/>
            <abstract>
              <t>This specification defines the Security Event Token (SET) data structure. A SET describes statements of fact from the perspective of an issuer about a subject. These statements of fact represent an event that occurred directly to or about a security subject, for example, a statement about the issuance or revocation of a token on behalf of a subject. This specification is intended to enable representing security- and identity-related events. A SET is a JSON Web Token (JWT), which can be optionally signed and/or encrypted. SETs can be distributed via protocols such as HTTP.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8417"/>
          <seriesInfo name="DOI" value="10.17487/RFC8417"/>
        </reference>
        <reference anchor="RFC9110">
          <front>
            <title>HTTP Semantics</title>
            <author fullname="R. Fielding" initials="R." role="editor" surname="Fielding"/>
            <author fullname="M. Nottingham" initials="M." role="editor" surname="Nottingham"/>
            <author fullname="J. Reschke" initials="J." role="editor" surname="Reschke"/>
            <date month="June" year="2022"/>
            <abstract>
              <t>The Hypertext Transfer Protocol (HTTP) is a stateless application-level protocol for distributed, collaborative, hypertext information systems. This document describes the overall architecture of HTTP, establishes common terminology, and defines aspects of the protocol that are shared by all versions. In this definition are core protocol elements, extensibility mechanisms, and the "http" and "https" Uniform Resource Identifier (URI) schemes.</t>
              <t>This document updates RFC 3864 and obsoletes RFCs 2818, 7231, 7232, 7233, 7235, 7538, 7615, 7694, and portions of 7230.</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="97"/>
          <seriesInfo name="RFC" value="9110"/>
          <seriesInfo name="DOI" value="10.17487/RFC9110"/>
        </reference>
        <reference anchor="OpenIdConnect" target="https://openid.net/specs/openid-connect-core-1_0.html">
          <front>
            <title>OpenID Connect Core 1.0 incorporating errata set 1</title>
            <author initials="N." surname="Sakimura" fullname="Nat Sakimura">
              <organization>NRI</organization>
            </author>
            <author initials="J." surname="Bradley" fullname="John Bradley">
              <organization>Ping Identity</organization>
            </author>
            <author initials="M." surname="Jones" fullname="Mike Jones">
              <organization>Microsoft</organization>
            </author>
            <author initials="B. de" surname="Medeiros" fullname="B. de Medeiros">
              <organization>Google</organization>
            </author>
            <author initials="C." surname="Mortimore" fullname="Chuck Mortimore">
              <organization>Salesforce</organization>
            </author>
            <date year="2014" month="November"/>
          </front>
        </reference>
      </references>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <reference anchor="Spiffe" target="https://spiffe.io/docs/latest/spiffe-about/overview/">
          <front>
            <title>Secure Production Identity Framework for Everyone</title>
            <author>
              <organization>Cloud Native Computing Foundation</organization>
            </author>
            <date>n.d.</date>
          </front>
        </reference>
      </references>
    </references>
    <?line 566?>

<section numbered="false" anchor="Acknowledgements">
      <name>Acknowledgements</name>
    </section>
    <section anchor="contributors" numbered="false" toc="include" removeInRFC="false">
      <name>Contributors</name>
      <contact initials="K." surname="Burgin" fullname="Dr. Kelley W. Burgin, PhD.">
        <organization>MITRE Corporation</organization>
        <address>
          <email>kburgin@mitre.org</email>
        </address>
      </contact>
      <contact initials="B." surname="Campbell" fullname="Brian Campbell">
        <organization>Ping Identity</organization>
        <address>
          <email>bcampbell@pingidentity.com</email>
        </address>
      </contact>
      <contact initials="E." surname="Gilman" fullname="Evan Gilman">
        <organization>SPIRL</organization>
        <address>
          <email>evan@spirl.com</email>
        </address>
      </contact>
      <contact initials="K." surname="Lehmann" fullname="Kai Lehmann">
        <organization>1&amp;1 Mail &amp; Media Development &amp; Technology GmbH</organization>
        <address>
          <email>kai.lehmann@1und1.de</email>
        </address>
      </contact>
      <contact initials="A." surname="Schwenkschuster" fullname="Arndt Schwenkschuster">
        <organization>Microsoft</organization>
        <address>
          <email>arndts@microsoft.com</email>
        </address>
      </contact>
      <contact initials="H." surname="Tschofenig" fullname="Hannes Tschofenig">
        <organization>Arm Ltd.</organization>
        <address>
          <email>Hannes.Tschofenig@arm.com</email>
        </address>
      </contact>
    </section>
  </back>
  <!-- ##markdown-source:
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
FBN/5lqn32zNwN6k3BH8+X8HQmnI8IUAAA==

-->

</rfc>
