<?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.24 (Ruby 2.6.10) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-oauth-transaction-tokens-06" category="info" submissionType="IETF" xml:lang="en" version="3">
  <!-- xml2rfc v2v3 conversion 3.28.0 -->
  <front>
    <title abbrev="Txn-Tokens">Transaction Tokens</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-oauth-transaction-tokens-06"/>
    <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>Practical Identity LLC</organization>
      <address>
        <email>george@practicalidentity.com</email>
      </address>
    </author>
    <author initials="P." surname="Kasselman" fullname="Pieter Kasselman">
      <organization>SPIRL</organization>
      <address>
        <email>pieter@spirl.com</email>
      </address>
    </author>
    <date year="2025" month="July" day="28"/>
    <area>sec</area>
    <workgroup>oauth</workgroup>
    <keyword>Microservices</keyword>
    <keyword>OAuth</keyword>
    <keyword>JWT</keyword>
    <keyword>token exchange</keyword>
    <abstract>
      <?line 124?>
<t>Transaction Tokens (Txn-Tokens) are designed to maintain and propagate user identity and authorization context across workloads within a trusted domain during the processing of external programmatic requests, such as API calls. They ensure that this context is preserved throughout the call chain, even when new transactions are initiated internally, thereby enhancing security and consistency in complex, multi-service architectures.</t>
    </abstract>
    <note removeInRFC="true">
      <name>About This Document</name>
      <t>
        The latest revision of this draft can be found at <eref target="https://drafts.oauth.net/oauth-transaction-tokens/draft-ietf-oauth-transaction-tokens.html"/>.
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-ietf-oauth-transaction-tokens/"/>.
      </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 126?>

<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 explicit transaction invocation (external or internal) 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 unauthorized 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 transaction invocation. Note that while many transactions are initiated via an external event (e.g. internet facing API invocation) other transactions are initiated from within the trusted domain. Transaction tokens apply to both externally triggered and internally invoked transactions and ensure that the user's identity or a workload that made the 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 intentionally invoked transaction.</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 chain 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. 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. The context information provided to the Txn-Token Service MAY include:</t>
          <ul spacing="normal">
            <li>
              <t>The external authorization token (e.g., the OAuth access token)</t>
            </li>
            <li>
              <t>An internally generated JWT representing the subject of the request</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 on their own.</t>
          <t>If the requesting service does not have an inbound token that it can use in its request to the Txn-Token Service, it generates a self-signed JWT and passes that in the request in place of the external authorization token.</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 be careful about the types of replacement requests it supports to avoid undermining 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. Except in the case where the request is made using a self-signed JWT, 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 Service MUST NOT issue a Txn-Token if the expiration time has passed. The lifetime of the Txn-Token itself MAY exceed the expiration time of the presented token. The expectation is that since Txn-Tokens are short lived and are authorizing a specific transaction, extending beyond the lifetime of the presented expiration time is not a security risk. If a long-running process such as a 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.</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 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 v   │ 6
          +--------------+
          │              │
          │   Internal   │
          │ Microservice │
          │              │
          +--------------+
               │   ^
               v   │
                 o
             5   o    6
                 o
               │   ^
               v   │
          +--------------+
          │              │
          │   Internal   │
          │ Microservice │
          │              │
          +--------------+
]]></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 v   │ 9               │              │
          +--------------+           │              │
          │              │           │              │
          │   Internal   │           │              │
          │ Microservice │           │              │
          │              │           │              │
          +--------------+           │  Txn-Token   │
               │   ^                 │   Service    │
               v   │                 │              │
                 o                   │              │
             5   o    9              │              │
               │ o ^                 │              │
               │   │                 │              │
               v   │                 │              │
          +--------------+    6      │              │
          │              │---------->│              │
          │   Internal   │           │              │
          │ Microservice │    7      │              │
          │              │<----------│              │
          +--------------+           │              │
               │   ^                 │              │
               v   │                 +--------------+
                 o
             8   o    9
                 o
               │   ^
               v   │
          +--------------+
          │              │
          │   Internal   │
          │ Microservice │
          │              │
          +--------------+
]]></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 collection of systems, applications, or workloads that share a common security policy. In practice this may include a virtually or physically separated network, which contains two or more workloads. The workloads within a Trust Domain may be invoked only through published interfaces.</t>
        </dd>
        <dt>External Endpoint:</dt>
        <dd>
          <t>A published interface to a 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 with a short lifetime, providing immutable information about the user or workload, certain parameters of the call, and specific contextual attributes of the call. The Txn-Token is used to authorize subsequent calls in the call chain.</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 that issues Txn-Tokens to requesting workloads. Each Trust Domain using Txn-Tokens MUST have exactly one logical 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> Header Parameter MUST be present and MUST have the value <tt>txntoken+jwt</tt>.</t>
          </li>
          <li>
            <t>Key rotation of the signing key SHOULD be supported through the use of a <tt>kid</tt> Header Parameter.</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": "txntoken+jwt",
    "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"/>, identifies the Trust Domain in which the Txn-Token is valid.  This identifier MUST uniquely identify the Trust Domain to prevent the Txn-Token from being accepted outside it's current Trust Domain.</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"/>.</t>
          </dd>
          <dt><tt>sub</tt>:</dt>
          <dd>
            <t>REQUIRED A unique identifier for the subject within the context of 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>tctx</tt>:</dt>
          <dd>
            <t>OPTIONAL A JSON object that contains 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="purp-claim">
          <name>Purpose claim</name>
          <t>The <tt>purp</tt> claim captures the exact purpose of this particular transaction. This is often much narrower than a scope value issued to an external client. This is due to the fact that in most cases, the authorization model within the Trust Domain is quite different than the authorization model used with clients external to the Trust Domain. To that end, it is intentional to separate the concept of scope (often fairly coarse-grained) used with external clients from the purpose of the transaction used within the Trust Domain. How a given deployment represents the authorization model within the Trust Domain is out of scope for this specification.</t>
        </section>
        <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 identify 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>
        <section anchor="transaction-context">
          <name>Transaction Context</name>
          <t>The Txn-Token SHOULD contain an <tt>tctx</tt> claim. The value of this claim is a JSON object that contains name/value pairs (wherein the value could itself be an object), which together assert the details that remain immutable through the call-chain where this Txn-Token is used.</t>
          <t>Txn-Tokens are primarily used to assure identity and context for a transaction, and the content of this field is a critical part of that context.</t>
          <t>Whereas the <tt>rctx</tt> field contains environmental values related to the request, the <tt>tctx</tt> field contains the actual authorizaton details that are determined by the TTS. These values are used by services using the Txn-Token to reliably obtain specific parameters needed to perform their work. The content of the <tt>tctx</tt> field is determined by the Txn-Token Service and they may be computed internally or from parameters it receives from the service that requests the Txn-Token.</t>
          <t>The following is a non-normative example of an <tt>tctx</tt> claim:</t>
          <sourcecode type="json"><![CDATA[
"tctx": {
  "action": "BUY", // parameter of external call
  "ticker": "MSFT", // parameter of external call
  "quantity": "100", // parameter of external call
  "customer_type": { // computed value not present in external call
    "geo": "US",
    "level": "VIP"
  }
}
]]></sourcecode>
          <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 represented 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": 1686536226,
  "aud": "trust-domain.example",
  "exp": 1686536586,
  "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",
  "tctx": {
    "action": "BUY", // parameter of external call
    "ticker": "MSFT", // parameter of external call
    "quantity": "100", // parameter of external call
    "customer_type": { // computed value not present in external call
      "geo": "US",
      "level": "VIP"
    }
  }
}
]]></sourcecode>
          </figure>
        </section>
      </section>
    </section>
    <section anchor="txn-token-service">
      <name>Txn-Token Service</name>
      <t>A Txn-Token Service implements 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 that uses Txn-Tokens 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:ietf: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:</t>
        <ul spacing="normal">
          <li>
            <t><tt>grant_type</tt> REQUIRED. The value MUST be set to <tt>urn:ietf:params:oauth:grant-type:token-exchange</tt>.</t>
          </li>
          <li>
            <t><tt>audience</tt> REQUIRED. The value MUST be set to the Trust Domain name.</t>
          </li>
          <li>
            <t><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.</t>
          </li>
          <li>
            <t><tt>requested_token_type</tt> REQUIRED. The value MUST be <tt>urn:ietf:params:oauth:token-type:txn_token</tt></t>
          </li>
          <li>
            <t><tt>subject_token</tt> REQUIRED. The value MUST represent the subject of the transaction. This MAY be:
            </t>
            <ul spacing="normal">
              <li>
                <t>An inbound token received by an API Gateway</t>
              </li>
              <li>
                <t>A self-signed JWT constructed by a workload initiating a transaction</t>
              </li>
              <li>
                <t>An unsigned JSON object constructed by a workload initiating a transaction</t>
              </li>
              <li>
                <t>Any other format that is understood by the Txn-Token Service</t>
              </li>
            </ul>
            <t>
The type of the <tt>subject_token</tt> field is identified by <tt>subject_token_type</tt>.</t>
          </li>
          <li>
            <t><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>
          </li>
        </ul>
        <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. The Transaction Token Service uses this information to construct the <tt>tctx</tt> claim.</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>The figure below <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="subject-token-types">
        <name>Subject Token Types</name>
        <t>The <tt>subject_token_type</tt> parameter value MUST be a URI <xref target="RFC3986"/>. It MAY be:</t>
        <ul spacing="normal">
          <li>
            <t>Any one of the subject token types described in Section 3 of OAuth 2.0 Token Exchange <xref target="RFC8693"/> except the Refresh Token type (i.e., <tt>urn:ietf:params:oauth:token-type:refresh_token</tt>).</t>
          </li>
          <li>
            <t>A URN type name when the subject token is a self-signed JWT, as described below.</t>
          </li>
          <li>
            <t>A URN type name when the subject token is an unsigned JSON object, as described below.</t>
          </li>
          <li>
            <t>A custom URN agreed to between requesters and the Txn-Token Service. The Txn-Token Service MAY support other token formats, which MAY be specified in the <tt>subject_token_type</tt> parameter.</t>
          </li>
        </ul>
        <section anchor="self-signed-subject-token-type">
          <name>Self-Signed Subject Token Type</name>
          <t>A requester MAY use a self-signed JWT as a <tt>subject_token</tt> value. In that case, the requester MUST set the <tt>subject_token_type</tt> value to: <tt>urn:ietf:params:oauth:token-type:self_signed</tt>. This self-signed JWT MUST contain the following claims:</t>
          <ul spacing="normal">
            <li>
              <t><tt>iss</tt>: The unique identifier of the requesting workload. The Txn-Token Service SHALL use this value in determining the <tt>req_wl</tt> value in the Txn-Token issued in response to this request.</t>
            </li>
            <li>
              <t><tt>sub</tt>: The subject for whom the Txn-Token is being requested. The Txn-Token Service SHALL use this value in determining the <tt>sub</tt> value in the Txn-Token issued in the response to this request.</t>
            </li>
            <li>
              <t><tt>aud</tt>: The unique identifier of the Txn-Token Service. The Txn-Token Service SHALL verify that this value matches its own unique identifier.</t>
            </li>
            <li>
              <t><tt>iat</tt>: The time at which the self-signed JWT was created. Note that the Txn-Token Service may reject self-signed tokens with an <tt>iat</tt> value that is unreasonably far in the past or future.</t>
            </li>
            <li>
              <t><tt>exp</tt>: The expiration time for the JWT. This should be a very short duration (order of seconds) in order to prevent any abuse of the JWT.</t>
            </li>
          </ul>
          <t>The self-signed JWT MAY contain other claims.</t>
        </section>
        <section anchor="unsigned-json-subject-token-type">
          <name>Unsigned JSON Object Subject Token Type</name>
          <t>A requester MAY use an unsigned JSON object as a <tt>subject_token</tt> value. In that case, the requester MUST set the <tt>subject_token_type</tt> value to: <tt>urn:ietf:params:oauth:token-type:unsigned_json</tt>. The value of the <tt>subject_token</tt> field MUST be the BASE64URL encoded value of the JSON object as described in <xref section="5" sectionFormat="of" target="RFC6848"/>.  The JSON object in the subject token MUST contain the following fields:</t>
          <ul spacing="normal">
            <li>
              <t><tt>sub</tt>: The subject for whom the Txn-Token is being requested. The Txn-Token Service SHALL use this value in determining the <tt>sub</tt> value in the Txn-Token issued in the response to this request.</t>
            </li>
            <li>
              <t><tt>exp</tt>: The expiration time of the unsigned JSON object, which the TTS MAY use as input to determine the lifetime of the Txn-token.</t>
            </li>
          </ul>
          <t>The unsigned JSON object MAY contain other fields, and the Txn-Token Service MAY consider them when generating the Txn-Token.</t>
        </section>
      </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.</t>
        <t>The Transaction Token Service MUST set the <tt>aud</tt> claim to an identifier representing the 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.</t>
        <t>The Transaction Token Service MUST set the <tt>exp</tt> claim to the expiry time of the Txn-Token. The Txn-Token Service MAY consider any <tt>exp</tt> value present in the <tt>subject_token</tt> parameter of the Txn-Token Request in determining the <tt>exp</tt> value of the resulting Txn-Token.</t>
        <t>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 omitted 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>tctx</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 values defined in <xref target="RFC8693"/> MUST be included in the 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:ietf:params:oauth:token-type:txn_token</tt></t>
          </li>
        </ul>
        <t>The Txn-Token Response MUST NOT include the values <tt>expires_in</tt>, <tt>refresh_token</tt> and <tt>scope</tt></t>
        <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-store

{
  "token_type": "N_A",
  "issued_token_type": "urn:ietf: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 Service 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>When issuing replacement Txn-Tokens, a Txn-Token Service:</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>MUST NOT enable modification to asserted values that expand the scope of permitted actions</t>
            </li>
            <li>
              <t>MUST NOT modify <tt>sub</tt> and <tt>aud</tt> values of the Txn-Token in the request</t>
            </li>
            <li>
              <t>MUST NOT remove any of the existing requesting workload identifiers from the <tt>req_wl</tt> field in the <tt>rctx</tt> claim of the Txn-Token</t>
            </li>
            <li>
              <t>MUST NOT issue replacement Txn-token with lifetime exceeding the lifetime of the originally presented token</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 and sets the <tt>subject_token_type</tt> parameter to the value <tt>urn:ietf:params:oauth:token-type:txn_token</tt>. The <tt>scope</tt> value in the replacement request, if different from that in the original Txn-Token, MUST NOT increase the authorization surface beyond that of the original Txn-Token.</t>
        </section>
        <section anchor="replacement-txn-token-response">
          <name>Replacement Txn-Token Response</name>
          <t>A successful response by the Txn-Token Service 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 workload and Transaction Token Service MUST perform mutual authentication.</t>
        <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 maintain a limited, pre-configured set of authorized workloads that MAY request Txn-Tokens.</t>
          </li>
          <li>
            <t>It MUST authenticate the requesting workload and confirm that it is included in the list of workloads authorized to request a transaction token.</t>
          </li>
          <li>
            <t>It SHOULD accept workload credentials such as JWTs or X.509 certificates which MAY be provisioned using mechanisms such as <xref target="SPIFFE"/> or other provisioning protocols.</t>
          </li>
          <li>
            <t>It SHOULD use X.509 credentials in conjunction with MTLS <xref target="RFC8446"/>, or a JWT protected by TLS at the transport layer, to securely authenticate the requesting workload.</t>
          </li>
          <li>
            <t>It SHOULD NOT rely on insecure mechanisms, such as long-lived shared secrets to authenticate the requesting workloads.</t>
          </li>
        </ul>
        <t>The requesting workload MUST ensure that it authenticates the Transaction Token Service. In order to do so:</t>
        <ul spacing="normal">
          <li>
            <t>It MUST have a pre-configured location for the Transaction Token Service.</t>
          </li>
          <li>
            <t>It SHOULD accept Transaction Token Service credentials such as JWTs or X.509 certificates which MAY be provisioned using mechanisms such as <xref target="SPIFFE"/> or other provisioning protocols.</t>
          </li>
          <li>
            <t>It SHOULD use X.509 credentials in conjunction with MTLS <xref target="RFC8446"/>, or a JWT protected by TLS at the transport layer, to securely authenticate the Transaction Token Service.</t>
          </li>
          <li>
            <t>It SHOULD NOT rely on insecure mechanisms, such as long-lived shared secrets to authenticate the Transaction Token Service.</t>
          </li>
        </ul>
      </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 response in favor of the <tt>purp</tt> claim in the Txn-Token.</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="sec-sub-token-types">
        <name>Subject Token Types</name>
        <t>A service requesting a Txn-Token SHOULD provide an incoming token if it has one that it used itself to authorize a caller, and if it directly correlates with the downstream call chain it needs the Txn-Token for. In the absence of an appropriate incoming token, the requesting service MAY use a self-signed JWT, an unsigned JSON object or any other format to represent the details of the requester to the Txn-Token service.</t>
      </section>
      <section anchor="client-authentication">
        <name>Client Authentication</name>
        <t>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 authenticate the identity of the requesting workload.</t>
      </section>
      <section anchor="replacement-tokens">
        <name>Replacement Tokens</name>
        <t>Validation of a replacement Txn-Token, as well as any Txn-Token, is critical to the security of the entire transaction invocation sequence. Only Txn-Tokens issued by a trusted Transaction Token Service may be trusted, so verification of the Txn-Token signature is required. For replacement transaction tokens, not only must the JWT signature be verified but also the workload identity of the workload requesting the replacement Txn-Token.</t>
      </section>
      <section anchor="scope-and-purpose-processing">
        <name>Scope and Purpose processing</name>
        <t>The authorization model within a Trust Domain boundary is most often quite different from the authorization model (e.g. OAuth scopes) used with clients external to the Trust Domain. This makes managing unintentional scope increase a critical aspect of the Transaction Token Service. The TTS MUST ensure that the requested purpose (<tt>scope</tt>) of the Txn-Token is equal or less than the scope(s) identified in the <tt>subject_token</tt>. This is also true of requesting a replacement Txn-Token. The TTS MUST ensure there is no unintentional increase in authorization scope.</t>
      </section>
      <section anchor="identifying-call-chains">
        <name>Identifying Call Chains</name>
        <t>A Txn-token typically represents the call-chain of workloads necessary to complete a logical function initiated by an external or internal workload. The <tt>txn</tt> claim in the Txn-token provides a unique identifier that when logged by the TTS and each subsequent workload can provide both discovery and auditability of successful and failed transactions. It is therefore strongly RECOMMENDED to use an identifier, unique within the Trust Domain, for the <tt>txn</tt> value.</t>
      </section>
      <section anchor="transaction-token-service-discovery">
        <name>Transaction Token Service Discovery</name>
        <t>A workload may use various mechanisms to determine which Transaction Token Service to interact with. Workloads MUST retrieve configuration information from a trusted source to minimize the risk of a threat actor providing malicious configuration data that points to a Transaction Token Service under it's control. Such a service could be used to collect Access Tokens sent as part of the Transaction Token Request message.</t>
        <t>To mitigate this risk, workloads SHOULD authenticate the service providing the configuration information and verify the integrity of the configuration information. This ensures that no unauthorized entity can insert or alter configuration data. The workload SHOULD use Transport Layer Security (TLS) to authenticate the endpoint and secure the communication channel. Additionally, application-layer signatures or message authentication codes MAY be used to detect any tampering with the configuration information.</t>
      </section>
      <section anchor="workload-configuration-protection">
        <name>Workload Configuration Protection</name>
        <t>A workload may be configured to access more than one instance of a Transaction Token Service to ensure redundancy or reduce latency for transaction token requests. The workload configuration should be protected against unauthorized addition or removal of Transaction Token Service instances. An attacker may perform a denial of service attack or degrade the performance of a system by removing an instance of a Transaction Token Service from the workload configuration.</t>
      </section>
      <section anchor="transaction-token-service-authentication">
        <name>Transaction Token Service Authentication</name>
        <t>A workload may accidently send a transaction token request to a service that is not a Transaction Token Service, or an attacker may attempt to impersonate a Transaction Token Service in order to gain access to transaction token requests which includes sensitive information like access tokens. To minimise the risk of leaking sensitive information like access tokens that are included in the transaction token request, the workload must ensure that it authenticates the Transaction Token Service and only contact instances of the Transaction Token Service that is authorized to issue transaction tokens.</t>
      </section>
      <section anchor="transaction-token-service-key-rotation">
        <name>Transaction Token Service Key Rotation</name>
        <t>The Transaction Token Service may need to rotate signing keys. When doing so, it MAY adopt the key rotation practices in Section 10.1.1 of <xref target="OpenIdConnect"/>.</t>
      </section>
      <section anchor="transaction-tokens-are-not-authentication-credentials">
        <name>Transaction Tokens Are Not Authentication Credentials</name>
        <t>A workload MUST NOT use a transaction token to authenticate itself to another workload, service or the transaction token service. Transaction tokens represents information relevant to authorization decisions and are not workload identity credentials. Authentication between the workload and the transaction token service is described in [Mutual Authentication of the Txn-Token Request]{Mutual-Authentication-of-the-Txn-Token-Request}. The mechanisms used by workloads to authenticate to other workloads, services or system components is out of scope of this speicification.</t>
      </section>
    </section>
    <section anchor="Privacy">
      <name>Privacy Considerations</name>
      <section anchor="obfuscation-of-personal-information">
        <name>Obfuscation of Personal Information</name>
        <t>Some <tt>rctx</tt> and <tt>tctx</tt> claims may be considered personal information in some jurisdictions
and if so their values need to be obfuscated. For example, originating IP address
(<tt>req_ip</tt>) is often considered personal information and in that case must be
protected through some obfuscation method (e.g. salted SHA256).</t>
      </section>
      <section anchor="logging">
        <name>Logging</name>
        <t>Complete Txn-Tokens must not be logged verbatim. This is in order to prevent replay of tokens or leakage of PII or other sensitive information via log files. A hash of the Txn-Token may be logged to allow for correlation with the log files of the Txn-Token Service that records issued tokens. Alternatively the JWS payload of a Txn-Token may be logged after the signature has been removed. If the Txn-Token contains PII, then care should be taken in logging the content of the Txn-Token so that the PII does not get logged.</t>
      </section>
    </section>
    <section anchor="IANA">
      <name>IANA Considerations</name>
      <t>This specification registers the following token type identifiers to the "OAuth URI" subregistry of the "OAuth Parameters" <xref target="IANA.OAuth.Parameters"/> registry. It also registers the following claims defined in Section <xref target="txn-token-claims"/> in the IANA JSON Web Token Claims Registry defined in <xref target="RFC7519"/>. It also registers the Media Type <xref target="IANA.MediaTypes"/> "txntoken+jwt" as defined in the section <xref target="txn-token-header"/>.</t>
      <section anchor="oauth-uri-subregistry-contents">
        <name>OAuth URI Subregistry Contents</name>
        <ul spacing="normal">
          <li>
            <t>URN: urn:ietf:params:oauth:token-type:txn_token
            </t>
            <ul spacing="normal">
              <li>
                <t>Common Name: Transaction Token</t>
              </li>
              <li>
                <t>Change Controller: IETF</t>
              </li>
              <li>
                <t>Specification Document Section <xref target="txn-token-request"/> of this specification</t>
              </li>
            </ul>
          </li>
          <li>
            <t>URN: urn:ietf:params:oauth:token-type:self_signed
            </t>
            <ul spacing="normal">
              <li>
                <t>Common Name: Token type for Self-signed JWT</t>
              </li>
              <li>
                <t>Change Controller: IETF</t>
              </li>
              <li>
                <t>Specification Document: Section <xref target="self-signed-subject-token-type"/> of this specification</t>
              </li>
            </ul>
          </li>
          <li>
            <t>URN: urn:ietf:params:oauth:token-type:unsigned_json
            </t>
            <ul spacing="normal">
              <li>
                <t>Common Name: Token type for Unsigned JSON Object</t>
              </li>
              <li>
                <t>Change Controller: IETF</t>
              </li>
              <li>
                <t>Specification Document: Section <xref target="unsigned-json-subject-token-type"/> of this specification</t>
              </li>
            </ul>
          </li>
        </ul>
      </section>
      <section anchor="jwt-claims-registry-contents">
        <name>JWT Claims Registry Contents</name>
        <ul spacing="normal">
          <li>
            <t>Claim Name: <tt>tctx</tt>
            </t>
            <ul spacing="normal">
              <li>
                <t>Claim Description: The transaction authorization details</t>
              </li>
              <li>
                <t>Change Controller: IETF</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: IETF</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: IETF</t>
              </li>
              <li>
                <t>Specification Document: Section <xref target="txn-token-claims"/> of this specification</t>
              </li>
            </ul>
          </li>
        </ul>
      </section>
      <section anchor="iana-media-type-registration-contents">
        <name>IANA Media Type Registration Contents</name>
        <t>The following entry will be proposed using the IANA Media Type registration <xref target="IANA.MediaTypes"/> form.</t>
        <ul spacing="normal">
          <li>
            <t>Type Name: application</t>
          </li>
          <li>
            <t>Subtype Name: txntoken+jwt</t>
          </li>
          <li>
            <t>Change Controller: IETF</t>
          </li>
          <li>
            <t>Required Parameters: N/A.</t>
          </li>
          <li>
            <t>Optional Parameters: N/A.</t>
          </li>
          <li>
            <t>Encoding Considerations: 7-bit text</t>
          </li>
          <li>
            <t>Security Considerations:
            </t>
            <ol spacing="normal" type="1"><li>
                <t>The media type is used to identify JWTs that may be used as Transaction Tokens. It is a piece of data, and may not contain executable content.</t>
              </li>
              <li>
                <t>Transaction Tokens are short-lived tokens used within a trusted environment, so there are no privacy considerations. Transaction Tokens are unmodifiable tokens, which need integrity protection.</t>
              </li>
              <li>
                <t>The JWTs representing Transaction Tokens are signed, and therefore are integrity protected. A recipient of a Transaction Token must verify the signature on the Transaction Token before using it.</t>
              </li>
              <li>
                <t>There are no additional security considerations specific to the use of JWTs as Transaction Tokens</t>
              </li>
              <li>
                <t>The Transaction Tokens format does not require the use of links within the token. If links are used by specific instances of Transaction Tokens, then their interpretation is usage specific</t>
              </li>
            </ol>
          </li>
          <li>
            <t>Interoperability Considerations: Transaction Tokens inherit all interoperability properties of JWTs.</t>
          </li>
          <li>
            <t>Published Specification: this document (when published)</t>
          </li>
          <li>
            <t>Application Usage: Any application supporting the use of JWTs</t>
          </li>
          <li>
            <t>Fragment Identifier Consideration: N/A.</t>
          </li>
          <li>
            <t>Restrictions on Usage: Any application supporting the use of JWTs</t>
          </li>
          <li>
            <t>Intended Usage: Common</t>
          </li>
          <li>
            <t>Contact Person: Atul Tulshibagwale</t>
          </li>
        </ul>
      </section>
      <section anchor="http-header">
        <name>HTTP Header</name>
        <t>The header name <tt>Txn-Token</tt> is proposed to be added to the HTTP Field Name Registry <xref target="IANA.HTTP.FieldNames"/> as an unstructured Header Field. This header is defined in the section <xref target="txn-token-http-header"/>. The following entry will be proposed in the HTTP Field Name Registry. Note that this is an unstructured field, therefore the value of the Type field is left empty:</t>
        <ul spacing="normal">
          <li>
            <t>Field Name: Txn-Token</t>
          </li>
          <li>
            <t>Type:</t>
          </li>
          <li>
            <t>Status: permanent</t>
          </li>
          <li>
            <t>Specification Document: Section <xref target="txn-token-http-header"/> of this document</t>
          </li>
          <li>
            <t>Comment: The <tt>Authorization</tt> header cannot be used for Txn-tokens because that may be used for service-to-service authorization, and the services may simultaneously require the use of Txn-tokens to convey detailed immutable information such as user identity and details of fine-grained authorization that are included in the Txn-token.</t>
          </li>
        </ul>
      </section>
    </section>
  </middle>
  <back>
    <references anchor="sec-combined-references">
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <reference anchor="RFC2119" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.2119.xml">
          <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="RFC3986" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.3986.xml">
          <front>
            <title>Uniform Resource Identifier (URI): Generic Syntax</title>
            <author fullname="T. Berners-Lee" initials="T." surname="Berners-Lee"/>
            <author fullname="R. Fielding" initials="R." surname="Fielding"/>
            <author fullname="L. Masinter" initials="L." surname="Masinter"/>
            <date month="January" year="2005"/>
            <abstract>
              <t>A Uniform Resource Identifier (URI) is a compact sequence of characters that identifies an abstract or physical resource. This specification defines the generic URI syntax and a process for resolving URI references that might be in relative form, along with guidelines and security considerations for the use of URIs on the Internet. The URI syntax defines a grammar that is a superset of all valid URIs, allowing an implementation to parse the common components of a URI reference without knowing the scheme-specific requirements of every possible identifier. This specification does not define a generative grammar for URIs; that task is performed by the individual specifications of each URI scheme. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="66"/>
          <seriesInfo name="RFC" value="3986"/>
          <seriesInfo name="DOI" value="10.17487/RFC3986"/>
        </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" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.6749.xml">
          <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="RFC6848">
          <front>
            <title>Specifying Civic Address Extensions in the Presence Information Data Format Location Object (PIDF-LO)</title>
            <author fullname="J. Winterbottom" initials="J." surname="Winterbottom"/>
            <author fullname="M. Thomson" initials="M." surname="Thomson"/>
            <author fullname="R. Barnes" initials="R." surname="Barnes"/>
            <author fullname="B. Rosen" initials="B." surname="Rosen"/>
            <author fullname="R. George" initials="R." surname="George"/>
            <date month="January" year="2013"/>
            <abstract>
              <t>New fields are occasionally added to civic addresses. A backward- compatible mechanism for adding civic address elements to the Geopriv civic address format is described. A formal mechanism for handling unsupported extensions when translating between XML and DHCP civic address forms is defined for entities that need to perform this translation. Initial extensions for some new elements are also defined. The Location-to-Service Translation (LoST) protocol mechanism (defined in RFC 5222) that returns civic address element names used for validation of location information is clarified and is normatively updated to require a qualifying namespace identifier on each civic address element returned as part of the validation process. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6848"/>
          <seriesInfo name="DOI" value="10.17487/RFC6848"/>
        </reference>
        <reference anchor="RFC7519" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.7519.xml">
          <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" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8174.xml">
          <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" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8417.xml">
          <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="RFC9068">
          <front>
            <title>JSON Web Token (JWT) Profile for OAuth 2.0 Access Tokens</title>
            <author fullname="V. Bertocci" initials="V." surname="Bertocci"/>
            <date month="October" year="2021"/>
            <abstract>
              <t>This specification defines a profile for issuing OAuth 2.0 access tokens in JSON Web Token (JWT) format. Authorization servers and resource servers from different vendors can leverage this profile to issue and consume access tokens in an interoperable manner.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9068"/>
          <seriesInfo name="DOI" value="10.17487/RFC9068"/>
        </reference>
        <reference anchor="RFC9110" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.9110.xml">
          <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="RFC9111">
          <front>
            <title>HTTP Caching</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 defines HTTP caches and the associated header fields that control cache behavior or indicate cacheable response messages.</t>
              <t>This document obsoletes RFC 7234.</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="98"/>
          <seriesInfo name="RFC" value="9111"/>
          <seriesInfo name="DOI" value="10.17487/RFC9111"/>
        </reference>
        <reference anchor="RFC9651">
          <front>
            <title>Structured Field Values for HTTP</title>
            <author fullname="M. Nottingham" initials="M." surname="Nottingham"/>
            <author fullname="P-H. Kamp" surname="P-H. Kamp"/>
            <date month="September" year="2024"/>
            <abstract>
              <t>This document describes a set of data types and associated algorithms that are intended to make it easier and safer to define and handle HTTP header and trailer fields, known as "Structured Fields", "Structured Headers", or "Structured Trailers". It is intended for use by specifications of new HTTP fields.</t>
              <t>This document obsoletes RFC 8941.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9651"/>
          <seriesInfo name="DOI" value="10.17487/RFC9651"/>
        </reference>
        <reference anchor="IANA.HTTP.FieldNames" target="https://www.iana.org/assignments/http-fields/">
          <front>
            <title>HTTP Authentication Schemes</title>
            <author>
              <organization/>
            </author>
            <date>n.d.</date>
          </front>
        </reference>
        <reference anchor="IANA.OAuth.Parameters" target="https://www.iana.org/assignments/oauth-parameters">
          <front>
            <title>OAuth Parameters</title>
            <author initials="" surname="IANA" fullname="IANA">
              <organization/>
            </author>
            <date>n.d.</date>
          </front>
        </reference>
        <reference anchor="IANA.MediaTypes" target="http://www.iana.org/assignments/media-types">
          <front>
            <title>Media Types</title>
            <author initials="" surname="IANA" fullname="IANA">
              <organization/>
            </author>
            <date>n.d.</date>
          </front>
        </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 2</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 736?>

<section numbered="false" anchor="Acknowledgements">
      <name>Acknowledgements</name>
      <t>The authors would like to thank the contributors and the OAuth working group members who gave valuable input to this draft.</t>
    </section>
    <section numbered="false" anchor="document-history">
      <name>Document History</name>
      <t>[[ To be removed from final specification ]]</t>
      <section numbered="false" anchor="since-draft-05">
        <name>Since Draft 05</name>
        <ul spacing="normal">
          <li>
            <t><eref target="https://github.com/oauth-wg/oauth-transaction-tokens/pull/173">Strengthened prohibition on expanding TraT scope</eref></t>
          </li>
          <li>
            <t><eref target="https://github.com/oauth-wg/oauth-transaction-tokens/pull/170">Clarified that TraTs can exceed request token lifetime, but cannot use expired tokens in request</eref></t>
          </li>
          <li>
            <t><eref target="https://github.com/oauth-wg/oauth-transaction-tokens/pull/160">Improved abstract for clarity</eref></t>
          </li>
          <li>
            <t><eref target="https://github.com/oauth-wg/oauth-transaction-tokens/pull/176">Clarified that the HTTP header Txn-Token is unstructured</eref></t>
          </li>
        </ul>
      </section>
      <section numbered="false" anchor="since-draft-04">
        <name>Since Draft 04</name>
        <ul spacing="normal">
          <li>
            <t><eref target="https://github.com/oauth-wg/oauth-transaction-tokens/pull/153">Clarified Transaction Token Service discovery</eref></t>
          </li>
          <li>
            <t><eref target="https://github.com/oauth-wg/oauth-transaction-tokens/pull/148">Language improvements</eref></t>
          </li>
          <li>
            <t><eref target="https://github.com/oauth-wg/oauth-transaction-tokens/pull/150">Renamed azd claim to tctx claim</eref></t>
          </li>
          <li>
            <t><eref target="https://github.com/oauth-wg/oauth-transaction-tokens/pull/151">Fixed terminology captialization</eref></t>
          </li>
          <li>
            <t><eref target="https://github.com/oauth-wg/oauth-transaction-tokens/pull/156">Added key rotation guidance</eref></t>
          </li>
          <li>
            <t><eref target="https://github.com/oauth-wg/oauth-transaction-tokens/pull/157">Clarified text around external vs internal invocation</eref></t>
          </li>
        </ul>
      </section>
    </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:
H4sIAAzeh2gAA+1923LbSJLoO78CIcfO2j0kLcmybCu2z2lZtrvV7dta8vTM
dMy2QLBIwgIBDgBK5jg0D/sN5wvPl2zeqioLF0m2eyfOnNiJjW2LAKqysrLy
nlmj0WhQ1XE+/TXOitwcRHW5NoN0VdK/qnp3e/vJ9u4gieuDKM1nRXQnOlqY
5HxQrSfLtKrSIq83K/ju+Pnpi0FcmvggqkwyuJwfREW8rheDwbRI8ngJr0zL
eFaPUlPPRvRoVJdxXsVJDYOM6uLc5NVoe39wYfK1ORhE0TytF+vJQbTFb1/O
7/d9tgVvZ3FtKoBya1HXq+rg/n2arhrTN+Pc1L1f378FYONFvcy2BoM6rTNY
yql/ITqlFwbxZFKaC3j0MR/JT1mcAxpMPji/xPWMoldpUhaVKS/SxFT0y5tD
xBH+68efT+m/NF9kPiYL+NoM7kRTWNhBtLu9uzvaxv+LRiP6LUqraJZmmZnC
zkQAd7GM6zSJs2wTTTbRx2W2W86SKJ1FeVEDMgGvA1xdUR4MRvBJdRAdjqPT
dVYt0kk8v4wzAwDwVh3W66z1qChhNSffv34J/zbLOM0Oohje+66a59k4Tgd2
1O/H0YvM1MnClG7A7w18bfTvNNrbEpEIMEfHU5MDcjfRy5dHfvw5ffbdyr6W
ylvjpFi6+d6Oo5/iqjLZMs7dhG9hO00ZPGD43x6/UwtY0WvfVau0zHjQBCi6
TCeATo+nn8bR03U5T/3wz0qY1ADyN9HP9uEwert4NrYTvTo+ffc8OirKVVHG
SCh+0vMJvf/dMq1LM4a33VKejqOjeLmawMhuqqdlGuf6Z8Zcms8d0vzQk0Te
+24FL3Si6/k4+j4NcPX8AiZwv3WhycAbGkkeLy/NAj7zY/0Up+o3GmvndzvR
Kxgm+l30ykzTOHpmLkxWrJYAHPx2apJFXmTFfBN9v5z8oNAUp+OMh/puZ51P
d8ZTM1Cke5IsLk1+XiULYFSK1g7LfFp3POVtoSNYzGpFxPh+BbshT4Il/gBH
BMYoZiZP526KHwAmU4VPaPjDchm9rKdjPzq/OvavfheXS54iL0o8shfE7d69
ONrd2XlyABz2J7O5LMppxb8+ePJ4H399/+6Yf3i8t0c/nL484R/2H+3hd5aX
4C+P9x7DL0/jyuzvrcsMmFBSTIEi+PGjhzQRsxz++yH9LQM+3nm0hzMcLifp
fI2nEjhMCNXj/ScP8BWaNNodbzMfjJ5bxiWg7jzCt05Msi4NEBpuOb949+T5
6T1+68n2PkKLLBA4QgFMzUSzolRjHybAMCvLavmjnZ1t/OiH09O37pcd+wuc
l2Th1vtk/yE9OQGZltQAyZRf+sHEU2ASs9RksC549/jw9eEYH41f4G+vYbMr
3JwoEsZPnyFYeLASOtdIaWZJ/Bxei4FfgRSyQujy8nIMxzfGU34feFE6z5Hs
q/v4wognvk9fWtYc0f9GTGcIjwWLsDF+G5fwBAg6hItR5R9+HjAs9Vbh1xqg
UdSGh87yKQj/EBI+4vR7C4jrYFjid6PafXfN9G9WJj+eHhVwsJI6RAM+eRbJ
I+S+JtoB+kmB/IURA9s0JfwjBj2ljnY7EVXAMOmUlIZqZZJKfhglPC78tzSj
nV+3SSvohfZ1DFwoPk+X6zKWbSUe8ZoOsn/vx2KRA5ePpyBN9HtNFu+/eJWe
G/gsF1R1sDb/LoiUqcFdMSk81e9/XxRzEuz+5aPFOjmPXhVlnS5hjfrtE1AC
KjiVCf9qtZKdvdHOzmCAuqFiZiA+Xrx4HmyNsAA439M1K05O5L9AugPeck6n
HphEuYG1de4MyKDZzIzT4j6oldV9Vvrk11E8Kdag5l2ggmUu28dqxCs5yor1
FHcHgAUSWa7WRBUvCpAxLKkHI9Cx4klVo94xaCt70V2v5d0D+WEAxUjJwFfq
IgK+n9cx6mT5NFqVxSqeo7q2BsUvshKZnjFs6d+YjaDiYT7WUYy7WEWIj6yI
p/Av0INxNNbIYY5pgVNE03WJcAMvwlmQQeKfxQyURzjEOShV8PMccEt6YVSa
v64BWdUwqtbJIoqr6PDtcYT6YgUybgGaDKwGt6heAOHClJUDCf65Kg0qrrjC
RVms5wtANU2NA0TA81H/AbmeR5fAG6PcXEZKi64ISWme1mlck8LKEGabIQ5S
mgnODoIjwSVUSCoWSQBDlcKy84SkEAjOVWY+DqPlOqvTkSjTMDyw+9oQc6/G
tH/LdAonagAa9DFodJbqBoNXBfB8Hog3PvgW8Adz4WbxDDAZTDs1wABw60C3
Ltd5jp/hAECmwLsIB7Aqt2VjmBLIIN/Ak8oAxt2OpPlFwWKjsoh0D2Hsi7RK
JzQj/DSLYU/1ZlWwhxUARfp+lK+XE6Ao2G+LTUUzE4Mg4mznbB+A5IaXgTqF
VGjvOsAiUoDF+6EYIbBqHOYiLes1gQondbXYVGJwpFWR0c4Cz8RPKzuO/Zv2
Euf0A1tECn3DwxTGNGVKQgjwB3aMITSXBdiaMDhQSVzXcXIOMsqhDzneJZJX
tV6tABShxVWZXoAiMYfP6OT5cRD0AqlOBgNYf3ZA6emaG2TfB+IDUyRJi3WF
SiKcaQAHBnWQgIApSiQLILMYSQlJAV7AowL7hWiYFVlWXOLy17nlAzClHJeD
weAboCFPK/CVRxwjy6KW8IenEScxH1cIWa0Pn9rd6K5bC4Bj6eaekAud8byG
qQ/LCdgmcbkRrrWEbamKnLnjN17PiJagVc6sIoQrXM9RnAsbBRIQkq1k3YgL
xREaa2fCLPCbYg2SBk4yHN83wtCvZ8TMh+NoaeKcBgHrKiXGO42XMdieM9hW
OU28jbRlK+A0vI8O2ePoMLpAW9Pb8sgCcJVwHmN51o3gcfS6qIWFXi5QkSU2
cA0rvABtKc49jRnSke+a8XwsGwRqCrAC3CBk2H6ue0LF1wxOa/bnqyFBxoEf
gx0dUUyHCPA3gdE1bwKreD43qDvjUfYc3HGZEA54J5QnLAH/tfIyEOnFkTW/
tgSFnN4VadUreqr1pMJXAFduBL2HA5Jo9lM6G1aaCUelM+Y1ZnswgRjBNoeN
QMYGbzzPgecVpKTCj7ARNRxtL0OP30bxdFoi4XYNAIYnnCaaHMWNmTooaLm5
MVMi1olRy5TN8pIVmWmKNJpka9A0Iqdt4bYRqQEk6OWRLx0IFoswQ8DvQZit
CthCOF9H5WZVo5qwWggvB/6H0tAo+q+CvZwWlznoRiZeKqYEzA4hWMbnjWOt
WQStlVCnljBkOa++d6eStBPH4FjTQR4FEh+wHedEhjkO0keJyEHuRD8j2Hg0
2izkfw/UKkmMAOD1KAPlcArbzFodWKZV9OmTmM5XV4wH9C2VDJanaQCLmWZI
3aTv8ftx3q35kcjsUQphTy7S5tYDs+d9IpZJOiFqS3UMh0Iph+Yj6FPMoBE4
T1ZIvyAqVgiXl6dO7fHqDOHwCDac9CXl4YTfUb1CdpPJC8D3GwgFm04oK8E3
UFFCFVEhJ63c1q1JiUWGKCTKqIY32moSEw48UtQm34MOieYssOKlQYdEWi39
mYXR2V6mHUXvCeyokz4At5w3xZoAXhCBiHr1edvrwSOibwRppIiKCRsCHmcw
dAEHiPTrIWKfF45yBU1NxCMPeSKa7V3cQi+I5Od71rhgqgiYSopK4wyOXIrc
EU2qlDjA3OSGUBKCg5zG6vmKuGTsqeUdLRCiV4d/siyJeOmp5jAhGbNTm4Qa
KfyCQI3ze8QotVyx8NLxAwIX9cSSNUiAD2jkC9sVVhfy9Nqee3yalrwa4LUT
tPUINfgpnJXYng+2e5j1H06nKfMWiyFPQ3Toc+DqZKQ7ITCM3uPZP5wj6gMe
55TOYK9QRVyYbNWDYoA2raq1CR+zYtV+GwAAi4QFSoyQInZna63eowoteOVz
0qQEWDnp5AHpr5k/6DlxCnvqgL4sqyb23pLMoFKddPxKKr4cEcUzCmsLgJgB
1nMc7C/bh7zeaWFY7C1iEvGwTt5YJjc+DIxjVMJhFgS0IRNbaKRTaWmPzqXJ
ZiMvCPjkWZ4ZO6HrNBY4O1nMEqq+4UiMmYO+M/QFOcQVdz10K3UuAMW8EXnJ
oigqw/yfJw2WJHwMEeCZ8AI0PNRoGTo3Q4yGLO7q1B15S6myEDDKywBCoEPk
KnDC7PThCoaEPLuCzKsjMfkHPOZJTe0+AYrNdQNBb/DJ8g7Mxp4wbftPLFBL
0IbJxgQWgeeEHEisKKMfEheuF2Y9KEggaGyCnsAouyjAIADCMyWwAyd2gVUB
5wFrYU204DeW5akH52U6MzVYvU3BqeX7JFBMortsz8OwMCPolehjIOb60P5w
byg6B+0OuQ2QYU9IDQeM5UAKlgG6iTQn1EaJNnBA1plV7ZVUdBagC6eptpMq
78VxcIaGlvz4pHreCCwa8Ua+K+L2XQLI0RTyJsUXFDcDKq94BatUloQYHjI/
65Fn709Oo9dvToXl6tFSe5SD0WgS4gRTprBMNtKeGDVAjRigHTCAPzPtHE8+
00t3nJn3iF9OhfMAchMTdemvEZMJUUDplUrZDFQ0QD/QejL7qHKMEQGNbArx
1jRX5EFrwp4yK469965Mq/NxdIw6Z1bk85H191gPlFPHoklcwz+RCmYzED9A
FnF1brXCjBRxxce7lDvybLGC1ufZGkYTOdx8HAJVlpSmGnmUOmV8Tp+CKJil
7MFQzFlhnQQ4YIYs9y6PQjQR5yrzBtRJvIQtTWLSC9F6laRO6E/tebwwZTrb
OFMaEeZGKdDxirJgYhZxFp5eEhpoItKRJJpQ5nBpMgzvOoEY+pKtIdrkWcdw
RuJcGPT7KqbgfnEpJsHTuALywh+iT3cm+MdoBn9cDT59mqXzEXpcR/QzqMmA
8EvWLuiXCF/EmeHnJmkT5yI5yN5ft3rjjXQA9O9//zvQVZKmMFE94CDGDv6/
34+C//0ef9vlGEfz0cD983/93//zn1HwP/hhdP3jQfAX/P/ndi/sD8Fjj1b1
9SP1tbWF3NcP9OCWgcnX/+Zg6wLNP+18rCDvwlbPo0HUGgj+/3+EP+9FF/Jo
/5pZWqjrhY8fH+cas43HOuGm8+tbL/5WK4zsCps/R1ER/vQQf8J/7N/46mfM
9c+CSzigg08H0Z2QF3Ck8NstZh4dzt5DFajZuhoMdsb+XDl3QcuXAHzuwvqI
Gjq4Fx8t14DKOiAhPNjtmqxlgLNrVMzCcDKxfgObt9cIGTwYd2goMGpdBYoJ
CRPvHFou13WMASQLj9XwtLcaYSwNIDGvxDOgNDdTDvbGoSnvUSt+5coaIqj7
epM9WmoKCfwT4RrjKkTN4GFgHzpLknXCzuEr0gTIgAGVv88upZEG+2MwsNAy
RosNxYh2bbCTtkLZQ1qxNpvD/ZtsxOhn4gqgGTxS1JFk5Hghz7VMFIttzrZa
j4JyjS1IonQwsP4RypWovfGGpuAUdLqpCZxOnUZZl7El4+C+AzmRAAboYeOS
Mp1g3M3QT3mkxLca/Orqn1Dmdn69sx3dUuY2vv4HyNwbvlTv/EfU/N/N33rh
/OTzvv1yiLsef+7XocT6vK+bAu0fBflNGOvUBpuj9+1xQxdsvHMRdUB3M8Ty
v6L1y22+dKrOk9aLN86J7xRfRM/2nS9d7Rdiqmtv92/15W/B8X7r0/DoiyH/
J+B4/Xt8k+7fUtEfR5bE/0ebD1UDq9P3azWoyB+zSw6UGkxXQzfshRlGoIyu
qmhn9JCjiFbXiyvWRJRbAYb4dFDVoHl8u7WPA4LK16crTdFBDIq0896rKLzT
nDrBHUfHygfc89I1vmz63gUOVPhIp5loXRyMBXSckfefXDZxKyAVgF8Z8dq1
p0YF9YagEc/SrTQOHvPnFomEOWsx8Jzd2Fi7KInCENgkKoWALInQHnjyD9DY
d7Z/G5UdE35i2ZQjZ2pWHKM7N5uIkuajLfQubw35v+hlxn+/e/7v74/fPX+G
/z754fDlS/ePgbxx8sOb9y+f+X/5L4/evHr1/PUz/hi91sFPg61Xh3/a4hDA
1pu3p8dvXh++3GL6QtW+SNa0U3SyKLpAh2UFdiGuvRp45R++eXr0NtrZ4+A2
FilcXUmge+fRHvwb/fA8FUUV6M9Bjfk3GGqKS3LZYdwqXqV1nFVDPMPo9sPY
Z2koyeuUDiWVgQwGNh3vYHDA59h5QSWPxiJ8nacqkIo1UHmxLNYVpmmSW9XZ
oWR0K5esSzrxYfE0zLdj61OFMJ9/jDH3tJWMRxFwOpDAPIwkvWhaG0ZLgCvD
GF4SOQOWXQWzMq5sVYJ/Zt0RyziPMYNxGoNZj6mkgKtTzOGKnlEGFyEIpoYT
kdi4TbWBM7nEBa4wF9AuVzmLbfRgwRlzgNIlHiPrt18BqMmGclil8Mow1aCZ
aZcb96aCWue8ywUdYiYcrEcwBLNfFvgNZphr/J4G2aEu5KnXa5NC7ZEmerOJ
K6v1JEurhU0vpvRZwJc75NaiY6R1vM1x82A+YXScwijcWfnoKaHGeaFVop0e
BJOskPyPFm7H2NXBMeIwJVhN5yRJY8K8M4+r5S/TuZEyq49hC7O3sSIO8gyF
+1HqsHMl6aQQHyBtBiCGUWJKkp6rVkod0gWfNxd5EvG15qRaqrczwftNcZVW
7P0P/DtV02nUzpwbDA4DmXDEEzNCfjx58xqEPqWRCHXacCVFvZMsTpduVyT2
xVvS8rQ1cqs6d8Tl9LTzeWSHJAWoEfdvUpTN86nWWITmYySUB+DCoZp1xXD+
ghHYN6q+JblEiRTmIwCNxzo3EfBjKs/s0CgGOhz0gkhkcBjuWMwY/tlMBAE6
hc6nGWJat3/zBKg0JnZo3354dcXk4JOmrXiqnL5E2T0UbK+iMOXqgEJXSPVS
7/XpTv1RCntHC/rpyqqg/i2X0nRWb1Zn9lOf+Uz4mriIKJG3xyGOxZH/M5iL
pvr9h8v6bAyD/gSCsRSlwZI8Hk1cFyoMIuknxiYZqFR0OXpMbWfn6bQNGewM
uenqjzStLPCK9yMv8pErO8SdRolmgVAoovFVoge69z5UoPB8IktgC3CydQD/
UWsDpYMexdkcH7072X24b38DQPE3zpKcpaYE7I9grVuDK20+BCBb00HErqqs
FiBR0ZeNfVpMN9ERn1a9u3yAr1gZq5vJztEEP2OiqhwGmNtZTz4n3JqPKZ2p
Ab4gXAHE86VB1RU9pTMyKDCrhZ/a8gf7LpcIaXcq0NcZnOAzPPhWQWN6w1/5
Qz/2lG0ef3ok3O4oP66awVKbCoXsDEDPGixEDS168lm8nrqJUZmjwo8GdfLY
5znmZrXAtWfCxmmp+kVlh7TGwSWsMOdDbLJpxNmK7H3mhD2bPd42XXA4sVtA
EQS+RwOPEbFxTYi1CjZBSvwSMFVH3TkavciGARE1jQExsQpXPez5ahg5cq/a
HDzNRSuqm2KOygvGkaR8uxPDyOV1YqozP9h0yIbC5SKEY5M+wZUeGIRaIV8B
cY71K4Dzf618blWovJyZj6tw8c8x92PzBWiEkxmOdGh3Liin8IsOBzsRLXd3
vIvzsg2yt/MI5AMMDtpAz+BqQBsQs9mjSsI20t34OAS4iN7nGZZehmWmnNFK
08s5gI1DiwxM/SLhQgwi0jo8Lgjzal2umkCf1CWLuJlPJsP3Ci5d4pR3l6sa
5rqf1Un9MeQpoZrDxpLVxEVeioLDhOk0m95CP5ynvM08oZQ2QSVFA9vKmdBI
3r8TvZXFM3I/3UFkMGu/IsbOWJTHYGRyIR+b7DCQR56gDDRUMGrWWRzUztgi
C1vxtkQbLI/LsrhEYbRAAzOqkmJlJbvwEw6CmtCV4Aebrp0DAYtHXMrosqhq
Wx5Yt/L+l8XUZL3qHwwLbB9Lm7DuteSjHue94xA/JhJk6HwyvQtAB2R+WjCY
YF4MhR2rQgt2NUkGlhwcSglE45Pwc5cxOIvTErP+i7iszGheonk8vaegaSBN
mTzBloXcwX3eZWpFPxSXsE3U7QTIb5UVG0ndFD2t+hJk4xFwi2MOgvliYszE
ilTf2Si6NTSAXF1kfSQ0f9XM32aFT04lUhMfL2ETTEoq255gVIVH2kILi5DI
DkBTbajVlW6LLvSsSDlLh6MvzLy91pDTULjMUMqEHLNKRhzDZcgSf1QrD9aM
/k/Hrrq0AeXY5SI4+FMsobrQDkfnZZHFkakTDto0NwI1jsVRJWeEU0M3MifB
Oh3yT84S8ANhdSL8l4yLM0DJrykwrtNwOxscsVQEMDHCSacjX2NUFpMCC7x9
ZW97z/z5wYmR/PMzV26kelmABbEops7UDrQMBdBxXTkmCBCwxHpTvn93zLM3
1RSrAqnhxxYDlxlD0mG5jp00vMXYn02/gld50+qufWygqedIZmt3jgUmBk+M
z04WkhDvKxM3ZcRPqG4BhExMpWNqsVW74sVz+4YnjwjNr1IbAiztuvioz/MU
3qX9FZ576V5Yt+dfdci/jD7kDgPeQ9CpnGBLivv83QokSRXdJUtCNocfJMU6
m9rsakYmj3XPeh3rYm7Ik6uq9YBVxGl2g97jlJ4R11tYMyat2m4pZGeh9bUq
02VcptnGu60qqqAMOkDoNK04TMe29fL0itL3qGcMow50K26e5bdY8IfVhIPB
zwix1CoJX+WvHYpDlUzYK3DEWOXdu2AUDVN3DUMiNWEh4CRrkYd4ZubpDD0x
Ok9PT6ytLNO7RN/JJlLZXvYQBKleAGoKe+aqiJx/UTkhMTzGq1EJ4il7LlX5
W+4Vf71GskRbQHeWqRDPV10L1mGnC2TWpN/oMpXaximU7tMVZGsIPRGfXq5c
79xpnMgD5c/Zwt+3DiL062wx7aGn5ul7jB7dv++BDRqLUIEcuoFS7MWAH7w6
eXF6my/+uo6J/PGbne3t23ySABculqb8FYtyEFT8xCGY+YA4Eiouu2uNAaPM
TYFzvj+xPqkMu5DhT384fosNBK/EF4W80ClyiFsbjZKGNWhGDgbHtZx9DDty
BI2ZR4HHODmXnazDYFEXt27V4DmpKK4Ydk+R2okj80FIG6XAFyRcmHE5mmG2
0imixtFTzBmcxevMHm07bUuktwSRqy9XCfi3ELegmwOcJRX/dIdNVjFYBahp
0xGw02mppeLvPTVntavw6fW/k+ilMjiGEf12HeoHF6eoIAPLaZPxnAJzuF2i
VLjM1zjawkXBsFthtQpTCcsox+YapNG5woo0j5qkEdomGAJzLj4+DQFYTs/Q
exqOQZE4a+GqgQSZraEcQYjzvkeDGbf9xqXnNvw3qcB4CvefjHce7owf7Y53
dh8wWwDppN0E7UONLAtVWfx+XeYH2MLzoJwlB1jT3TlGEMfX4/ASYaBfYMwV
NQ65jDdjapgxknYZwlEx4G5J5EH3G9FfaFzNUmz4mBl3OkddgPNqyVufmXgm
7m/0Sru6mFu47MmLHTrsDxqY30rjGta2s/94/+GD/d3d/SGx+zV55bvXiC+Y
jyv/1cPH/FX9kfD95NH2wwdP9h+MHj3amY72niTJKN4zD0a72zGg5cmT5MHO
Lo8CBwg/mG4/3qumZb37YG9WxZcP9upy9wFHDUKy+Eqi+G1IwhPEjeSAY3KY
1kVlb2SGKG9o5ejo2IpoF+KpGYOkS84rRkodIOVzZfOXSOcvks+/lYTukNEd
UhoPlT9YEjdqHJ5rIkcYKKK4UUfJxWGHXpfiANSgEI7XSnpTCtHcqglE2MYC
800k4QplgLYjpJzOyjcvRz57ysAvFcZkfI6bFifIkcRTju3qwEpKvQ/Hw+hF
LxWQ6PysRmyrL9cMXRjFyrVrkfCmZNr4tVmc8UwzQ9HgytZvcocLrjWV8Ncy
bHQxCYt3fcS6HQZnj0IVhtG/JBSu9MWggl+VeTrFpRGSia/RVGz99BfQwVgv
ScwSz40QW80OT9pdp9qDNZ5oCjUOMO/qx7pNH5bEOOKqkbOIp2ASJvVdr6+5
/nU2ehMYgRPrih9rP1J3+xVnSKLWw86o1PXv0++9cymYWC6rcwxdWmDfh/y4
eQa+5CS3i3CaZbgCZhD0FgRcdVBfs0qeGiDo9grX6cwAL7yKmXEzaqThPBl3
JX0y9CXeG3Z58ht9Gzwz6MlvJWeE+HCbtoB0rWOrHrf/FcZUXKM54zi3ziAV
E74X/yH3tF6YktpWKPdvzNF+b8uPVbsYbmup2LdNEODGF5x8gLIyev/udXTm
9BQarTqgdrwHvJnUXR/29lf680wMBpsNNQk8s2HjlsB7y4nOaaVfDbfjncp2
dZ680OPgsosaJYgmbMF2Lg5Zj2LdZ4kX78SiC4x6X8ZKtThGJ/Ectrwm1eLM
hUm1U9FKOLS2AfgedNIogk7CrG2xTzk5GOxNMSPvVlO0nMPoqqRhKESkx8Cc
LjDhRlOTpcsUOW+WMpFi7G8E6lCVkmJfkeGksyVo6rvVPZ49zD/zjq7uwLAJ
w6jsamfWz5R0C3x+Dl3S2jmkbim1d+jGSsI2Tu2ALMc9+AKFw2aPH/GeWTMU
GyR+z7o6v99q3kMN0jDf1uadKdKl6lZmkQoMO/E6t8OEWYNfNtxGtB7JNrJq
DTWRAWW66Pc1YnElYpT4h3VZNnDvfJcuRkLjha8xCYxbW3cTadhemLxfCgre
EqBEcdp7bb8LRnfMm75MJQWUq1TCX2rQDnHt4mr4x68iQ85cjoJVqp054zzY
MZUTqF75jX1mttuIIgdGZCMVg5UjN5HP6dP5gqgqXS91pX4iAPq2AWmFCXHE
/7dgQm2X9fd3RJuIwOX4X59n0u4/Esj8TVeDQta1boHFoHNm4Y+vdvzb5Jye
oCSvQuk6JtSGbtJmbXU9JoN0Kk7KT8iJdJVL0yKGSZtuaa6ZhNDtXRLj2GqG
t3AudRwucedhK/bB2zeAg/te5xQP5n1mIE6603UJO+OdwQ8F3s3Ter/ToTI4
4njM6JRuFlJlDPc/ji4vL0e4hSOgTyHPwcBrCN+CzPqXB4coteA/LLfgHyS5
4L9eCYA/QjVg8LsuCXnDeF4W4h92dYPfWW3iW0QWPPqX3Rfwf52L/R3t57eg
H6L9P77EVkioIozhXMFDzTO/NZsfF5Pvk/RN+uOL93873nmdHlfHy3r156Px
eHw+/eOHy8Vl45vPXgX3p/hVFtJgpQDBYRr/8ensTz+/O0+Wf/hbsjnePz46
/vjqQ7J+dbR3+fLD8/Tl0WH6p92Pqz///HD7+EMxP17uXPxpmVV/PtlZJD8c
Bs//+ODPWZK/Xk1292BVh+n0w/OPx+nTJx1Zwc6u63XuCJ1KXvCJKBb8jC6k
ADNJkDPya64kiaxLBnr+GKpGMd7GwmotXs+CxvZx7TQVafmLTgOb3i2weM1f
W3Yqs/EBfnE7xxK3YcPR35kZMOOFvE0S+W46NuPhLVS4kr8VoXwPpcYhWSU0
DOq13GatvYq0ozfikBM2GybrZw3ZrWj1D8y+Rxo/npfGdsurL3X6Ren7z3eU
ZfY7q0IPFQPJAqSy+QWilwgf9t2br6cnSbk4QfSd8Grb9Irk6vE7apMumvhu
iQSJ7Y/W6FiJW9XUv4iiqcpLXJMVx3v0iEjuZPP0LUjiTcXBLUgNofqVoToT
/aMJKE1orc/QKuQULFbwKG9euy1Vgm+YPRVmE3VvNBVcSj+Z1OU15S7ub21l
FwZzb4T0JPmgaR6FlaPe6ra6tgBviR8VuMtFq2w4tdc4OMH01SugHOUbwReH
R/8SKBv+evzf+pgx7K61nb16hIFcojTEgh5sv3eZt6cjcCjbn20izEiPa5Va
36QwbIMnbah1r/7urA70mpaG9kiPU7NPVcqyeX4XebV2HGbegFKMySkzLoHl
ADca/2D2rdGnTdBTdr1t8Ri0VLTeToDbnpcF5TuRBMJrcqSAz7Xt9G1BK5Ng
Vfe9xt0fXBdAvrbJutJhRNEdWycSmIo9kNKjkwtcmIG9D3j1G6bnTk5mufoI
g5K352U9dvf/GxzNgvYrrumslejWZ5dbLQLfeHp48nx/7/27l87YCgZorDnQ
GT59slrDQ3xdrn1DXYQA0Z+mXdL2GmbLF5Mxs/3/gF/1HzFBc7fKoQp0Tk88
SaIVuVqTI9ClhtFbXe1fa5Wu1UnJ7QPGyB/2ayz2G7p5Bl9ZskKlGnsH3/UF
Dd46SxtTBW9KmnGJah2mITqXiZyoeMn6hrqM526LF5fqcZlKJqO+H0C1+PeB
nWCVlfcl+zAX5xR23azAVe7cjEKRHV9OYaOxt879f03N4a9HYBtBTfYQosH5
gKnggibc2NbzfDKEzuQkNNLIehocu4s8GserssK1LwG6v1pQyPuGlTuuS+KS
c9tsUEcOjcN7K9n682ZQhYzSotDrJ61kts4s737nzfENb/jO4M5PpWeoJKfK
Hphwu5OiLJEp8Ap4ZxzNOY72WbhA3hdi21xTvXedMeQ4DqoPPO7nOXrbuqFj
Hx28X03gdPpW3+bPRAbWHyrCsCR//Ez1xC7aztwbJ0FT0ZG3r4dtrZcm5TUF
5X06Y8gqmc1tcWnzVn0olmlNKcZ8wzMAcDtsGATAsiAGpsN65UBWa+9UdD0k
3aAIr48x0W0OcYeHPvBuN+ipIyiPP2NPFOVXj6cqlUCy3YsgtKRLN3Lntr6J
a8sMdC3CIqiXMdNOCad4jcsQ1dC4hPwgbbSJGeex/3zM3CTIZUX+ZkqHTZeC
3gbDKZL2bgiuiLIrrBsrVOLaxrF64emVyw0dQiorb3MYbUqDDiX5sAKKWTI4
rfphrbbbu9kb+pTonmEWBv+Idk1X9gj3mmlxQgoiXpMJc0POyY3SqdHuK+e7
CvkQ0D+D/JamyeEMDlWAzXH9ZsWcFHM0K8HFeWlZmC2Y6yJohkK14WgZac3A
/+tfD88wHSSar0HHyjlx6DbOVDuF9n03JwnBw6uzv3H9D9aNqHrwZX1DYkJ3
PL1RYuVIzF9SoWpBBdlnJNlN9Wuanw3xDGvXLlG9sPWwQ4ij1M8OCwnVqbgQ
Bnzu74x3ot3t7ejNT9eEcig3GW/pNiN8qSyyA5h2VNV47zAnLXuUYgIo7C7n
xbYQHuT63ohbHkRvNX5vNj8eHe8ff8iyJP3xyXg8/nczvdwvP3Z3KPGn+Jpg
BL8i0Qh3e1rvXT/NeojWZT9O9F57wNVdQGH6jr/jFDmkHay7xCDwGsl5ucs3
Aw0xgFtcGO7gNQWb5B4LRiqv8z14fP+uhq4mz5WHRGjTa+1VECle5wyBXP3Q
U84inI/1D5G4bYnpKleaBSNWH29E6IO5WR511XtKMMYKrUYFjwQKbCLuamrL
6/QZvl6VsCWaLcVcyCydpFmKabtsyeMRYU9M1+4Ou9JjidHS/TQ5ReVb1zY2
N1jS26frpCEwV6gVkmYql4GGAyuZ3BgS37PsrQOKXiCA7VlfyfVA2MGZblu0
F1Km8jQFXTn1QHIU6HpfW0nAnYJu2M8q1LWIWCRpJ9AZu+0IDQJfVtTcaPbw
kYx3Xim+eMiaHE1nlT0Z2aZ5/9B1felFbQlzA/sLs5QnFi/67PYltf2c7dzW
K0oGd/2ZWlbWxKFkahXuax2zXsumNnWmrjpeawWFRReWRl+fId6l0E+MrMDB
2XHhGBXM+eJvoZz4Wqam9QQMRRhnvXhVu1pz20N331NcN6mh4UTsJwMWdj26
bm/ZLCnB11IWh5k7FKHrqcRqNCR7X62pNPkw9Dn2OSO0KEZiuMGatkXFy7Wr
f/aTYPvBGx1xnJurDcuKOIq6Kb2ruICsWCekp0VUFXxtuEgylJ2SxSupp9jf
0WARPycITW19qjLWGqWqWlNQM6tZgjyoPjkmpe6ztFxGKhe5qf3bzFgPROj1
9Rym1cpNQLLGOrW3Uk5nd62cb61KV/qCvP7j+OH2E2peyYKGGpapwD6ZkhVM
ZOyFMi49yw/26dPJ2+MXL54DX3J32bkP5c6zukiKrAoBxXiCAKBATOke3w+g
e9ACiYu/On15Yhte7e1jdzGq7cUQXdBIEV+TeCYhidIXsniDZbfUtydZU8eT
2+xbCCvLO26WkuY8kMKFvxqVLnvj++eoxSzSGSxP7kq8xbzVTcl31x6dm/y3
1x4avkm0eU4y237V1Z/0jt9Fh/0c5H8I82bCvCWu/5vI85rZB3ei940uqroL
SO5ykajD8joXn6HNTWqwWm5xDdYB9yJahp1u1UnBu5JgJbpTMpiJ3HHLmi6U
d0mb8mRnZxsriVxHZK78ojit7aI82bSbXUt6Di/cuof5cNHgtkfnQpoxtw/p
2taSuLW31TT3uRI9Q58d1nwU+aTjnMFw62omc+At6NO4nPJrZ0ET4DMLvVOS
bH3kxCQxh6Xj2tbM6UIbtWfhypDMctNoQN/0ExIoXT1o63rlGtEq7UN0PLkf
PA/3SM48jYny1d0C4MzXm1GtNsruq4B35r49u3YTu5r7aOSK4wy5QdhFud3Q
BLPhpAP5kUSaxPj8dMc+ueq7ObfReJhbo1YpUkHtXCIbbFEWJ+dYq6XZQFDL
VJpZURoNaEw3maIOzmoLuajEGYHVXUPQzUGTvzClb4dA81DbtVzu0GYIMCfi
hQ/oYYpQaI07s8zeTXyOEoTSfIa0rH4rLlbdisbR8wvOVQzvXt2iq1a3og/F
hNwA+NCUggd9NZ1KNXLNwOT6t2YcCP/kG1xdO3Lky7RqDtRXwd3Fike2zlmL
6dl75rr6t6lu3yPbmPKpnGA1ibsUl+cfNtiQs1L6L0bzN43rdJmmg5XsdyQt
/30CXKGofYUqkocKP8fNMUTx0Y5c7beV1JAba0jDGkbteKeO/1lV0GJsm942
LiRjIoCj2XGYLx9WYT6mG7l4mcO3BK9NpLF1Q3z064DcQ4PYlS/ZEKfbGh+c
wPaSF4WLSwbhx2Y0gRmxXOcokpr8ZIn1ymrnWEgCTkborddDtW+qbrfnp15x
efhZwwCKtfWuWAgdDxixjKVKJRikTbNDKc8nfsf18GhMgt1crEuM/gFJcz9T
uTQjkTxy+FsPre+flIwBdwpEsYviOR5uydhkgBVZBICyA5v8uZQCwx2L4llt
mhXdSEBMd3IBc08iv0kwizBM5D90J7an4NnHPjk+mPtbeJggmcsjDEXuLQw+
KdxlLmBRsVxHw1jnj6cp5nBQ49OSe6mp1KTmxTfs3ve3+ASoAPYt6YzYXaqy
N0bgrq0wfFumfG+JXkHgZ6OMJhUX7UwPH/ZmWRac6xFWKhaNAs5G0Zf38PXd
2867esSJYKFTBoPgvtXbGZB8UQbxK/VL0xv3mWxxyO0PdIVhw/8fun3HNkSo
QOr2gLhKsGtS0QkFgeOLudIfOD0stXeL9LhSVTNX3CD1BAPEti2gbIC72MW6
qAG6stFx298wYq8mGUdvsLOUjgk5EYYOmDW3muw1bUWqy4tD7JcaxNxb7rfK
3fsguU7EAUhbCi4Ua7p+KtaLqA8WKU1W4fQDAhw8N4K/rlkCan2+tWddjRN6
wz/Cpij0gFRq+1X7lAOS6tc0HW7cOkMVzjFwXOrNRU4xtO6aPZ8d8+8ama4b
lrNAYrXSnZdv2Qeab/1B84NuIqJuwrluBc3xFudjVj0pYzxtPvfm+mpIyq9t
enY0N5m6Qve7oiTc64jTwHr+ik5Y1HqlE27uw0JYSq/qobuz1XzjbiaSkg2b
QJz0RCC7FyIt1vKigTmHszRvuuURWKYp6Ti4wXn9HUKVmDsssYANys1LzfJk
37s0cKrmBqkSyYstu1UG/I9sAW5wM7P+HavwW6vGEYtqDtOortEZdkoLq0VR
ck3x2nUjnPGLShnAMQ8ahNKhMti7R/Xi887d2I3MLN1aY9xiFUsx65jCo3S6
9W1x2F0IZJcJms5XZL2klTIGQWCDnQQYVnesIfKkQsGvYnhDEu3Qh4gJUVyx
wEZtLyd9ZtejfQPIXtfUNLVMi3WlfX9Bah6r3temC9BWxnIXwjhSeQIchK/L
FJS1yPpDY6ENX0gtXYysTBBFE0bGdM6lc1+hEU1CrV6g2h2RKFVXTi1B9iW0
mHAqSk3ji865K5Rc09Vb7Y09FORGC84sEZdZ7HShpGnbyhVqoY0QsR8lbKHc
ntdGqpZ4quaGO6WA4ZJKch2KM1j7UB1B6x9uqg4WPo8UOsi9mHeZbPamw9rM
tajv/dL1vq7krgTALrEoFXERiZjE7FAtWR/MpFtAY4PC69u0G/nUeXtforfX
e3nunr48udfpdHX14xyMTWzCundD4bTic2s23lFJRiPyL3tFgPzqsk3NEgQs
vnFdJixZ4DlKuF6qjpcrQxdzOF2+H7t0ol3f2KPgvbdsPKG22zjPEz+kuEKY
Gn17TrRJ0OKySfLXHQP4XoQQJmnkmBBHPYglZQPtktwmWrZuRgqbfHleG6zE
u4i8p9+ahAEl2ZQPnn5ZXKAMmV3b8IvXWNE9roEpbOOtMWxOnvJA9tiICUol
HXPsp0jbJF94nPENiShgCBhOCb01Xp3W1Y2Vm7h5w+BpkADsOEkTukeROo/1
7o1c7aSbRbu+eL3Tc3SmgVL4wyxXNGCKRI51i6QR3KIjG3wzpyCz9R1eQ0zO
DyRZG775keZpdMOOdkVWdCEJy5IqlCWZic/Zxr3dSJHrRN6MPfdCPQz3miyM
L48/+ltSyZ1EGdVC6jeqym6Pw6g4JwC1zaKbCBGvoXsn19DdkFKNRGLDWXRz
XXiVF+gMqLdNC9qKgq6MQUYaTwvpUHCur7yzl4pWOqN4Z3uMaaOUVEzXK03l
diW626lrIVV0CHvwumj6EDDV0kYs9fFyjjx2grQ3vCmJlL+nEXsZumMn2lx7
sMqZN62N0Xq6JtfSZOZC4hWhRTA1CQVsuYuBvTitbbyqWO24iRUbdgyo2abN
9cIftiCE/frl85Jp/vKJ3x+F74+K2Qj+Hrn3R/K+5JErbdaG34LQW6gxFM3w
5dDHCGCDhN2jpQPyk7DeKOtTWf5pmOYP0jq9iJOOkJQ84IjUm8lsXXlUvGUe
mkXHfnsHJ8XSpfWRL0t1G6qU/Kdp0OC1g2gawTsOcJwPoEJV01RSG8X3yE6N
tLSJjCoCXQiA1qMiKd3DoLOnv4NmcPdMLqe55y/Eugk2vjExcrXXNoQ18NqB
7VBPaygU0qQXJzstKlQyUYc83H24f4+P/0swCtGRcmTtVeWYonkkziLGIyjF
Exh56c35rjp48ZLj9vNI5DiIz1E9xG08PvZZE90i5iIlu5nigBRWXMTVon0a
ZHcFOCRgrJMg3cs6iV1CBYX17JC97RRsODWh28V1BAbByMg4R2izjfjDTsCK
2dChb6Txh7B5j7x3n6nbbDDdderLTHygy7YPA5xJRnUicTdREev4nFNpM95J
q0HrnoXKGVh4HxBugws9zE0toNLxPD58fdg+m/grXfrZrNyBFcxT7geDI/ty
FedKMUGSrnjFttiN9v7d8Ra6IHiQ0llZ8tjdwFptgRBDGMb0YOwfXF1F9mPy
MpCPqQ8m4Qwd9x/qXEe54vTKKjKEkca1u3Iz6jsLd/f9jH0QvTJToHJu48DL
ol8oEAPzhpfANm5sFP9zC2p7Ky0fbodejPU47ErtSIX5We/fvT6Ibp9gO4ii
b+B7utf8NeD+oK0+8CscGJAClMyUB9Hx89MX9OwkIJxnRbImh1/XHvis5M56
sdsvQLXI6ViCp1FkHCdhFOcL13OgFnRDs6GvXl3QLuPG9XW1FvkNFnljH5Le
Zcpdw83DpMmUnslyWL4zxPTzM9KjqOOxdKtRNNlU+Cim9hsst4NR9O5iAH15
E/Q+0CdVvL8BtG5Md9XYbcGl8P914PbfKPkPxfIdkVmKqQolqfvpkZpOA1kA
PwGp2ftXMPZbVC7v07F9NWipB+1i26jDjKm4El9nLCrXGTwAXlz7Z5rLD/rx
9Q1p/pQg4sXeQfT6/iGma76xreA7nj3H/jcU6AjE+UH0aDTBPAaksG/6csSw
PfCOtR0QCSzKq/ZNhpRe28o7wuuzWwamDQTE0So17BhCVyfH+skmVhlB5iNA
xg1NRasZA0y74y7DtZGRZLVPfbOpd6erO9qGouJjEg8ZgXjNHJknSYCN3knX
ORdUyVVVHD1lrwwZC96BvHJeSlzGA0Yt4S5ooNG3OGKxLvtNwij2Ws5gBkMp
U6DIpqtUVMEuxxPp+MrV7bXToq/efcKz8hlJaTv2aB0efaoWzUXJQ1Q2GkMQ
uSCMhIpOqoFpHvY0pK1sEoVTZyXOrUfO0vy80gGkmsOLx/ZRcEGehS5wI7Un
9o0BUondwSaKP4ZOSazyIyghHt/Bu0Bs6Kx5KjsWl+aAW/SHZRnPob8PbxZB
9OGhf7ueZGm1QGtP88kD5p1Tq3TdpcDgyr58Dzs/el4VvUfwD6jppmJhthOL
ZZFq5+D7F2U8p7H9rW7hGh1jemewNzub2tEXzobozNHdKB+z4oN8VNyA7DKA
Uet1Fp2us2qRTuL5ZZwZkhkqN5ckg+TYUjNNnavLdw6wcJCbUHRfDBrmBWXX
IVf3SoxICHw+puf4GMVEbFtyUptkCkxIivALTnc8VSm/6e10f5Xu3Oob0CPo
ZLg++MPsb4nfN8CWXETPjupFoyiQJKHLPczMrI7QL76hChE/q6ryFvF5gIIJ
TtMazgUWnsboZhp8nuIQYMVpD/YEDFhXpq8pzt6d0O7zTYlBoBrtwu9Vf3Y7
viceM3h35MIpeg7fj8z51nCIKsU2R7DgYl1lmy5+pgDgjtsXZiMKLm6sawOu
3Sq2VoMuOQ5uTFXZZkho9lbxhv7c6+bXLdlGo1E0iZNz9CMcJud5cQkAzeXO
kE93mj9dYQ+AfL2coAfs260ZWMpY3O8ze4Bpk7ODwg504OL83Lk56GrsQjWi
ZaMXfZZI9/OyWK9Ad8HhMVCCYZULpk/BjrScY7Io41lNDhBnl/6QYl76phvI
X37BEAoVxZIHh4NYM6rwDB0kf/kLJzNRFucznCbafgiDtsf8JvrlpC5NPkfJ
gj7BsgCeJXG+XIqyRUc4ZUfrX+4ilVcH9+/PQbytJ+OkWN4nM3F0OZd/6PuG
mWzur9ZZdn/n0QNk+7+Aei+ZXLTJOHhFMWpOjFfRMZ1fzJdHyfFAwpQMU6t6
pS7e83UwbhOMx0sM4CNVTipO3CVPH0Jeb75qgv3tLiQ41ihsIEiJ0kzw6xa3
f69NG3vdBBfA2B9Ycqk6XwXYQ6aMl2CRrFGPSRn9dGq/auC9xzTwO4NyFnbz
b1PVSQ3sY/7r62DnDX2RfsTNpKSdIivmmHaxwkCOcLSvm2OH5jgkTSAIxdlG
OV83/H6TJvFSjLika1pczthF5XPGfLrp1038CAiS/vdfiGjUFsfIAAA=

-->

</rfc>
