<?xml version="1.0" encoding="UTF-8"?>
  <?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
  <!-- generated by https://github.com/cabo/kramdown-rfc version 1.6.38 (Ruby 3.1.3) -->


<!DOCTYPE rfc  [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">

]>


<rfc ipr="trust200902" docName="draft-ietf-oauth-transaction-tokens-00" category="info" submissionType="IETF" xml:lang="en">
  <front>
    <title abbrev="Txn-Tokens">Transaction Tokens</title>

    <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="2023" month="November" day="29"/>

    <area>sec</area>
    <workgroup>oauth</workgroup>
    <keyword>Microservices</keyword> <keyword>OAuth</keyword> <keyword>JWT</keyword> <keyword>token exchange</keyword>

    <abstract>


<?line 102?>

<t>Transaction Tokens (Txn-Tokens) enable workloads in a trusted domain to ensure that user identity and authorization context of an external programmatic request, such as an API invocation, are preserved and available to all workloads that are invoked as part of processing such a request. Txn-Tokens also enable workloads within the trusted domain to optionally immutably assert to downstream workloads that they were invoked in the call chain of the request.</t>



    </abstract>



  </front>

  <middle>


<?line 106?>

<section anchor="introduction"><name>Introduction</name>

<t>Modern computing architectures often use multiple independently running components called workloads. In many cases, external invocations through externally visible interfaces such as APIs result in a number of internal workloads being invoked in order to process the external invocation. These workloads often run in virtually or physically isolated networks. These networks and the workloads running within their perimeter may be compromised by attackers through software supply chain, privileged user compromise or other attacks. Workloads compromised through external attacks, malicious insiders or software errors can cause any or all of the following unauthorized actions:</t>

<t><list style="symbols">
  <t>Invocations of workloads in the network without any external invocation being present</t>
  <t>Arbitrary user impersonation</t>
  <t>Parameter modification or augmentation</t>
</list></t>

<t>The results of these actions are unauthorised access to resources.</t>

</section>
<section anchor="overview"><name>Overview</name>
<t>Transaction Tokens (Txn-Token) are a means to mitigate damage from such attacks or spurious invocations. A valid Txn-Token indicates a valid external invocation.
They ensure that the identity of the user or a workload that made the external request is preserved throughout subsequent workload invocations.
They preserve any context such as:</t>

<t><list style="symbols">
  <t>Parameters of the original call</t>
  <t>Environmental factors, such as IP address of the original caller</t>
  <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>
</list></t>

<t>Cryptographically protected Txn-Tokens ensure that downstream workloads cannot make unauthorized modifications to such information, and cannot make spurious calls without the presence of an external trigger.</t>

<section anchor="what-are-transaction-tokens"><name>What are Transaction Tokens?</name>
<t>Txn-Tokens are short-lived, signed JWTs <xref target="RFC7519"/> that assert the identity of a user or a workload and assert an authorization context. The authorization context provides information expected to remain constant during the execution of a call as it passes through multiple workloads.</t>

</section>
<section anchor="creating-txn-tokens"><name>Creating Txn-Tokens</name>

<section anchor="initial-creation"><name>Initial Creation</name>
<t>Txn-Tokens are typically created when a workload is invoked using an endpoint that is externally visible, and is authorized using a separate mechanism, such as an OAuth <xref target="RFC6749"/> access token or an OpenID Connect <xref target="OpenIdConnect"/> ID token. This workload then performs an OAuth 2.0 Token Exchange <xref target="RFC8693"/> to obtain a Txn-Token. To do this, it invokes a special Token Service (the Txn-Token Service) and provides context that is sufficient for it to generate a Txn-Token. This context MAY include:</t>

<t><list style="symbols">
  <t>The external authorization token (e.g., the OAuth access token)</t>
  <t>Parameters that are required to be bound for the duration of this call</t>
  <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>
</list></t>

<t>The Txn-Token Service responds to a successful invocation by generating a Txn-Token. The calling workload then uses the Txn-Token to authorize its calls to subsequent workloads. Subsequent workloads may obtain Txn-Tokens of their own.</t>

</section>
<section anchor="replacement-txn-tokens"><name>Replacement Txn-Tokens</name>
<t>A service within a call chain may choose to replace the Txn-Token. This can typically happen if the service wants to add to the context of the current Txn-Token</t>

<t>To get a replacement Txn-Token, a service will request a new Txn-Token from the Txn-Token Service and provide the current Txn-Token and other parameters in the request. The Txn-Token service must exercise caution in what kinds of replacement requests it supports so as to not negate the entire value of Txn-Tokens.</t>

</section>
</section>
<section anchor="txn-token-lifetime"><name>Txn-Token Lifetime</name>
<t>Txn-Tokens are expected to be short-lived (order of minutes, e.g., 5 minutes), and as a result MAY be used only for the expected duration of an external invocation. If the token or other credential presented to the Txn-Token service when requesting a Txn-Token has an expiration time, then the Txn-Token MUST NOT exceed the lifetime of the originally presented token or credential. If a long-running process such as an batch or offline task is involved, it can use a separate mechanism to perform the external invocation, but the resulting Txn-Token is still short-lived.</t>

</section>
<section anchor="benefits-of-txn-tokens"><name>Benefits of Txn-Tokens</name>
<t>Txn-Tokens help prevent spurious invocations by ensuring that a workload receiving an invocation can independently verify the user or workload on whose behalf an external call was made and any context relevant to the processing of the call. Through the presence of additional signatures on the Txn-Token, a workload receiving an invocation can also independently verify that specific workloads were within the path of the call before it was invoked.</t>

</section>
<section anchor="txn-token-issuance-and-usage-flows"><name>Txn-Token Issuance and Usage Flows</name>

<section anchor="basic-flow"><name>Basic Flow</name>
<t><xref target="fig-arch-basic"/> shows the basic flow of how Txn-Tokens are used in an a multi-workload environment.</t>

<figure title="Basic Transaction Tokens Architecture" anchor="fig-arch-basic"><artwork type="ascii-art"><![CDATA[
                                                     
     1    ┌──────────────┐    2      ┌──────────────┐
─────────▶│              ├───────────▶              │
          │   External   │           │  Txn-Token   │
     7    │   Endpoint   │    3      │   Service    │
◀─────────┤              ◀───────────│              │
          └────┬───▲─────┘           └──────────────┘
               │   │                                 
             4 │   │ 6                               
          ┌────▼───┴─────┐                           
          │              │                           
          │   Internal   │                           
          │  µ-service   │                           
          │              │                           
          └────┬───▲─────┘                           
               │   │                                 
               ▼   │                                 
                 o                                   
             5   o    6                              
                 o                                   
               │   ▲                                 
               │   │                                 
          ┌────▼───┴─────┐                           
          │              │                           
          │   Internal   │                           
          │  µ-service   │                           
          │              │                           
          └──────────────┘                                        
]]></artwork></figure>

<t><list style="numbers">
  <t>External endpoint is invoked using conventional authorization mechanism such as an OAuth 2.0 Access token</t>
  <t>External endpoint provides context and incoming authorization (e.g., access token) to the Txn-Token Service</t>
  <t>Txn-Token Service mints a Txn-Token that provides immutable context for the transaction and returns it to the requester</t>
  <t>The external endpoint initiates a call to an internal microservice and provides the Txn-Token as authorization</t>
  <t>Subsequent calls to other internal microservices use the same Txn-Token to authorize calls</t>
  <t>Responses are provided to callers based on successful authorization by the invoked microservices</t>
  <t>External client is provided a response to the external invocation</t>
</list></t>

</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 title="Replacement Txn-Token Flow" anchor="fig-arch-replacement"><artwork type="ascii-art"><![CDATA[
                                                     
     1    ┌──────────────┐    2      ┌──────────────┐
─────────▶│              ├───────────▶              │
          │   External   │           │              │
     10   │   Endpoint   │    3      │              │
◀─────────┤              ◀───────────│              │
          └────┬───▲─────┘           │              │
               │   │                 │              │
             4 │   │ 9               │              │
          ┌────▼───┴─────┐           │              │
          │              │           │              │
          │   Internal   │           │              │
          │  µ-service   │           │              │
          │              │           │              │
          └────┬───▲─────┘           │  Txn-Token   │
               │   │                 │   Service    │
               ▼   │                 │              │
                 o                   │              │
             5   o    9              │              │
               │ o ▲                 │              │
               │   │                 │              │
               │   │                 │              │
          ┌────▼───┴─────┐    6      │              │
          │              ├───────────▶              │
          │   Internal   │           │              │
          │  µ-service   │    7      │              │
          │              ◀───────────│              │
          └────┬───▲─────┘           │              │
               │   │                 │              │
               ▼   │                 └──────────────┘
                 o                                   
             8   o    9                              
                 o                                   
               │   ▲                                 
               │   │                                 
          ┌────▼───┴─────┐                           
          │              │                           
          │   Internal   │                           
          │  µ-service   │                           
          │              │                           
          └──────────────┘                           
]]></artwork></figure>

<t>In the diagram above, steps 1-5 are the same as in <xref target="basic-flow"/></t>

<t><list style="numbers" start="6">
  <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>
  <t>The Txn-Token Service responds with a replacement Txn-Token</t>
  <t>The service that requested the Replacement Txn-Token uses that Txn-Token for downstream call authorization</t>
  <t>Responses are provided to callers based on successful authorization by the invoked microservices</t>
  <t>External client is provided a response to the external invocation</t>
</list></t>

</section>
</section>
</section>
<section anchor="notational-conventions"><name>Notational Conventions</name>

<t>The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL
NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED",
"MAY", and "OPTIONAL" in this document are to be interpreted as
described in BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only when,
they appear in all capitals, as shown here.</t>

</section>
<section anchor="terminology"><name>Terminology</name>

<dl>
  <dt>Workload:</dt>
  <dd>
    <t>An independent computational unit that can autonomously receive and process invocations, and can generate invocations of other workloads. Examples of workloads include containerized microservices, monolithic services and infrastructure services such as managed databases.</t>
  </dd>
  <dt>Trust Domain:</dt>
  <dd>
    <t>A virtually or physically separated network, which contains two or more workloads. The workloads within an Trust Domain may be invoked only through published interfaces. A Trust Domain must have an identifier that is used as the <spanx style="verb">aud</spanx> (audience) value in Txn-Tokens. The format of this identifier is a universal resource identifier. Each Trust Domain has exactly one Txn-Token Service.</t>
  </dd>
  <dt>External Endpoint:</dt>
  <dd>
    <t>A published interface to an Trust Domain that results in the invocation of a workload within the Trust Domain.</t>
  </dd>
  <dt>Call Chain:</dt>
  <dd>
    <t>A sequence of invocations that results from the invocation of an external endpoint.</t>
  </dd>
  <dt>Transaction Token (Txn-Token):</dt>
  <dd>
    <t>A signed JWT that has a short lifetime, which provides immutable information about the user or workload, certain parameters of the call and certain contextual attributes of the call.</t>
  </dd>
  <dt>Authorization Context:</dt>
  <dd>
    <t>A JSON object containing a set of claims that represent the immutable context of a call chain.</t>
  </dd>
  <dt>Transaction Token Service (Txn-Token Service):</dt>
  <dd>
    <t>A special service within the Trust Domain, which issues Txn-Tokens to requesting workloads. Each Trust Domain has exactly one Txn-Token Service.</t>
  </dd>
</dl>

</section>
<section anchor="txn-token-format"><name>Txn-Token Format</name>
<t>A Txn-Token is a JSON Web Token <xref target="RFC7519"/> protected by a JSON Web Signature <xref target="RFC7515"/>. The following describes the required values in a Txn-Token:</t>

<section anchor="txn-token-header"><name>JWT Header</name>
<t>In the JWT Header:</t>

<t><list style="symbols">
  <t>The <spanx style="verb">typ</spanx> claim MUST be present and MUST have the value <spanx style="verb">txn_token</spanx>.</t>
  <t>Key rotation of the signing key SHOULD be supported through the use of a <spanx style="verb">kid</spanx> claim.</t>
</list></t>

<t><xref target="figtxtokenheader"/> is a non-normative example of the JWT Header of a Txn-Token</t>

<figure title="Example: Txn-Token Header" anchor="figtxtokenheader"><sourcecode type="json"><![CDATA[
{
    "typ": "txn_token",
    "alg": "RS256",
    "kid": "identifier-to-key"
}
]]></sourcecode></figure>

</section>
<section anchor="txn-token-body"><name>JWT Body</name>

<section anchor="txn-token-claims"><name>Required Claims</name>
<t>The JWT body MUST have the following claims:</t>

<t><list style="symbols">
  <t>An <spanx style="verb">iss</spanx> claim, whose value is a URN <xref target="RFC8141"/> that uniquely identifies the workload or the Txn-Token Service that created the Txn-Token.</t>
  <t>An <spanx style="verb">iat</spanx> claim, whose value is the time at which the Txn-Token was created.</t>
  <t>An <spanx style="verb">aud</spanx> claim, whose value is a URN <xref target="RFC8141"/> that uniquely identifies the audience of the Txn-Token. This MUST identify the trust domain in which the Txn-Token is used.</t>
  <t>An <spanx style="verb">exp</spanx> claim, whose value is the time at which the Txn-Token expires.</t>
  <t>A <spanx style="verb">txn</spanx> claim, whose value is the unique transaction identifier as defined in Section 2.2 of <xref target="RFC8417"/>. When used in the transaction token, it identifies the entire call chain.</t>
  <t>A <spanx style="verb">sub_id</spanx> claim, whose value is the unique identifier of the user or workload on whose behalf the call chain is being executed. The format of this claim MAY be a Subject Identifier as specified in <xref target="SubjectIdentifiers"/>.</t>
  <t>An <spanx style="verb">azd</spanx> claim, whose value is a JSON object that contains values that remain constant in the call chain.</t>
</list></t>

</section>
<section anchor="optional-claims"><name>Optional Claims</name>
<t>The JWT body MAY have the following claims:</t>

<section anchor="requester-context"><name>Requester Context</name>
<t>The Txn-Token MAY contain an <spanx style="verb">req_ctx</spanx> claim, whose value is a JSON object the describes the requester context of the transaction. This MAY include the IP address information of the originating user, as well as information about the computational entity that requested the Txn-Token.</t>

<t>The JSON value of the <spanx style="verb">req_ctx</spanx> 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>

<t><list style="symbols">
  <t><spanx style="verb">req_ip</spanx> The IP address of the requester. This MAY be the end-user or a robotic process that requested the Transaction</t>
  <t><spanx style="verb">authn</spanx> The authentication method used to idenitfy the requester. Its value is a URN that uniquely identifies the method used.</t>
  <t><spanx style="verb">req_wl</spanx> The requesting workload. A URN that uniquely identifies the computational entity that requested the Txn-Token. This entity MUST be within the Trust Domain of the Txn-Token.</t>
</list></t>

</section>
<section anchor="purpose"><name>Purpose</name>
<t>The Txn-Token MAY contain a <spanx style="verb">purp</spanx> claim, whose value specifies the purpose of the transaction. The format of this claim is a JSON string.</t>

</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 title="Example: Txn-Token Body" anchor="figleaftxtokenbody"><sourcecode type="json"><![CDATA[
{
    "iss": "https://trust-domain.example/txn-token-service",
    "iat": "1686536226000",
    "aud": "trust-domain.example",
    "exp": "1686536526000",
    "txn": "97053963-771d-49cc-a4e3-20aad399c312",
    "sub_id": {
        "format": "email",
        "email": "user@trust-domain.example"
    },
    "req_ctx": {
      "req_ip": "69.151.72.123", // env context of external call
      "authn": "urn:ietf:rfc:6749", // env context of the external call
      "req_wl": "apigateway.trust-domain.example" // the internal entity that requested the Txn-Token
    },
    "purp" : "trade.stocks",
    "azd": {
        "action": "BUY", // parameter of external call
        "ticker": "MSFT", // parameter of external call
        "quantity": "100", // parameter of external call
        "user_level": "vip" // computed value not present in external call
    }
}
]]></sourcecode></figure>

</section>
</section>
</section>
<section anchor="txn-token-service"><name>Txn-Token Service</name>
<t>A Txn-Token Service provides a OAuth 2.0 Token Exchange <xref target="RFC8693"/> endpoint that can respond to Txn-Token issuance requests. The token exchange requests it supports require extra parameters than those defined in the OAuth 2.0 Token Exchange <xref target="RFC8693"/> specification. The unique properties of the Txn-Token requests and responses are described below. The Txn-Token Service MAY optionally support other OAuth 2.0 endpoints and features, but that is not a requirement for it to be a Txn-Token Service.</t>

<t>Each Trust Domain MUST have exactly one 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 OAuth 2.0 Token Exchange <xref target="RFC8693"/>. 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. A Txn-Token Request is a Token Exchange Request, as described in Section 2.1 of <xref target="RFC8693"/> with additional parameters. A Txn-Token Response is a OAuth 2.0 token endpoint response, as described in Section 5 of <xref target="RFC6749"/>, where the <spanx style="verb">token_type</spanx> in the response has the value <spanx style="verb">txn_token</spanx>.</t>

<section anchor="txn-token-request"><name>Txn-Token Request</name>
<t>A Txn-Token Request is an OAuth 2.0 Token Exchange Request, as described in Section 2.1 of <xref target="RFC8693"/>, with an additional parameter in the request. The following parameters are required in the Txn-Token Request by the OAuth 2.0 Token Exchange specification <xref target="RFC8693"/>:</t>

<t><list style="symbols">
  <t>The <spanx style="verb">audience</spanx> value MUST be set to the Trust Domain name</t>
  <t>The <spanx style="verb">requested_token_type</spanx> value MUST be <spanx style="verb">urn:ietf:params:oauth:token-type:txn_token</spanx></t>
  <t>The <spanx style="verb">subject_token</spanx> value MUST be the external token received by the workload that authorized the call</t>
  <t>The <spanx style="verb">subject_token_type</spanx> value MUST be present and indicate the type of the authorization token present in the <spanx style="verb">subject_token</spanx> parameter</t>
</list></t>

<t>The following additional parameter MUST be present in a Txn-Token Request:</t>

<t><list style="symbols">
  <t>A parameter named <spanx style="verb">rctx</spanx> , whose value is a JSON object. This object contains the request context, i.e. any information the Transaction Token Service needs to understand the context of the incoming request</t>
</list></t>

<t><xref target="figtxtokenrequest"/> shows a non-normative example of a Txn-Token Request.</t>

<figure title="Example: Txn-Token Request" anchor="figtxtokenrequest"><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

requested_token_type=urn%3Aietf%3Aparams%3Aoauth%3Atoken-type%3Atxn_token
&audience=http%3A%2F%2Ftrust-domain.example
&subject_token=eyJhbGciOiJFUzI1NiIsImtpZC...kdXjwhw
&subject_token_type=urn%3Aietf%3Aparams%3Aoauth%3Atoken-type%3Aaccess_token
&rctx=%7B%22param1%22%3A%22value1%22%2C%22param2%22%3A%22value2%22%2C%22ip_address%22%3A%2269.151.72.123%22%7D
]]></sourcecode></figure>

</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>

<t><list style="symbols">
  <t>The <spanx style="verb">token_type</spanx> value MUST be set to <spanx style="verb">txn_token</spanx></t>
  <t>The <spanx style="verb">access_token</spanx> value MUST be the Txn-Token</t>
  <t>The response MUST NOT include the values <spanx style="verb">expires_in</spanx>, <spanx style="verb">refresh_token</spanx> and <spanx style="verb">scope</spanx></t>
</list></t>

<t><xref target="figtxtokenresponse"/> shows a non-normative example of a Txn-Token Response.</t>

<figure title="Example: Txn-Token Response" anchor="figtxtokenresponse"><sourcecode type="http"><![CDATA[
HTTP/1.1 200 OK
Content-Type: application/json
Cache-Control: no-cache, no-store

{
  "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 value of the <spanx style="verb">aud</spanx> claim MUST remain unchanged in a replacement Txn-Token. If the claim <spanx style="verb">req_ctx</spanx> is present in the original Txn-Token, then it MUST be present unchanged in the replacement Txn-Token.</t>

<section anchor="txn-token-service-responsibilities"><name>Txn-Token Service Responsibilities</name>
<t>A Txn-Token Service replacing a Txn-Token must consider that modifying previously asserted values from existing Txn-Tokens can completely negate the benefits of Txn-Tokens. When issuing replacement Txn-Tokens, a Transaction Token Server therefore:</t>

<t><list style="symbols">
  <t>MAY enable modifications to asserted values that reduce the scope of permitted actions</t>
  <t>MAY enable additional asserted values</t>
  <t>SHOULD NOT enable modification to asserted values that expand the scope of permitted actions</t>
</list></t>

</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 <spanx style="verb">subject_token</spanx> parameter.</t>

</section>
<section anchor="replacement-txn-token-response"><name>Replacement Txn-Token Response</name>
<t>A successful response by the Transaction Token Server to a Replacement Txn-Token Request is a Txn-Token Response as described in <xref target="txn-token-response"/></t>

</section>
</section>
<section anchor="mutual-authentication-of-the-txn-token-request"><name>Mutual Authentication of the Txn-Token Request</name>
<t>A Txn-Token Service MUST ensure that it authenticates any workloads requesting Txn-Tokens. In order to do so:</t>

<t><list style="symbols">
  <t>It MUST name a limited, pre-configured set of workloads that MAY request Txn-Tokens</t>
  <t>It MUST individually authenticate the requester as being one of the named requesters</t>
  <t>It SHOULD rely on mechanisms, such as <xref target="Spiffe"/> or some other means of performing MTLS <xref target="RFC8446"/>, to securely authenticate the requester</t>
  <t>It SHOULD NOT rely on insecure mechanisms, such as long-lived shared secrets to authenticate the requesters</t>
</list></t>

<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="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 <spanx style="verb">refresh_token</spanx> field. A Txn-Token cannot be issued by presenting a <spanx style="verb">refresh_token</spanx>.</t>

<t>The <spanx style="verb">expires_in</spanx> and <spanx style="verb">scope</spanx> fields of the OAuth 2.0 Token Exchange specification <xref target="RFC8693"/> are also not used in Txn-Token responses. The <spanx style="verb">expires_in</spanx> is not required since the issued token has an <spanx style="verb">exp</spanx> field, which indicates the token lifetime. The <spanx style="verb">scope</spanx> field is omitted from the request and therefore omitted in the response.</t>

</section>
<section anchor="sender-constrained-tokens"><name>Sender Constrained Tokens</name>
<t>Although Txn-Tokens are short-lived, they MAY be sender constrained as an additional layer of defence to prevent them from being re-used by a compromised or malicious workload under the control of a hostile actor.</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>
<section anchor="Privacy"><name>Privacy Considerations</name>

<section anchor="obsfucation-of-personal-information"><name>Obsfucation of Personal Information</name>
<t>Some <spanx style="verb">req_ctx</spanx> claims may be considered personal information in some jurisdictions
and if so their values need to be obsfucated. For example, originating IP address
(<spanx style="verb">req_ip</spanx>) is often considerd personal information and in that case must be
protected through some obsfucation method (e.g. SHA256).</t>

</section>
</section>
<section anchor="IANA"><name>IANA Considerations</name>

<t>This specification registers the following claims defined in Section <xref target="txn-token-header"/> to the OAuth Access Token Types Registry defined in <xref target="RFC6749"/>, and the following claims defined in Section <xref target="txn-token-claims"/> in the IANA JSON Web Token Claims Registry defined in <xref target="RFC7519"/></t>

<section anchor="oauth-registry-contents"><name>OAuth Registry Contents</name>

<t><list style="symbols">
  <t>Name: <spanx style="verb">txn_token</spanx></t>
  <t>Description: JWT of type Transaction Token</t>
  <t>Additional Token Endpoint Response Parameters: none</t>
  <t>HTTP Authentication Schemes: TLS <xref target="RFC8446"/></t>
  <t>Change Controller: IESG</t>
  <t>Specification Document: Section <xref target="txn-token-header"/> of this specificaiton</t>
</list></t>

</section>
<section anchor="jwt-registry-contents"><name>JWT Registry Contents</name>

<t><list style="symbols">
  <t>Claim Name: <spanx style="verb">azd</spanx>
  <list style="symbols">
      <t>Claim Description: The authorization context details</t>
      <t>Change Controller: IESG</t>
      <t>Specification Document: Section <xref target="txn-token-claims"/> of this specification</t>
    </list></t>
  <t>Claim Name: <spanx style="verb">req_ctx</spanx>
  <list style="symbols">
      <t>Claim Description: The requester context</t>
      <t>Change Controller: IESG</t>
      <t>Specification Document: Section <xref target="requester-context"/> of this specification</t>
    </list></t>
  <t>Claim Name: <spanx style="verb">purp</spanx>
  <list style="symbols">
      <t>Claim Description: The purpose of the transaction</t>
      <t>Change Controller: IESG</t>
      <t>Specification Document: Section <xref target="purpose"/> of this specification</t>
    </list></t>
</list></t>

</section>
</section>


  </middle>

  <back>


    <references title='Normative References'>



<reference anchor="RFC2119">
  <front>
    <title>Key words for use in RFCs to Indicate Requirement Levels</title>
    <author fullname="S. Bradner" initials="S." surname="Bradner"/>
    <date month="March" year="1997"/>
    <abstract>
      <t>In many standards track documents several words are used to signify the requirements in the specification. These words are often capitalized. This document defines these words as they should be interpreted in IETF documents. This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
    </abstract>
  </front>
  <seriesInfo name="BCP" value="14"/>
  <seriesInfo name="RFC" value="2119"/>
  <seriesInfo name="DOI" value="10.17487/RFC2119"/>
</reference>

<reference anchor="RFC8446">
  <front>
    <title>The Transport Layer Security (TLS) Protocol Version 1.3</title>
    <author fullname="E. Rescorla" initials="E." surname="Rescorla"/>
    <date month="August" year="2018"/>
    <abstract>
      <t>This document specifies version 1.3 of the Transport Layer Security (TLS) protocol. TLS allows client/server applications to communicate over the Internet in a way that is designed to prevent eavesdropping, tampering, and message forgery.</t>
      <t>This document updates RFCs 5705 and 6066, and obsoletes RFCs 5077, 5246, and 6961. This document also specifies new requirements for TLS 1.2 implementations.</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="8446"/>
  <seriesInfo name="DOI" value="10.17487/RFC8446"/>
</reference>

<reference anchor="RFC6749">
  <front>
    <title>The OAuth 2.0 Authorization Framework</title>
    <author fullname="D. Hardt" initials="D." role="editor" surname="Hardt"/>
    <date month="October" year="2012"/>
    <abstract>
      <t>The OAuth 2.0 authorization framework enables a third-party application to obtain limited access to an HTTP service, either on behalf of a resource owner by orchestrating an approval interaction between the resource owner and the HTTP service, or by allowing the third-party application to obtain access on its own behalf. This specification replaces and obsoletes the OAuth 1.0 protocol described in RFC 5849. [STANDARDS-TRACK]</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="6749"/>
  <seriesInfo name="DOI" value="10.17487/RFC6749"/>
</reference>

<reference anchor="RFC7519">
  <front>
    <title>JSON Web Token (JWT)</title>
    <author fullname="M. Jones" initials="M." surname="Jones"/>
    <author fullname="J. Bradley" initials="J." surname="Bradley"/>
    <author fullname="N. Sakimura" initials="N." surname="Sakimura"/>
    <date month="May" year="2015"/>
    <abstract>
      <t>JSON Web Token (JWT) is a compact, URL-safe means of representing claims to be transferred between two parties. The claims in a JWT are encoded as a JSON object that is used as the payload of a JSON Web Signature (JWS) structure or as the plaintext of a JSON Web Encryption (JWE) structure, enabling the claims to be digitally signed or integrity protected with a Message Authentication Code (MAC) and/or encrypted.</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="7519"/>
  <seriesInfo name="DOI" value="10.17487/RFC7519"/>
</reference>

<reference anchor="RFC7515">
  <front>
    <title>JSON Web Signature (JWS)</title>
    <author fullname="M. Jones" initials="M." surname="Jones"/>
    <author fullname="J. Bradley" initials="J." surname="Bradley"/>
    <author fullname="N. Sakimura" initials="N." surname="Sakimura"/>
    <date month="May" year="2015"/>
    <abstract>
      <t>JSON Web Signature (JWS) represents content secured with digital signatures or Message Authentication Codes (MACs) using JSON-based data structures. Cryptographic algorithms and identifiers for use with this specification are described in the separate JSON Web Algorithms (JWA) specification and an IANA registry defined by that specification. Related encryption capabilities are described in the separate JSON Web Encryption (JWE) specification.</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="7515"/>
  <seriesInfo name="DOI" value="10.17487/RFC7515"/>
</reference>

<reference anchor="RFC8141">
  <front>
    <title>Uniform Resource Names (URNs)</title>
    <author fullname="P. Saint-Andre" initials="P." surname="Saint-Andre"/>
    <author fullname="J. Klensin" initials="J." surname="Klensin"/>
    <date month="April" year="2017"/>
    <abstract>
      <t>A Uniform Resource Name (URN) is a Uniform Resource Identifier (URI) that is assigned under the "urn" URI scheme and a particular URN namespace, with the intent that the URN will be a persistent, location-independent resource identifier. With regard to URN syntax, this document defines the canonical syntax for URNs (in a way that is consistent with URI syntax), specifies methods for determining URN-equivalence, and discusses URI conformance. With regard to URN namespaces, this document specifies a method for defining a URN namespace and associating it with a namespace identifier, and it describes procedures for registering namespace identifiers with the Internet Assigned Numbers Authority (IANA). This document obsoletes both RFCs 2141 and 3406.</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="8141"/>
  <seriesInfo name="DOI" value="10.17487/RFC8141"/>
</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="OpenIdConnect" target="https://openid.net/specs/openid-connect-core-1_0.html">
  <front>
    <title>OpenID Connect Core 1.0 incorporating errata set 1</title>
    <author initials="N." surname="Sakimura" fullname="Nat Sakimura">
      <organization>NRI</organization>
    </author>
    <author initials="J." surname="Bradley" fullname="John Bradley">
      <organization>Ping Identity</organization>
    </author>
    <author initials="M." surname="Jones" fullname="Mike Jones">
      <organization>Microsoft</organization>
    </author>
    <author initials="B. de" surname="Medeiros" fullname="B. de Medeiros">
      <organization>Google</organization>
    </author>
    <author initials="C." surname="Mortimore" fullname="Chuck Mortimore">
      <organization>Salesforce</organization>
    </author>
    <date year="2014" month="November"/>
  </front>
</reference>
<reference anchor="SubjectIdentifiers" target="https://datatracker.ietf.org/doc/html/draft-ietf-secevent-subject-identifiers">
  <front>
    <title>Subject Identifiers for Security Event Tokens</title>
    <author initials="A." surname="Backman" fullname="Annabelle Backman">
      <organization>Amazon</organization>
    </author>
    <author initials="M." surname="Scurtescu" fullname="Martin Scurtescu">
      <organization>Coinbase</organization>
    </author>
    <author initials="P." surname="Jain" fullname="Prachi Jain">
      <organization>Fastly</organization>
    </author>
    <date year="n.d."/>
  </front>
</reference>


    </references>

    <references title='Informative References'>

<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 year="n.d."/>
  </front>
</reference>


    </references>


<?line 507?>

<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="H." surname="Tschofenig" fullname="Hannes Tschofenig">
      <organization>Arm Ltd.</organization>
      <address>
        <email>Hannes.Tschofenig@arm.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="A." surname="Schwenkschuster" fullname="Arndt Schwenkschuster">
      <organization>Microsoft</organization>
      <address>
        <email>arndts@microsoft.com</email>
      </address>
    </contact>
    </section>

  </back>

<!-- ##markdown-source:
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
2I1yAAA=

-->

</rfc>

