<?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-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="28"/>

    <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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
zaNP+vVdsSIf53iFvb5z3EZ9TRU4McZLsjN3bQy3LLbpJmARJyy58DYKMKuu
jNj2ADqsyqa+WKsjvGEHduVXKUPQYZSiz3jrmPcnO8ajaWmNuRV2dFubGe4/
XhRzZNXrB3P+tJbTxRm26uRyKx55NWawFWy8QgDXggJIGxBoRJyxpwgusLnQ
mOb0CDIZUyUnxgwjG8pmPN/BbiQZGVqN+22zEcwmNAVtmQnS9n3W9gMz6GZt
oBlutHYkWDnYebj7+e6Tx7vb27tbW1vO7lyQjdk1oG0Cyt7r/iToDnPiu6d7
W08eP9193N/bGyb9nadx3Jc76nF/e0vK5PHTp/Hj4bbtwooXel27IPoG7wSO
RIV4TFOenR7AG2TOLzvhpMY3Zngj7rzxN1gm4Bi7TwfDJ8PB3vZguP14oyc2
NzGn3Jf3wQ0BOwDxNsFQZPtYCmW/mMT7eGWxc4wgwumPwyyKA8k53QG/kstB
55JwVI4luNDBrbwYoAFpf0PQzoLVPyirPL4o3aZ/38A/cwUC9uz9b3lNLhyw
Ciu4+xoLGmC3NycvT+/e73cLScshskJiumtHpIEPqbpUhMRL2FTs6a5vsxDA
C1LWndRZx1A3of/UYN41HhQ6TOQ/dWTujTrUp4vKyLvdPQ1v22JE1RwpoN7w
7XhzL8OeoLA4Cyu4dd8iM349IqWQfsgHZkSBjeLSM8eRvu4Eub2DUlfisOYz
4GCuikrXgaJ6IfUJEOUm+scUjSy0VUcuqBi8Ai1mnSbgXENuEcszTRTfyLH3
nzhGimQjLYJm4SXccXD91g9XtuI8tR98e7TnXa2mgyuZ3q0gd0TWOBaT7UxZ
hxROgL3Lvg18a6H76rMZjTSkMTm0qxvjt3vnTtrwNpV/lOROf1Z15NcU1W4O
x/q4sYJ6Kj9dMXAfh7X7yBTKZ3L1qV9N+815a2B9tjXcZTnUrmk1DE8cBHy3
HS0VZU5fz2i0D1gh8qw+qTQTT02gviPwFd7PsijyYzNmL2+iVbhccw3+E9Da
syeqnajtvCJbG+6e+AkumOvmBUwLvzmFXLmAQAr5YNahRxtZOTPotSYrhqBt
VrbPzlhjzPZ1eveDv33hOGfORKDVlftU1nOfN4cqgtb7acc15dTM08aAgTFR
GbFJ53GJxUdYrsUrw2Cd9c6JOsH3w7C2tgwbz9DYCvCukgKewq061uS2mt3U
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
XIhyAAA=

-->

</rfc>

