<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE rfc [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">
]>
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
<!-- generated by https://github.com/cabo/kramdown-rfc version 1.7.17 (Ruby 3.3.3) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-oauth-transaction-tokens-03" category="info" submissionType="IETF" xml:lang="en" version="3">
  <!-- xml2rfc v2v3 conversion 3.21.0 -->
  <front>
    <title abbrev="Txn-Tokens">Transaction Tokens</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-oauth-transaction-tokens-03"/>
    <author initials="A." surname="Tulshibagwale" fullname="Atul Tulshibagwale">
      <organization>SGNL</organization>
      <address>
        <email>atul@sgnl.ai</email>
      </address>
    </author>
    <author initials="G." surname="Fletcher" fullname="George Fletcher">
      <organization>Capital One</organization>
      <address>
        <email>george.fletcher@capitalone.com</email>
      </address>
    </author>
    <author initials="P." surname="Kasselman" fullname="Pieter Kasselman">
      <organization>Microsoft</organization>
      <address>
        <email>pieter.kasselman@microsoft.com</email>
      </address>
    </author>
    <date year="2024" month="July" day="03"/>
    <area>sec</area>
    <workgroup>oauth</workgroup>
    <keyword>Microservices</keyword>
    <keyword>OAuth</keyword>
    <keyword>JWT</keyword>
    <keyword>token exchange</keyword>
    <abstract>
      <?line 123?>

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

<section anchor="introduction">
      <name>Introduction</name>
      <t>Modern computing architectures often use multiple independently running components called workloads. In many cases, external invocations through externally visible interfaces such as APIs result in a number of internal workloads being invoked in order to process the external invocation. These workloads often run in virtually or physically isolated networks. These networks and the workloads running within their perimeter may be compromised by attackers through software supply chain, privileged user compromise or other attacks. Workloads compromised through external attacks, malicious insiders or software errors can cause any or all of the following unauthorized actions:</t>
      <ul spacing="normal">
        <li>
          <t>Invocations of workloads in the network without any external invocation being present</t>
        </li>
        <li>
          <t>Arbitrary user impersonation</t>
        </li>
        <li>
          <t>Parameter modification or augmentation</t>
        </li>
      </ul>
      <t>The results of these actions are 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 external invocation.
They ensure that the identity of the user or a workload that made the external request is preserved throughout subsequent workload invocations.
They preserve any context such as:</t>
      <ul spacing="normal">
        <li>
          <t>Parameters of the original call</t>
        </li>
        <li>
          <t>Environmental factors, such as IP address of the original caller</t>
        </li>
        <li>
          <t>Any computed context that needs to be preserved in the call chain. This includes information that was not in the original request to the external endpoint.</t>
        </li>
      </ul>
      <t>Cryptographically protected Txn-Tokens ensure that downstream workloads cannot make unauthorized modifications to such information, and cannot make spurious calls without the presence of an external trigger.</t>
      <section anchor="what-are-transaction-tokens">
        <name>What are Transaction Tokens?</name>
        <t>Txn-Tokens are short-lived, signed JWTs <xref target="RFC7519"/> that assert the identity of a user or a workload and assert an authorization context. The authorization context provides information expected to remain constant during the execution of a call 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 or an OpenID Connect <xref target="OpenIdConnect"/> ID token. This workload then performs an OAuth 2.0 Token Exchange <xref target="RFC8693"/> to obtain a Txn-Token. To do this, it invokes a special Token Service (the Txn-Token Service) and provides context that is sufficient for it to generate a Txn-Token. This context MAY include:</t>
          <ul spacing="normal">
            <li>
              <t>The external authorization token (e.g., the OAuth access token)</t>
            </li>
            <li>
              <t>Parameters that are required to be bound for the duration of this call</t>
            </li>
            <li>
              <t>Additional context, such as the incoming IP address, User Agent information, or other context that can help the Txn-Token Service to issue the Txn-Token</t>
            </li>
          </ul>
          <t>The Txn-Token Service responds to a successful invocation by generating a Txn-Token. The calling workload then uses the Txn-Token to authorize its calls to subsequent workloads. Subsequent workloads may obtain Txn-Tokens 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 exercise caution in what kinds of replacement requests it supports so as to not negate the entire value of Txn-Tokens.</t>
        </section>
      </section>
      <section anchor="txn-token-lifetime">
        <name>Txn-Token Lifetime</name>
        <t>Txn-Tokens are expected to be short-lived (order of minutes, e.g., 5 minutes), and as a result MAY be used only for the expected duration of an external invocation. 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 MUST NOT exceed the lifetime of the originally presented token or credential. If a long-running process such as an batch or offline task is involved, it can use a separate mechanism to perform the external invocation, but the resulting Txn-Token is still short-lived.</t>
      </section>
      <section anchor="benefits-of-txn-tokens">
        <name>Benefits of Txn-Tokens</name>
        <t>Txn-Tokens help prevent spurious invocations by ensuring that a workload receiving an invocation can independently verify the user or workload on whose behalf an external call was made and any context relevant to the processing of the call.</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 │   │ 6
          ┌────▼───┴─────┐
          │              │
          │   Internal   │
          │ Microservice │
          │              │
          └────┬───▲─────┘
               │   │
               ▼   │
                 o
             5   o    6
                 o
               │   ▲
               │   │
          ┌────▼───┴─────┐
          │              │
          │   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 │   │ 9               │              │
          ┌────▼───┴─────┐           │              │
          │              │           │              │
          │   Internal   │           │              │
          │ Microservice │           │              │
          │              │           │              │
          └────┬───▲─────┘           │  Txn-Token   │
               │   │                 │   Service    │
               ▼   │                 │              │
                 o                   │              │
             5   o    9              │              │
               │ o ▲                 │              │
               │   │                 │              │
               │   │                 │              │
          ┌────▼───┴─────┐    6      │              │
          │              ├───────────▶              │
          │   Internal   │           │              │
          │ Microservice │    7      │              │
          │              ◀───────────│              │
          └────┬───▲─────┘           │              │
               │   │                 │              │
               ▼   │                 └──────────────┘
                 o
             8   o    9
                 o
               │   ▲
               │   │
          ┌────▼───┴─────┐
          │              │
          │   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 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 that has a short lifetime, which provides immutable information about the user or workload, certain parameters of the call and certain contextual attributes of the call.</t>
        </dd>
        <dt>Authorization Context:</dt>
        <dd>
          <t>A JSON object containing a set of claims that represent the immutable context of a call chain.</t>
        </dd>
        <dt>Transaction Token Service (Txn-Token Service):</dt>
        <dd>
          <t>A special service within the Trust Domain, which issues Txn-Tokens to requesting workloads. Each Trust Domain that uses 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.</t>
          </dd>
          <dt><tt>exp</tt>:</dt>
          <dd>
            <t>REQUIRED Expiry time of the Txn-Token as defined in <xref target="RFC7519"/></t>
          </dd>
          <dt><tt>txn</tt>:</dt>
          <dd>
            <t>REQUIRED A unique transaction identifier as defined in Section 2.2 of <xref target="RFC8417"/>. When used in the transaction token, it identifies the entire call chain. It is strongly RECOMMENDED to provide an identifier unique within the trust domain. If providing such an identifier is not possible, then a fixed value of "N_A" MAY be supplied.</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>azd</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 idenitfy the requester. Its value is a StringOrURI that uniquely identifies the method used.</t>
            </li>
            <li>
              <t><tt>req_wl</tt> The requesting workload. A StringOrURI that uniquely identifies the computational entity that requested the Txn-Token. This entity MUST be within the Trust Domain of the Txn-Token. If a replacement Txn-Token has been requested, then this claim will be an array of StringOrURIs representing the different workloads that have requested Txn-Tokens as part of the transaction processing.</t>
            </li>
          </ul>
        </section>
        <section anchor="authorization-details">
          <name>Authorizaiton Details</name>
          <t>The Txn-Token SHOULD contain an <tt>azd</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>azd</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>azd</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>azd</tt> claim:</t>
          <sourcecode type="json"><![CDATA[
"azd": {
  "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": "1686536226000",
  "aud": "trust-domain.example",
  "exp": "1686536526000",
  "txn": "97053963-771d-49cc-a4e3-20aad399c312",
  "sub": "d084sdrt234fsaw34tr23t",
  "rctx": {
    "req_ip": "69.151.72.123", // env context of external call
    "authn": "urn:ietf:rfc:6749", // env context of the external call
    "req_wl": "apigateway.trust-domain.example" // the internal entity that requested the Txn-Token
  },
  "purp" : "trade.stocks",
  "azd": {
    "action": "BUY", // parameter of external call
    "ticker": "MSFT", // parameter of external call
    "quantity": "100", // parameter of external call
    "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 defines a profile of the OAuth 2.0 Token Exchange <xref target="RFC8693"/> endpoint that can respond to Txn-Token issuance requests. This profile of the OAuth 2.0 Token Exchange <xref target="RFC8693"/> specification MUST be used to obtain Txn-Tokens. The unique properties of the Txn-Token requests and responses are described below. The Txn-Token Service MAY optionally support other OAuth 2.0 endpoints and features, but that is not a requirement for it to be a Txn-Token Service.</t>
      <t>Each Trust Domain 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 could be an inbound token received by an API Gateway, or a self-signed JWT constructed by a workload initiating a transaction, the type of which 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.</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 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>), or it MAY be a self-signed JWT, as described below, or it MAY be a custom URI agreed to between requesters and the Txn-Token Service.</t>
        <t>The Txn-Token Service MAY support other token formats, which MAY be specified in the <tt>subject_token_type</tt> parameter. Any value used in this parameter MUST be a URI as specified in RFC 8693 <xref target="RFC8693"/>.</t>
        <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>
      <section anchor="txn-token-request-processing">
        <name>Txn-Token Request Processing</name>
        <t>When the Transaction Token Service receives a Txn-Token Request it MUST validate the requesting workload client authentication and determine if that workload is authorized to obtain the Txn-Tokens with the requested values. The authorization policy for determining such issuance is out of scope for this specification.</t>
        <t>Next, the Transaction Token Service MUST validate the <tt>subject_token</tt> and determine the value to specify as the <tt>sub</tt> of the issued Txn-Token. The Txn-Token Service MUST ensure the <tt>sub</tt> value is unique within the trust domain defined by the <tt>aud</tt> claim.</t>
        <t>The Transaction Token Service MUST set the <tt>iat</tt> claim to the time of issuance of the Txn-Token.
The Transaction Token Service MUST set the <tt>aud</tt> claim to 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.
The Transaction Token Service MUST set the <tt>exp</tt> claim to the expiry time of the Txn-Token.
The Transaction Token Service MUST set the <tt>txn</tt> claim to a unique ID specific to this transaction.</t>
        <t>The Transaction Token Service MAY set the <tt>iss</tt> claim of the Txn-Token to a value defining the entity that signed the Txn-Token. This claim MUST be ommitted if not set.</t>
        <t>The Transaction Token Service MUST evaluate the value specified in the <tt>scope</tt> parameter of the request to determine the <tt>purp</tt> claim of the issued Txn-Token.</t>
        <t>If a <tt>request_context</tt> parameter is present in the Txn-Token Request, the data SHOULD be added to the <tt>rctx</tt> object of the Txn-Token. In addition, the Transaction Token Service SHOULD add the authenticated requesting workload identifier in the <tt>rctx</tt> object as the <tt>req_wl</tt> claim.</t>
        <t>If a <tt>request_details</tt> parameter is present in the Txn-Token Request, then the Transaction Token Service SHOULD propagate the data from the <tt>request_details</tt> object into the claims in the <tt>azd</tt> object as authorized by the Transaction Token Service authorization policy for the requesting client.</t>
        <t>The Transaction Token Service MAY provide additional processing and verification that is outside the scope of this specification.</t>
      </section>
      <section anchor="txn-token-response">
        <name>Txn-Token Response</name>
        <t>A successful response to a Txn-Token Request by a Transaction Token Service is called a Txn-Token Response. If the Transaction Token Service responds with an error, the error response is as described in Section 5.2 of <xref target="RFC6749"/>. The following describes required values of a Txn-Token Response:</t>
        <ul spacing="normal">
          <li>
            <t>The <tt>token_type</tt> value MUST be set to <tt>N_A</tt> per guidance in OAuth 2.0 Token Exchange <xref target="RFC8693"/></t>
          </li>
          <li>
            <t>The <tt>access_token</tt> value MUST be the Txn-Token JWT</t>
          </li>
          <li>
            <t>The <tt>issued_token_type</tt> value MUST bet set to <tt>urn:ietf:params:oauth:token-type:txn_token</tt></t>
          </li>
          <li>
            <t>The response MUST NOT include the values <tt>expires_in</tt>, <tt>refresh_token</tt> and <tt>scope</tt></t>
          </li>
        </ul>
        <t><xref target="figtxtokenresponse"/> shows a non-normative example of a Txn-Token Response.</t>
        <figure anchor="figtxtokenresponse">
          <name>Example: Txn-Token Response</name>
          <sourcecode type="http"><![CDATA[
HTTP/1.1 200 OK
Content-Type: application/json
Cache-Control: no-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 Server to replace a Txn-Token.</t>
        <t>Workloads MAY request replacement Txn-Tokens in order to change (add to, remove or modify) the asserted values within a Txn-Token.</t>
        <t>The values of the <tt>sub</tt> and <tt>aud</tt> claims MUST remain unchanged in a replacement Txn-Token. If the claim <tt>rctx</tt> is present in the original Txn-Token, then it MUST be present and unchanged in the replacement Txn-Token except for the <tt>req_wl</tt> claim which MUST be updated to include the requesting workload identifier.</t>
        <section anchor="txn-token-service-responsibilities">
          <name>Txn-Token Service Responsibilities</name>
          <t>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>SHOULD 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>
          </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. 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 Txn-Token Service MUST ensure that it authenticates any workloads requesting Txn-Tokens. In order to do so:</t>
        <ul spacing="normal">
          <li>
            <t>It MUST name a limited, pre-configured set of workloads that MAY request Txn-Tokens</t>
          </li>
          <li>
            <t>It MUST individually authenticate the requester as being one of the named requesters</t>
          </li>
          <li>
            <t>It SHOULD rely on mechanisms, such as <xref target="SPIFFE"/> used in conjunction with MTLS <xref target="RFC8446"/>, or some other means of performing MTLS, to securely authenticate the requester</t>
          </li>
          <li>
            <t>It SHOULD NOT rely on insecure mechanisms, such as long-lived shared secrets to authenticate the requesters</t>
          </li>
        </ul>
        <t>The requesting workload MUST have a pre-configured location for the Transaction Token Service. It SHOULD rely on mechanisms, such as <xref target="SPIFFE"/>, to securely authenticate the Transaction Token Service before making a Txn-Token Request.</t>
      </section>
    </section>
    <section anchor="using-txn-tokens">
      <name>Using Txn-Tokens</name>
      <t>Txn-Tokens need to be communicated between workloads that depend upon them to authorize the request. Such workloads will often present HTTP <xref target="RFC9110"/> interfaces for being invoked by other workloads. This section specifies the HTTP header the invoking workload MUST use to communicate the Txn-Token to the invoked workload, when the invoked workload presents an HTTP interface. Note that the standard HTTP <tt>Authorization</tt> header MUST NOT be used because that may be used by the workloads to communicate channel authorization.</t>
      <section anchor="txn-token-http-header">
        <name>Txn-Token HTTP Header</name>
        <t>A workload that invokes another workload using HTTP and needs to present a Txn-Token to the invoked workload MUST use the HTTP Header <tt>Txn-Token</tt> to communicate the Txn-Token. The value of this header MUST be the JWT that represents the Txn-Token.</t>
      </section>
    </section>
    <section anchor="Security">
      <name>Security Considerations</name>
      <section anchor="txn-token-lifetime-1">
        <name>Txn-Token Lifetime</name>
        <t>A Txn-Token is not resistant to replay attacks. A long-lived Txn-Token therefore represents a risk if it is stored in a file, discovered by an attacker, and then replayed. For this reason, a Txn-Token lifetime must be kept short, not exceeding the lifetime of a call-chain. Even for long-running "batch" jobs, a longer lived access token should be used to initiate the request to the batch endpoint. It then obtains short-lived Txn-Tokens that may be used to authorize the call to downstream services in the call-chain.</t>
        <t>Because Txn-Tokens are short-lived, the Txn-Token response from the Txn-Token service does not contain the <tt>refresh_token</tt> field. A Txn-Token cannot be issued by presenting a <tt>refresh_token</tt>.</t>
        <t>The <tt>expires_in</tt> and <tt>scope</tt> fields of the OAuth 2.0 Token Exchange specification <xref target="RFC8693"/> are also not used in Txn-Token responses. The <tt>expires_in</tt> is not required since the issued token has an <tt>exp</tt> field, which indicates the token lifetime. The <tt>scope</tt> field is omitted from the 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="client-authentication">
        <name>Client Authentication</name>
        <t>How requesting clients authenticate to the Transaction Token Service is out of scope for this specification. However, if using the <tt>actor_token</tt> and <tt>actor_token_type</tt> parameters of the OAuth 2.0 Token Exchange specification, both parameters MUST be present in the request. The <tt>actor_token</tt> MUST 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 client 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 not unintentional increase in authorization scope.</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> 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>Txn-Tokens SHOULD NOT be logged if they contain Personally Identifiable Information (PII). What constitutes PII depends upon the use case, but in some cases even an email address (which could be a <tt>sub</tt> value) can be protected PII, which should not be 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>
          </li>
          <li>
            <t>Common Name: Transaction Token</t>
          </li>
          <li>
            <t>Change Controller: IESG</t>
          </li>
          <li>
            <t>Specification Document Section <xref target="txn-token-request"/> of this specification</t>
          </li>
          <li>
            <t>URN: urn:ietf:params:oauth:token-type:self_signed</t>
          </li>
          <li>
            <t>Common Name: Token type for Self-signed JWT</t>
          </li>
          <li>
            <t>Change Controller: IESG</t>
          </li>
          <li>
            <t>Specification Document: Section <xref target="subject-token-types"/> of this specification</t>
          </li>
        </ul>
      </section>
      <section anchor="jwt-claims-registry-contents">
        <name>JWT Claims Registry Contents</name>
        <ul spacing="normal">
          <li>
            <t>Claim Name: <tt>azd</tt>
            </t>
            <ul spacing="normal">
              <li>
                <t>Claim Description: The authorization context details</t>
              </li>
              <li>
                <t>Change Controller: IESG</t>
              </li>
              <li>
                <t>Specification Document: Section <xref target="txn-token-claims"/> of this specification</t>
              </li>
            </ul>
          </li>
          <li>
            <t>Claim Name: <tt>rctx</tt>
            </t>
            <ul spacing="normal">
              <li>
                <t>Claim Description: The requester context</t>
              </li>
              <li>
                <t>Change Controller: IESG</t>
              </li>
              <li>
                <t>Specification Document: Section <xref target="requester-context"/> of this specification</t>
              </li>
            </ul>
          </li>
          <li>
            <t>Claim Name: <tt>purp</tt>
            </t>
            <ul spacing="normal">
              <li>
                <t>Claim Description: The purpose of the transaction</t>
              </li>
              <li>
                <t>Change Controller: IESG</t>
              </li>
              <li>
                <t>Specification Document: Section <xref target="txn-token-claims"/> of this specification</t>
              </li>
            </ul>
          </li>
        </ul>
      </section>
      <section 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>Applicant Name: Atul Tulshibagwale</t>
          </li>
          <li>
            <t>Applicant Email: atul@sgnl.ai</t>
          </li>
          <li>
            <t>Type Name: "application (RFC 2046)"</t>
          </li>
          <li>
            <t>Subtype Name: "txntoken+jwt"</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>Frabment 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"/>. 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:</t>
        <ul spacing="normal">
          <li>
            <t>Field Name: Txn-Token</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>
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <reference anchor="RFC2119">
          <front>
            <title>Key words for use in RFCs to Indicate Requirement Levels</title>
            <author fullname="S. Bradner" initials="S." surname="Bradner"/>
            <date month="March" year="1997"/>
            <abstract>
              <t>In many standards track documents several words are used to signify the requirements in the specification. These words are often capitalized. This document defines these words as they should be interpreted in IETF documents. This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="2119"/>
          <seriesInfo name="DOI" value="10.17487/RFC2119"/>
        </reference>
        <reference anchor="RFC3986">
          <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">
          <front>
            <title>The OAuth 2.0 Authorization Framework</title>
            <author fullname="D. Hardt" initials="D." role="editor" surname="Hardt"/>
            <date month="October" year="2012"/>
            <abstract>
              <t>The OAuth 2.0 authorization framework enables a third-party application to obtain limited access to an HTTP service, either on behalf of a resource owner by orchestrating an approval interaction between the resource owner and the HTTP service, or by allowing the third-party application to obtain access on its own behalf. This specification replaces and obsoletes the OAuth 1.0 protocol described in RFC 5849. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6749"/>
          <seriesInfo name="DOI" value="10.17487/RFC6749"/>
        </reference>
        <reference anchor="RFC7519">
          <front>
            <title>JSON Web Token (JWT)</title>
            <author fullname="M. Jones" initials="M." surname="Jones"/>
            <author fullname="J. Bradley" initials="J." surname="Bradley"/>
            <author fullname="N. Sakimura" initials="N." surname="Sakimura"/>
            <date month="May" year="2015"/>
            <abstract>
              <t>JSON Web Token (JWT) is a compact, URL-safe means of representing claims to be transferred between two parties. The claims in a JWT are encoded as a JSON object that is used as the payload of a JSON Web Signature (JWS) structure or as the plaintext of a JSON Web Encryption (JWE) structure, enabling the claims to be digitally signed or integrity protected with a Message Authentication Code (MAC) and/or encrypted.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7519"/>
          <seriesInfo name="DOI" value="10.17487/RFC7519"/>
        </reference>
        <reference anchor="RFC7515">
          <front>
            <title>JSON Web Signature (JWS)</title>
            <author fullname="M. Jones" initials="M." surname="Jones"/>
            <author fullname="J. Bradley" initials="J." surname="Bradley"/>
            <author fullname="N. Sakimura" initials="N." surname="Sakimura"/>
            <date month="May" year="2015"/>
            <abstract>
              <t>JSON Web Signature (JWS) represents content secured with digital signatures or Message Authentication Codes (MACs) using JSON-based data structures. Cryptographic algorithms and identifiers for use with this specification are described in the separate JSON Web Algorithms (JWA) specification and an IANA registry defined by that specification. Related encryption capabilities are described in the separate JSON Web Encryption (JWE) specification.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7515"/>
          <seriesInfo name="DOI" value="10.17487/RFC7515"/>
        </reference>
        <reference anchor="RFC8174">
          <front>
            <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
            <author fullname="B. Leiba" initials="B." surname="Leiba"/>
            <date month="May" year="2017"/>
            <abstract>
              <t>RFC 2119 specifies common key words that may be used in protocol specifications. This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the defined special meanings.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="8174"/>
          <seriesInfo name="DOI" value="10.17487/RFC8174"/>
        </reference>
        <reference anchor="RFC8693">
          <front>
            <title>OAuth 2.0 Token Exchange</title>
            <author fullname="M. Jones" initials="M." surname="Jones"/>
            <author fullname="A. Nadalin" initials="A." surname="Nadalin"/>
            <author fullname="B. Campbell" initials="B." role="editor" surname="Campbell"/>
            <author fullname="J. Bradley" initials="J." surname="Bradley"/>
            <author fullname="C. Mortimore" initials="C." surname="Mortimore"/>
            <date month="January" year="2020"/>
            <abstract>
              <t>This specification defines a protocol for an HTTP- and JSON-based Security Token Service (STS) by defining how to request and obtain security tokens from OAuth 2.0 authorization servers, including security tokens employing impersonation and delegation.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8693"/>
          <seriesInfo name="DOI" value="10.17487/RFC8693"/>
        </reference>
        <reference anchor="RFC8417">
          <front>
            <title>Security Event Token (SET)</title>
            <author fullname="P. Hunt" initials="P." role="editor" surname="Hunt"/>
            <author fullname="M. Jones" initials="M." surname="Jones"/>
            <author fullname="W. Denniss" initials="W." surname="Denniss"/>
            <author fullname="M. Ansari" initials="M." surname="Ansari"/>
            <date month="July" year="2018"/>
            <abstract>
              <t>This specification defines the Security Event Token (SET) data structure. A SET describes statements of fact from the perspective of an issuer about a subject. These statements of fact represent an event that occurred directly to or about a security subject, for example, a statement about the issuance or revocation of a token on behalf of a subject. This specification is intended to enable representing security- and identity-related events. A SET is a JSON Web Token (JWT), which can be optionally signed and/or encrypted. SETs can be distributed via protocols such as HTTP.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8417"/>
          <seriesInfo name="DOI" value="10.17487/RFC8417"/>
        </reference>
        <reference anchor="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">
          <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="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 680?>

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

-->

</rfc>
