<?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-tulshibagwale-oauth-transaction-tokens-05" 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="October" day="20"/>

    <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="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>
<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>


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

<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:
H4sIAAAAAAAAA+09TW8jOXb3+hWEG7OYXkiy5Xbb0wYaGbX7yz394W27Mdlc
2lQVZXFcqtJWlezWGF4Ee84hh8FkDznmmNMi2dOe8lPml+R9kCyyqiTbPbMB
kuygMZaqyMfHx/fNR6rf70dlJbPko0zzTO2LqlioSM8L+lRW21tbj7a2o1hW
+0Jnk1zcEwdTFZ9H5WI802Wp86xazqHf4bOT55EslNwXpYqjy7N9kctFNY2i
JI8zOYMmSSEnVb9apOVUj+XZpUxVn9r0q0JmpYwrgNav8nOVlf2th1FU6SqF
fif1W3FCbyM5HhfqAl59yvrmUSozGFNl0fnlfiREX7zRcZGXqrjQsSrpybsR
IoSfXn17Qn9pMKE+xVPoraJ7IpEVjLi9tb3d38J/ot+nZ0KXYqLTVCVABgFI
5zNZ6Vim6VKMl+LTLN0uJrHQE5HllTjTF4AITi0v9qM+dCn3xWggTvy5AwJM
lxGQpPUqL2A2xy/evobPaiZ1ui8ktPu6PMvSgdTw1MJ9MRDPU1XFU1U4kC8U
9Ff+c4J3IOe6kql4l6ka7Bm1HUxM269jbgTcMIjzmTfQ0UB8I8tSpTOZuZGO
tKpUEbygoZj6+aSqB5pT08G5bfr1zLaxA8XATYUeA3Vrsn0zEE8WxZmuh3xa
ACIK1mIpvrUve+Jo+nTgBj88ef9MHOTFPC8k8k2NxPmY2sPYVaEG0DqyA72E
9SnjaT5RmT5zg72UWabK8A2NMSpm4nWVDGrQ3HRQN/1aFjOamh3i2UC80AH5
nl3IrH7Gi350+N5bdQUtvi7nukgDUMBNx/H0UmXnMBwIqrf4oyJLqo63q9ZF
YvuysRpRlhfI4hcKpen984Pt4fDRPoj/N2p5mRdJyU+/2tnZxacnr4/5we7e
DjazogZP9h5SRxY5/v6QvpseXw13hgjiw/u39sHeDj4Yzcb6bKGrJYpcY9jd
Rw+wCQ0jtgdbrBjEMyvJBrnhHrY6VvGiUEBrlVWm4ZfHz07uI8sJ8W6ussPk
IIfFiyucrBBG8dCbp8K8Qn5SYghj6Sy2rJWdCVXABwlarxJD7i1BnkBfTqtq
Xu5vbuYARieDTFWb5VzFpXnQjxku/C1Uf/hxazCtZilBsJoDP/fNqr6VsKby
XM8WhaQXZkHfvj8M2r3Kp5l4UsgE5MNvd4S4HiZAAqBo0OONPlfQLSMt6dr7
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
wn//DTz8S/YecQAA

-->

</rfc>

