<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE rfc [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">
]>
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
<!-- generated by https://github.com/cabo/kramdown-rfc version 1.7.39 (Ruby 3.2.3) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-araut-oauth-transactiontokens-bcp-00" category="info" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.34.0 -->
  <front>
    <title>OAuth Transaction Tokens Best Current Practice</title>
    <seriesInfo name="Internet-Draft" value="draft-araut-oauth-transactiontokens-bcp-00"/>
    <author fullname="ASHAY RAUT">
      <organization>Amazon</organization>
      <address>
        <email>asharaut@amazon.com</email>
      </address>
    </author>
    <date year="2026" month="July" day="20"/>
    <area>AREA</area>
    <workgroup>WG Working Group</workgroup>
    <keyword>next generation</keyword>
    <keyword>unicorn</keyword>
    <keyword>sparkling distributed ledger</keyword>
    <abstract>
      <?line 33?>

<t>This document provides best current practices for implementing and deploying OAuth 2.0 Transaction Tokens as specified in draft-ietf-oauth-transaction-tokens. Transaction Tokens (Txn-Tokens) enable workloads in a trusted domain to preserve and propagate user identity and authorization context across service boundaries during the processing of external programmatic requests. This BCP addresses practical deployment considerations including token service architecture, size management, propagation patterns, validation strategies, and operational monitoring that are essential for secure and effective implementation in production environments.</t>
    </abstract>
    <note removeInRFC="true">
      <name>About This Document</name>
      <t>
        The latest revision of this draft can be found at <eref target="https://example.com/LATEST"/>.
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-araut-oauth-transactiontokens-bcp/"/>.
      </t>
      <t>Source for this draft and an issue tracker can be found at
        <eref target="https://github.com/ashayraut/oauth-transactiontokens-best-current-practice"/>.</t>
    </note>
  </front>
  <middle>
    <?line 38?>

<section anchor="introduction">
      <name>Introduction</name>
      <section anchor="background">
        <name>Background</name>
        <t>Modern distributed systems built on microservice architectures face a fundamental challenge: maintaining security context as requests traverse multiple service boundaries. When an external actor initiates an API request, the user identity and authorization context must be preserved and made available to all downstream internal microservices involved in processing that request. Without a standardized mechanism, organizations resort to ad-hoc solutions that introduce security vulnerabilities, operational complexity, and interoperability challenges.</t>
        <t>The OAuth 2.0 Transaction Tokens specification (draft-ietf-oauth-transaction-tokens) addresses this challenge by defining a token format and exchange protocol that enables secure context propagation across internal microservices within trusted domains. However, the specification focuses on protocol mechanics rather than deployment practices. Real-world implementations face additional challenges including latency constraints, token size limitations, schema evolution, propagation reliability, and operational monitoring.</t>
      </section>
      <section anchor="purpose-of-the-bcp">
        <name>Purpose of the BCP</name>
        <t>This Best Current Practice document provides implementers with guidance derived from production deployments of Txn-Token systems. It addresses practical considerations that fall outside the scope of the protocol specification but are critical for successful deployment. The recommendations in this document are based on operational experience with large-scale microservice environments where hundreds of internal microservices must coordinate security context propagation across complex call chains.</t>
        <t>This BCP is intended for:
- Organizations implementing Transaction Token Services
- internal microservice developers integrating Txn-Token support
- Security architects designing authorization systems
- Operations teams monitoring token propagation</t>
      </section>
    </section>
    <section anchor="conventions-and-definitions">
      <name>Conventions and Definitions</name>
      <t>The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", "<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL
NOT</bcp14>", "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", "<bcp14>RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>",
"<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" 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>
      <?line -18?>

<t>The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", "<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL NOT</bcp14>", "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", "<bcp14>RECOMMENDED</bcp14>", "<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" in this document are to be interpreted as described in RFC 2119.
This document uses terminology from draft-ietf-oauth-transaction-tokens including "Transaction Token" (Txn-Token), "Transaction Token Service", "trusted domain", and "authorization context".</t>
    </section>
    <section anchor="best-current-practices">
      <name>Best Current Practices</name>
      <t>## Transaction Token Service Implementation
### Service Architecture
Organizations <bcp14>SHOULD</bcp14> setup Transaction Token Service (TTS) which hosts functionality to issue token, replace token and other Txn-Token related functionality. Organizations <bcp14>SHOULD</bcp14> prefer architectures where the authorization service that authenticates and authorizes external actors, invokes the TTS for getting Transaction Token as part of authentication and authorization requests and pass Txn-token as well with it. This way, it avoids an explicit calls from external endpoint to TTS and lesser code changes in external services. Additionally, all internal microservices that want to replace tokens <bcp14>SHOULD</bcp14> connect directly to TTS. This architecture strikes balance between the options to either have authorization service host all TTS functionality or external services needing to connect TTS.</t>
      <section anchor="context-selection">
        <name>Context Selection</name>
        <t>Transaction Token Services <bcp14>MUST</bcp14> include all mandatory claims defined in draft-ietf-oauth-transaction-tokens. However, services <bcp14>SHOULD NOT</bcp14> include all optional contexts by default. Optional contexts such as transaction context (tctx) or custom claims <bcp14>MUST</bcp14> be added only when explicitly requested.</t>
        <t>Organizations <bcp14>SHOULD</bcp14> provide client libraries that offer interfaces for requesting Txn-Tokens with specific optional contexts. This approach prevents token bloat while ensuring that services can obtain the context they require. When an optional context cannot be added due to parsing errors, format violations, or unavailability, the Transaction Token Service <bcp14>MUST NOT</bcp14> fail the token issuance. Instead, it <bcp14>SHOULD</bcp14> issue the token without that specific context and <bcp14>MAY</bcp14> log the condition for operational monitoring.</t>
      </section>
      <section anchor="token-size-management">
        <name>Token Size Management</name>
        <t>### Size Limits
Transaction Token Services <bcp14>MUST NOT</bcp14> issue tokens larger than 4KB. While HTTP specifications do not mandate maximum header sizes, common web server implementations impose limits to prevent Denial of Service attacks. Apache defaults to 8KB maximum header size, but organizations must account for other headers in the same request. A 4KB limit for Txn-Tokens provides reasonable headroom while preventing operational issues.</t>
        <t>Organizations <bcp14>SHOULD</bcp14> implement monitoring on token size to detect trends toward the limit. Services that consistently approach size limits indicate either excessive context inclusion or the need for context relocation strategies.</t>
        <section anchor="context-relocation">
          <name>Context Relocation</name>
          <t>When authorization context exceeds 4KB, Transaction Token Services <bcp14>SHOULD</bcp14> implement a relocation endpoint. The service stores oversized contexts in a separate data store using the Txn-Token identifier as the primary key. The Txn-Token itself contains only a reference to the relocated context.</t>
          <t>Client libraries for token validation <bcp14>SHOULD</bcp14> transparently handle context relocation. When an internal microservice requests a context that has been relocated, the library fetches it from the relocation endpoint. This pattern mirrors Policy Information Points in Attribute-Based Access Control (ABAC) systems where additional attributes are retrieved at runtime.</t>
          <t>Context relocation introduces additional latency and failure modes. Organizations <bcp14>SHOULD</bcp14> treat relocation as an exception rather than the normal case. Monitoring <bcp14>SHOULD</bcp14> track relocation frequency to identify services that consistently require excessive context.</t>
        </section>
      </section>
      <section anchor="token-lifetime-and-expiration">
        <name>Token Lifetime and Expiration</name>
        <t>Transaction tokens <bcp14>SHOULD</bcp14> have a time-to-live of less than 5 minutes. Organizations <bcp14>SHOULD</bcp14> determine appropriate lifetimes by working backward from latency Service Level Agreements (SLAs) defined for external endpoints.</t>
        <t>Short token lifetimes reduce the window for token compromise and limit the impact of token mix-up scenarios. However, lifetimes must accommodate the longest expected call chains in the SOA. Organizations <bcp14>SHOULD</bcp14> measure actual request processing times and set token lifetimes to exceed the 99th percentile by a reasonable margin.</t>
        <t>While the TTS <bcp14>MAY</bcp14> support per-use-case token lifetimes, organizations <bcp14>SHOULD</bcp14> prefer a single uniform lifetime across all use cases. Per-use-case lifetimes add configuration complexity and make it harder to reason about expiration behavior across call chains. A uniform lifetime simplifies operations and enables centralized tracking of expired tokens.</t>
        <t>When tokens expire during request processing, services <bcp14>MUST NOT</bcp14> automatically request new tokens. Expired tokens indicate either excessively long call chains or performance problems that require investigation. Services <bcp14>SHOULD</bcp14> fail requests with expired tokens and emit telemetry for operational monitoring. Organizations <bcp14>SHOULD</bcp14> track token expiration centrally to identify which services or call chains consistently produce expired tokens and why — enabling targeted investigation rather than blanket lifetime increases.</t>
      </section>
      <section anchor="schema-governance">
        <name>Schema Governance</name>
        <t>### Context Visibility
Organizations <bcp14>MUST</bcp14> govern the contexts added to Txn-Tokens. Once a context appears in a Txn-Token, it becomes visible to all services in the call chain. Services may develop dependencies on these contexts in ways not anticipated by the context provider. This phenomenon follows Hyrum's Law: with sufficient consumers, all observable behaviors of a system will be depended upon by somebody.</t>
        <t>Before adding a new context to Txn-Tokens, organizations <bcp14>MUST</bcp14> consider the implications of making that context universally visible. If a context represents an identifier or concept known only to services early in the call chain, adding it to the Txn-Token exposes it to all downstream services. Those services may develop business logic dependencies on the context, not just security dependencies.</t>
        <t>When the format or semantics of a widely-visible context must change, the organization faces a painful migration process. All services that depend on the context must be identified, updated, and deployed. Organizations <bcp14>SHOULD</bcp14> prefer adding new contexts with different names rather than changing existing contexts when semantic changes are required.</t>
        <section anchor="backward-compatibility">
          <name>Backward Compatibility</name>
          <t>Organizations <bcp14>MUST</bcp14> implement backward compatibility tests for Txn-Token contexts. Automated tests <bcp14>SHOULD</bcp14> verify that changes to context format or structure do not break existing consumers. These tests <bcp14>SHOULD</bcp14> run as part of the continuous integration pipeline for the Transaction Token Service.</t>
          <t>Backward compatibility testing becomes increasingly important as the number of services consuming Txn-Tokens grows. Without automated verification, format changes risk cascading failures across the SOA.</t>
        </section>
      </section>
      <section anchor="token-propagation">
        <name>Token Propagation</name>
        <t>### Propagation Control
Organizations <bcp14>MUST</bcp14> prevent Txn-Tokens from propagating outside the trusted domain. While tokens contain encrypted sensitive data, organizations <bcp14>SHOULD</bcp14> implement explicit controls to block external propagation. Propagation libraries <bcp14>MUST</bcp14> detect when an internal microservice attempts to include a Txn-Token in a request to an external endpoint and <bcp14>MUST</bcp14> remove the token from that request.</t>
        <t>This defense-in-depth approach protects against misconfiguration and implementation errors. Even if token encryption remains secure, preventing external propagation eliminates entire classes of potential vulnerabilities.</t>
        <section anchor="propagation-denylist">
          <name>Propagation Denylist</name>
          <t>In addition to preventing external propagation, organizations <bcp14>SHOULD</bcp14> maintain a denylist of internal services that <bcp14>MUST NOT</bcp14> participate in token propagation. This addresses scenarios where specific services within the trusted domain should not receive or forward tokens due to architectural constraints, security requirements, or known incompatibilities.</t>
          <section anchor="use-cases-for-denylisting">
            <name>Use Cases for Denylisting</name>
            <ul spacing="normal">
              <li>
                <t>Services undergoing decommissioning that cannot be updated to handle tokens correctly</t>
              </li>
              <li>
                <t>Internal services that proxy to external endpoints (defense in depth)</t>
              </li>
              <li>
                <t>Services with known token handling bugs that cannot be immediately fixed</t>
              </li>
              <li>
                <t>Shared infrastructure services where token propagation creates unintended authorization coupling</t>
              </li>
            </ul>
          </section>
          <section anchor="implementation">
            <name>Implementation</name>
            <t>The denylist <bcp14>SHOULD</bcp14> be:
- Evaluated before any token propagation logic executes
- Configured at service startup (not changeable per-request)
- Checked case-insensitively against the service's canonical identifier
- Applied as a fail-safe — denylisted services return no-op results for all propagation operations</t>
            <t>When a service is on the denylist, propagation libraries <bcp14>MUST</bcp14>:
- Not extract tokens from incoming requests
- Not attach tokens to outgoing requests
- Not generate placeholder tokens
- Log that propagation was skipped due to denylist membership</t>
          </section>
        </section>
        <section anchor="propagation-libraries">
          <name>Propagation Libraries</name>
          <t>Organizations <bcp14>SHOULD</bcp14> provide standardized propagation libraries that handle token lifecycle within an internal microservice workload processing. These libraries <bcp14>MUST</bcp14> extract the Txn-Token from the incoming HTTP header, store it in request-scoped memory, add the token to outgoing request headers, and clear it from memory when request processing completes.</t>
          <t>Standardized libraries provide several benefits. First, they enforce propagation controls including external blocking to avoid the token flowing outside your trust boundary. Second, they can be used to consistently emit telemetry about token initiation, propagation, and validation. Third, they provide a centralized point for implementing fallback behaviors when tokens are missing.</t>
        </section>
        <section anchor="multi-language-propagation-considerations">
          <name>Multi-Language Propagation Considerations</name>
          <t>Different programming languages have fundamentally different concurrency models that affect propagation library design. Organizations supporting polyglot architectures <bcp14>MUST</bcp14> account for these differences.</t>
          <section anchor="language-specific-token-storage">
            <name>Language-Specific Token Storage</name>
            <table>
              <thead>
                <tr>
                  <th align="left">Language</th>
                  <th align="left">Recommended Storage Mechanism</th>
                  <th align="left">Cross-Async Behavior</th>
                </tr>
              </thead>
              <tbody>
                <tr>
                  <td align="left">Java</td>
                  <td align="left">ThreadLocal + framework-specific transaction context</td>
                  <td align="left">Requires explicit StateCaptor or framework agent for cross-thread propagation</td>
                </tr>
                <tr>
                  <td align="left">Python</td>
                  <td align="left">
                    <tt>ContextVar</tt></td>
                  <td align="left">Natively propagates across <tt>async</tt>/<tt>await</tt> boundaries — no explicit cross-thread logic needed</td>
                </tr>
                <tr>
                  <td align="left">NodeJS</td>
                  <td align="left">
                    <tt>AsyncLocalStorage</tt></td>
                  <td align="left">Natively propagates across async callbacks and promises — no explicit cross-thread logic needed</td>
                </tr>
                <tr>
                  <td align="left">Go</td>
                  <td align="left">
                    <tt>context.Context</tt></td>
                  <td align="left">Propagates naturally via context passing — no thread-local issues</td>
                </tr>
              </tbody>
            </table>
          </section>
          <section anchor="feature-parity-expectations">
            <name>Feature Parity Expectations</name>
            <t>Not all languages need identical feature sets. Organizations <bcp14>SHOULD</bcp14> prioritize:</t>
            <table>
              <thead>
                <tr>
                  <th align="left">Capability</th>
                  <th align="left">Priority</th>
                </tr>
              </thead>
              <tbody>
                <tr>
                  <td align="left">Token storage + propagation</td>
                  <td align="left">
                    <strong>Required</strong> in all languages</td>
                </tr>
                <tr>
                  <td align="left">Domain allowlist</td>
                  <td align="left">
                    <strong>Required</strong> in all languages</td>
                </tr>
                <tr>
                  <td align="left">Disable switch</td>
                  <td align="left">
                    <strong>Required</strong> in all languages</td>
                </tr>
                <tr>
                  <td align="left">Token validation</td>
                  <td align="left">High priority (Java first, others as needed)</td>
                </tr>
                <tr>
                  <td align="left">Token issuance</td>
                  <td align="left">Server-side only — language of TTS</td>
                </tr>
                <tr>
                  <td align="left">Async preservation</td>
                  <td align="left">Based on async workload patterns per language</td>
                </tr>
              </tbody>
            </table>
          </section>
          <section anchor="telemetry-consistency">
            <name>Telemetry Consistency</name>
            <t>Despite different implementations, all language SDKs <bcp14>MUST</bcp14> emit semantically equivalent metrics with consistent naming conventions. This enables cross-language monitoring dashboards and comparable adoption tracking.</t>
          </section>
        </section>
        <section anchor="cross-thread-propagation">
          <name>Cross-Thread Propagation</name>
          <t>Modern services use thread pools, async executors, and non-blocking frameworks where request processing spans multiple threads. Token storage based on thread-local variables does NOT automatically propagate to child threads. Organizations <bcp14>MUST</bcp14> address this.</t>
          <section anchor="the-problem">
            <name>The Problem</name>
            <t>When a service spawns child threads (via thread pools, async executors, or reactive frameworks), the token in the parent thread's storage is not automatically inherited. Without explicit propagation, child threads have no token — breaking the authentication chain for any downstream calls they make.</t>
          </section>
          <section anchor="solution-capture-restore-pattern">
            <name>Solution: Capture-Restore Pattern</name>
            <t>Propagation libraries <bcp14>SHOULD</bcp14> implement a state capture pattern:</t>
            <t><tt>
Parent Thread                          Child Thread
|                                      |
+-- Capture: snapshot current token    |
|                                      |
|                                      +-- Restore: set captured token
|                                      |   into child's storage
|                                      |
|                                      +-- Execute: child runs with
|                                      |   propagated token
|                                      |
|                                      +-- Cleanup: clear child's storage
|                                      |   (prevent leak to next task)
</tt></t>
          </section>
          <section anchor="key-behaviors">
            <name>Key Behaviors</name>
            <ul spacing="normal">
              <li>
                <t>The captured token is a <strong>snapshot</strong> at capture time — subsequent changes on the parent thread are NOT reflected in the child</t>
              </li>
              <li>
                <t>Null/empty tokens <bcp14>SHOULD</bcp14> be propagated gracefully (no error)</t>
              </li>
              <li>
                <t>Cleanup <bcp14>MUST</bcp14> always run regardless of success or failure (prevents leaks on reused pool threads)</t>
              </li>
              <li>
                <t>The capture mechanism <bcp14>SHOULD</bcp14> be auto-discovered (e.g., via service loader or framework hooks) — no explicit wiring by service developers</t>
              </li>
            </ul>
          </section>
          <section anchor="fire-and-forget-pattern">
            <name>Fire-and-Forget Pattern</name>
            <t>For fire-and-forget async patterns (where the parent thread completes and responds before the child finishes):
- Parent thread clearing its storage at request end <bcp14>MUST NOT</bcp14> affect the child thread's copy
- The token storage implementation <bcp14>MUST</bcp14> support reference semantics where the child retains access even after the parent's cleanup
- This is a critical design consideration — naive "clear all" implementations will break fire-and-forget</t>
          </section>
        </section>
        <section anchor="propagation-reliability">
          <name>Propagation Reliability</name>
          <t>Organizations <bcp14>SHOULD</bcp14> monitor propagation success rates across the SOA. Unless propagation success reaches 100% for a given call chain, services cannot reliably enforce authorization policies based on Txn-Token contents. Services <bcp14>MUST</bcp14> implement reasonable fallback behaviors when tokens are absent.</t>
          <t>Propagation libraries <bcp14>MAY</bcp14> implement automatic token initiation when an incoming request lacks a Txn-Token. The library requests a placeholder token from the Transaction Token Service indicating that no context was received at the current service. This placeholder enables downstream services to identify where propagation broke in the call chain, facilitating operational debugging.</t>
        </section>
        <section anchor="placeholder-token-design">
          <name>Placeholder Token Design</name>
          <t>Placeholder tokens serve as diagnostic markers that identify WHERE propagation broke in a call chain. They are NOT authorization tokens and <bcp14>MUST NOT</bcp14> be used for access decisions.</t>
          <section anchor="placeholder-token-contents">
            <name>Placeholder Token Contents</name>
            <t>Placeholder tokens <bcp14>SHOULD</bcp14> contain:
- <tt>issuerServiceName</tt> — the service that generated the placeholder (where the break was detected)
- <tt>clientName</tt> — the upstream caller that failed to propagate a real token
- <tt>issuedAt</tt> — timestamp of generation
- <tt>reasonCode</tt> — why the real token is missing</t>
          </section>
          <section anchor="reason-codes">
            <name>Reason Codes</name>
            <table>
              <thead>
                <tr>
                  <th align="left">Code</th>
                  <th align="left">Meaning</th>
                </tr>
              </thead>
              <tbody>
                <tr>
                  <td align="left">
                    <tt>TOKEN_NOT_PRESENT</tt></td>
                  <td align="left">No token in incoming request headers</td>
                </tr>
                <tr>
                  <td align="left">
                    <tt>TOKEN_GENERATION_ERROR</tt></td>
                  <td align="left">Token generation/issuance failed</td>
                </tr>
                <tr>
                  <td align="left">
                    <tt>UNSUPPORTED_REGION</tt></td>
                  <td align="left">Service is in a region that doesn't support Txn-Tokens</td>
                </tr>
                <tr>
                  <td align="left">
                    <tt>UNKNOWN</tt></td>
                  <td align="left">Reason could not be determined</td>
                </tr>
              </tbody>
            </table>
          </section>
          <section anchor="placeholder-token-properties">
            <name>Placeholder Token Properties</name>
            <ul spacing="normal">
              <li>
                <t>Placeholder tokens <bcp14>MUST NOT</bcp14> be cryptographically signed — they have no security value</t>
              </li>
              <li>
                <t>Validators encountering placeholder tokens <bcp14>SHOULD</bcp14> emit per-issuer metrics to identify which services are generating them</t>
              </li>
              <li>
                <t>APIs that extract details from placeholder tokens <bcp14>SHOULD</bcp14> be explicitly named to signal unreliability (e.g., <tt>getUnsafePlaceholderDetails()</tt>)</t>
              </li>
              <li>
                <t>Placeholder tokens <bcp14>SHOULD</bcp14> be distinguishable from real tokens via a format version identifier (O(1) check, no full decode needed)</t>
              </li>
            </ul>
          </section>
          <section anchor="auto-generation-at-potential-entry-points">
            <name>Auto-Generation at Potential Entry Points</name>
            <t>Services that might be the first in a call chain (potential initiators) <bcp14>SHOULD</bcp14> automatically generate a placeholder token if no token arrives. This distinguishes "I am the entry point and no token was issued" from "someone upstream broke propagation."</t>
          </section>
        </section>
        <section anchor="token-mix-up-prevention">
          <name>Token Mix-up Prevention</name>
          <t>Token mix-up represents the most severe propagation risk. Mix-up occurs when a token intended for one request is incorrectly attached to a different request. If token T1 is meant for request R1 and token T2 for request R2, but T2 is sent with R1 due to a propagation bug, actors may access data they are not authorized to see.</t>
          <t>Token mix-up scenarios are difficult to detect because they may not cause obvious failures. The request succeeds but with incorrect authorization context. Organizations <bcp14>MUST</bcp14> implement request-scoped token storage in propagation libraries to prevent mix-up. Tokens <bcp14>MUST</bcp14> be associated with specific request contexts and <bcp14>MUST NOT</bcp14> be stored in shared or global state.</t>
          <t>Organizations <bcp14>SHOULD</bcp14> implement testing strategies that deliberately attempt to cause token mix-up under concurrent load. These tests verify that propagation libraries correctly isolate tokens across concurrent requests.</t>
        </section>
        <section anchor="token-leak-detection">
          <name>Token Leak Detection</name>
          <t>Beyond preventing mix-up during concurrent requests, organizations <bcp14>MUST</bcp14> implement leak detection at request boundaries. A "leak" occurs when a token from a previous request remains in storage when a new, unrelated request arrives — meaning one request's credentials could bleed into another's authorization context.</t>
          <section anchor="detection-mechanism">
            <name>Detection Mechanism</name>
            <t>At the start of every incoming request, propagation libraries <bcp14>SHOULD</bcp14> check whether a leftover Txn-Token is already present in request-scoped storage before the new request's token is stored:</t>
            <t><tt>
New request arrives
  -&gt; Check: is a token already in storage?
  -&gt; YES -&gt; Leak detected! Log safe identifiers + emit metric
  -&gt; NO -&gt; Clean state, proceed normally
</tt></t>
          </section>
          <section anchor="detection-vs-prevention">
            <name>Detection vs Prevention</name>
            <t>Leak detection is distinct from leak prevention:
- <strong>Detection</strong>: Identifies that a leak occurred (observability)
- <strong>Prevention</strong>: Mechanisms that ensure cleanup happens (see request lifecycle cleanup)</t>
            <t>Both are required. Detection catches cases where prevention mechanisms fail.</t>
          </section>
          <section anchor="metrics">
            <name>Metrics</name>
            <t>Organizations <bcp14>SHOULD</bcp14> emit a binary metric at request start:
- Value <tt>0</tt> = clean state (no leftover token)
- Value <tt>1</tt> = leak detected (token from previous request still present)</t>
            <t>Detection <bcp14>SHOULD</bcp14> log safe, non-sensitive identifiers of both the leftover token and the incoming token for debugging — never raw token values.</t>
          </section>
          <section anchor="remediation">
            <name>Remediation</name>
            <t>Upon detecting a leak, propagation libraries <bcp14>SHOULD</bcp14> override the leaked token with the correct incoming token. Detection is observability-only — it <bcp14>SHOULD NOT</bcp14> block or fail the request. The incoming request's token takes precedence.</t>
          </section>
        </section>
        <section anchor="trust-boundary-handling">
          <name>Trust Boundary Handling</name>
          <t>When requests cross trust boundaries within the organization, propagation libraries <bcp14>MUST</bcp14> either block token propagation or replace token contents with appropriately scoped contexts. Organizations <bcp14>SHOULD</bcp14> define trust boundaries explicitly and configure propagation libraries with boundary detection logic.</t>
          <t>At trust boundaries, services <bcp14>MAY</bcp14> request new Txn-Tokens from the Transaction Token Service with contexts appropriate for the target trust domain. This approach maintains context propagation while respecting security boundaries.</t>
        </section>
        <section anchor="runtime-disable-switch">
          <name>Runtime Disable Switch</name>
          <t>Organizations <bcp14>MUST</bcp14> provide a runtime kill switch that can disable token propagation without requiring service restarts. In production incidents where token propagation is contributing to failures, operators need immediate relief.</t>
          <section anchor="requirements">
            <name>Requirements</name>
            <ul spacing="normal">
              <li>
                <t>Each propagation solution (e.g., per framework integration) <bcp14>SHOULD</bcp14> have an independent disable switch</t>
              </li>
              <li>
                <t>Disable switches <bcp14>SHOULD</bcp14> be configurable via JVM system properties, environment variables, or dynamic configuration</t>
              </li>
              <li>
                <t>Changes <bcp14>SHOULD</bcp14> take effect within a bounded interval (e.g., 180 seconds maximum polling interval)</t>
              </li>
              <li>
                <t>All solutions <bcp14>MUST</bcp14> default to ENABLED on initialization</t>
              </li>
              <li>
                <t>Disabling propagation <bcp14>SHOULD NOT</bcp14> cause request failures — requests proceed without tokens</t>
              </li>
            </ul>
          </section>
          <section anchor="operational-behavior-when-disabled">
            <name>Operational Behavior When Disabled</name>
            <t>When the disable switch is active:
- Incoming token extraction returns empty (tokens in headers are ignored)
- Outgoing request header injection is skipped
- Token storage operations become no-ops
- Telemetry <bcp14>SHOULD</bcp14> still emit metrics indicating the disabled state</t>
          </section>
          <section anchor="safety-constraints">
            <name>Safety Constraints</name>
            <ul spacing="normal">
              <li>
                <t>Disable switches <bcp14>SHOULD</bcp14> require explicit opt-in registration before polling takes effect</t>
              </li>
              <li>
                <t>A disabled propagation path <bcp14>MUST NOT</bcp14> generate errors or exceptions — it simply becomes invisible</t>
              </li>
              <li>
                <t>Organizations <bcp14>SHOULD</bcp14> alert when a disable switch has been active for extended periods (indicating a forgotten workaround)</t>
              </li>
            </ul>
          </section>
        </section>
        <section anchor="cache-considerations">
          <name>Cache Considerations</name>
          <t>The introduction of Txn-token provides more information now to the entire microservice architecture graph. There are Services in the graph that cache data to avoid calling dependent services multiple times. Now, they <bcp14>SHOULD</bcp14> consider Txn-Token contexts to be included in the cache keys. If not included, there is a risk that incorrect data is vended out or cache hit is impacted because the dependent services might be using the Txn-Token contexts for computing the results which might get cached.</t>
          <t>Organizations <bcp14>SHOULD</bcp14> provide guidance to workload developers on cache key construction when Txn-Tokens are involved. Cache invalidation strategies <bcp14>MUST</bcp14> account for context changes that affect cached data.</t>
        </section>
      </section>
      <section anchor="token-validation">
        <name>Token Validation</name>
        <t>### Validation Libraries
Organizations <bcp14>SHOULD</bcp14> provide standardized validation libraries that handle signature verification, decryption, and token parsing. These libraries <bcp14>SHOULD</bcp14> synchronize cryptographic keys in the background, ensuring that services always have current keys for verification and decryption.</t>
        <t>Validation libraries <bcp14>SHOULD</bcp14> decode Txn-Tokens into strongly-typed objects appropriate for the implementation language. This approach prevents parsing errors and provides compile-time verification of context access patterns.</t>
        <section anchor="key-and-schema-caching">
          <name>Key and Schema Caching</name>
          <t>Validation libraries <bcp14>MUST</bcp14> cache cryptographic keys and token schemas locally. Remote lookups on every validation request introduce unacceptable latency.</t>
          <section anchor="key-caching-requirements">
            <name>Key Caching Requirements</name>
            <ul spacing="normal">
              <li>
                <t>Keys <bcp14>MUST</bcp14> be pre-fetched into local cache before validation requests arrive</t>
              </li>
              <li>
                <t>Background refresh <bcp14>SHOULD</bcp14> run on a daemon thread at a fixed interval (e.g., every 1 hour) with jitter (+/-10%) to avoid thundering herd</t>
              </li>
              <li>
                <t>Cache miss for a required key <bcp14>SHOULD NOT</bcp14> trigger a synchronous remote fetch — the token validation fails fast with a clear error code</t>
              </li>
              <li>
                <t>Multiple concurrent keys <bcp14>MUST</bcp14> be supported to enable zero-downtime rotation (old key and new key both valid during transition)</t>
              </li>
            </ul>
          </section>
          <section anchor="schema-caching-requirements">
            <name>Schema Caching Requirements</name>
            <ul spacing="normal">
              <li>
                <t>Schemas define how token contexts are decoded. They <bcp14>MUST</bcp14> be cached locally.</t>
              </li>
              <li>
                <t>Background refresh interval <bcp14>SHOULD</bcp14> be longer than key refresh (e.g., every 6 hours) since schemas change less frequently</t>
              </li>
              <li>
                <t>A fresh schema parser instance <bcp14>SHOULD</bcp14> be used per deserialization to avoid cross-contamination between independently evolving schemas</t>
              </li>
              <li>
                <t>Schema not in cache at validation time -&gt; fail with a specific error code (e.g., <tt>MISSING_SCHEMA</tt>) — do NOT block waiting for a fetch</t>
              </li>
            </ul>
          </section>
          <section anchor="key-refresh-resilience">
            <name>Key Refresh Resilience</name>
            <ul spacing="normal">
              <li>
                <t>Background refresh failures <bcp14>MUST</bcp14> be caught and logged — they <bcp14>MUST NOT</bcp14> terminate the refresh scheduler</t>
              </li>
              <li>
                <t>If the key management service is down, the last successfully fetched keys remain valid until they expire</t>
              </li>
              <li>
                <t>Organizations <bcp14>SHOULD</bcp14> alert on consecutive refresh failures exceeding a threshold</t>
              </li>
            </ul>
          </section>
          <section anchor="environment-specific-strategies">
            <name>Environment-Specific Strategies</name>
            <table>
              <thead>
                <tr>
                  <th align="left">Environment</th>
                  <th align="left">Strategy</th>
                </tr>
              </thead>
              <tbody>
                <tr>
                  <td align="left">Long-running services</td>
                  <td align="left">Background daemon thread with scheduled refresh</td>
                </tr>
                <tr>
                  <td align="left">Serverless / Lambda</td>
                  <td align="left">Eager fetch on cold start; no background thread (short-lived process)</td>
                </tr>
                <tr>
                  <td align="left">Edge / resource-constrained</td>
                  <td align="left">Configurable refresh intervals with larger TTLs</td>
                </tr>
              </tbody>
            </table>
          </section>
        </section>
        <section anchor="error-handling">
          <name>Error Handling</name>
          <t>Validation libraries <bcp14>SHOULD</bcp14> emit standardized error codes for common failure conditions including expired tokens, malformed tokens, and signature verification failures. These error codes enable consistent operational monitoring across the SOA.</t>
        </section>
        <section anchor="fallback-policies">
          <name>Fallback Policies</name>
          <t>Services <bcp14>SHOULD NOT</bcp14> automatically fail requests when Txn-Tokens are missing or invalid. Organizations <bcp14>MUST</bcp14> define fallback policies that balance security with user experience. Fallback policies <bcp14>MAY</bcp14> include serving redacted data, limiting functionality, or requesting step-up authentication.</t>
          <t>The appropriate fallback depends on the sensitivity of the requested operation. Services accessing highly sensitive data <bcp14>MAY</bcp14> require valid Txn-Tokens and fail requests when tokens are absent. Services providing less sensitive functionality <bcp14>SHOULD</bcp14> implement graceful degradation.</t>
        </section>
        <section anchor="verification-strategy-modes">
          <name>Verification Strategy Modes</name>
          <t>Organizations deploying Txn-Token validation <bcp14>MUST</bcp14> support at least three progressive enforcement modes that can be configured per-service and per-request:</t>
          <table>
            <thead>
              <tr>
                <th align="left">Mode</th>
                <th align="left">Behavior</th>
                <th align="left">Use Case</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td align="left">
                  <tt>SHADOW_MODE</tt></td>
                <td align="left">Token is decoded and validated but failures are only logged — never enforced. Requests always proceed.</td>
                <td align="left">Initial rollout, testing, measuring impact before enforcement</td>
              </tr>
              <tr>
                <td align="left">
                  <tt>TOKEN_PRESENCE_MODE</tt></td>
                <td align="left">Token must be present in the request but no cryptographic verification is performed. Absence causes failure.</td>
                <td align="left">Intermediate enforcement — ensures propagation works before trusting content</td>
              </tr>
              <tr>
                <td align="left">
                  <tt>STRICT_VERIFICATION_MODE</tt></td>
                <td align="left">Full cryptographic verification. Invalid or missing tokens cause request rejection.</td>
                <td align="left">Production enforcement after confidence is established</td>
              </tr>
            </tbody>
          </table>
          <t>Organizations <bcp14>SHOULD</bcp14> default to SHADOW_MODE when first deploying validation and progressively tighten enforcement. The default mode <bcp14>SHOULD</bcp14> be configurable at both the service level and per-request level (e.g., based on API sensitivity or client identity).</t>
          <t>Validation libraries <bcp14>SHOULD</bcp14> emit distinct metrics for each mode so organizations can track:
- How many requests WOULD fail under stricter enforcement
- Per-client and per-error-code failure rates in shadow mode
- Readiness percentage before promoting to stricter enforcement</t>
          <t>Error logs during shadow mode <bcp14>SHOULD</bcp14> be sampled (e.g., 50%) to prevent log flooding while still providing visibility into issues.</t>
          <t>Organizations <bcp14>MUST</bcp14> document and communicate enforcement promotion timelines to downstream service teams. Surprise enforcement changes cause outages.</t>
        </section>
      </section>
      <section anchor="telemetry-and-monitoring">
        <name>Telemetry and Monitoring</name>
        <t>### Adoption Monitoring
Transaction token adoption in large SOA environments takes time. Organizations <bcp14>SHOULD</bcp14> implement comprehensive telemetry to monitor adoption progress, propagation reliability, and validation patterns.</t>
        <t>When organizations provide standardized libraries for token initiation, propagation, and validation, telemetry logic <bcp14>SHOULD</bcp14> be embedded in those libraries. This approach ensures consistent telemetry across all services without requiring individual workload implementations.</t>
        <section anchor="telemetry-aggregation">
          <name>Telemetry Aggregation</name>
          <t>Services <bcp14>SHOULD</bcp14> aggregate telemetry locally before transmitting to centralized monitoring systems. Local aggregation reduces network overhead and enables higher-frequency sampling without overwhelming monitoring infrastructure.</t>
          <t>Centralized monitoring systems <bcp14>SHOULD</bcp14> store telemetry in data warehouses that support analytical queries. Organizations <bcp14>SHOULD</bcp14> implement automated monitors that alert on significant changes in propagation rates, validation failures, or token expiration rates.</t>
        </section>
        <section anchor="key-metrics">
          <name>Key Metrics</name>
          <t>Organizations <bcp14>SHOULD</bcp14> monitor the following key metrics:
- Token initiation rate by service
- Propagation success rate by call chain
- Token expiration rate during request processing
- Validation failure rate by error type
- Token size distribution
- Context relocation frequency</t>
          <t>These metrics provide visibility into Txn-Token health across the SOA and enable rapid identification of deployment issues.</t>
        </section>
        <section anchor="token-validation-audit-trail">
          <name>Token Validation Audit Trail</name>
          <t>Beyond operational telemetry, organizations <bcp14>MUST</bcp14> implement token validation audit logging that creates an audit trail for every token validation attempt.</t>
          <section anchor="when-to-log">
            <name>When to Log</name>
            <t>A security event <bcp14>MUST</bcp14> be generated after <strong>every</strong> validation attempt — regardless of success or failure. This includes:
- Successful token validation (identity confirmed)
- Failed validation (expired, malformed, bad signature)
- Placeholder token encountered
- Token absent when required</t>
          </section>
          <section anchor="what-to-log">
            <name>What to Log</name>
            <t>Security event entries <bcp14>SHOULD</bcp14> include:
- <strong>Initiator identity</strong> — the application/service that originally issued the token
- <strong>Subject identity</strong> — the authenticated entity (end user, system) the token represents
- <strong>Requester line of business</strong> — organizational context
- <strong>Customer/entity identifier</strong> — if present in the token
- <strong>Token type</strong> — real token vs placeholder vs auto-generated
- <strong>Validation status</strong> — success, failure code, or skip reason
- <strong>Timestamp and request identifier</strong></t>
            <t>For placeholder tokens, log the issuer service name and upstream client name to trace propagation breaks.</t>
          </section>
          <section anchor="failure-resilience">
            <name>Failure Resilience</name>
            <t>Security event logging failures <bcp14>MUST NOT</bcp14> interrupt request processing. If the logging system is unavailable:
- Emit a metric counting missed security events
- Sample error logs (e.g., 50%) to avoid flooding
- Never propagate the logging failure to callers</t>
          </section>
        </section>
      </section>
      <section anchor="key-management">
        <name>Key Management</name>
        <t>Organizations <bcp14>MUST</bcp14> implement secure key management practices for Txn-Token cryptographic operations. Key management <bcp14>SHOULD</bcp14> follow the guidelines in RFC 4107 "Guidelines for Cryptographic Key Management".</t>
        <t>Transaction Token Services <bcp14>MUST</bcp14> support key rotation without service disruption. Validation libraries <bcp14>MUST</bcp14> support multiple concurrent keys to enable zero-downtime rotation. Organizations <bcp14>SHOULD</bcp14> automate key rotation on a regular schedule.</t>
      </section>
      <section anchor="batch-processing-pattern">
        <name>Batch Processing Pattern</name>
        <t>OAuth Transaction Tokens are designed to propagate security context through a call chain within a trust domain. To maintain a high security posture without the overhead of a global revocation infrastructure, these tokens are short-lived (typically minutes). In many modern architectures, a transaction may be asynchronous. For example, a request may be placed on a message queue (e.g., Kafka, RabbitMQ) and processed by a worker service hours or days later. By the time the worker resumes the transaction, the original Transaction Token has expired.</t>
        <t>Batch Token (Voucher): A long-lived, opaque, or encrypted token representing the transaction context during a period of rest.
Initiator: The internal microservice that receives a Transaction Token and requests a Batch Token before an asynchronous pause.
Rehydrator: The internal microservice that takes a Batch Token and exchanges it for a fresh, short-lived Transaction Token to resume processing.</t>
        <section anchor="initiation-pausing-the-transaction">
          <name>Initiation (Pausing the Transaction)</name>
          <t>When a internal microservice determines that a transaction will exceed the TTL of the current Transaction Token (TraT), it <bcp14>SHOULD</bcp14> request a Batch Token from the Transaction Token Service (TTS).
The request to the TTS <bcp14>SHOULD</bcp14> include:
   * The current valid TraT.
   * The intended "use case ID" or "namespace" to constrain the token.</t>
          <t>The TTS returns a Batch Token with a TTL suitable for the asynchronous delay (e.g., 24 hours to 7 days).</t>
        </section>
        <section anchor="rehydration-resuming-the-transaction">
          <name>Rehydration (Resuming the Transaction)</name>
          <t>When a worker service (the Rehydrator) picks up the task, it <bcp14>MUST NOT</bcp14> use the Batch Token directly to call downstream services. Instead, it <bcp14>MUST</bcp14> exchange the Batch Token at the TTS for a fresh TraT.
The TTS <bcp14>SHALL</bcp14>:
   1.  Verify the Batch Token's signature and expiration.
   2.  Validate that the Rehydrator is authorized for the specific
       "use case ID" or "namespace" embedded in the Batch Token.
   3.  Issue a new, short-lived TraT containing the original
       claims (e.g., subject, original requester IP).</t>
        </section>
        <section anchor="async-context-preservation">
          <name>Async Context Preservation</name>
          <t>When preserving token contexts across asynchronous boundaries, organizations <bcp14>MUST</bcp14> use server-side signed preservation via the TTS. The TTS issues an ECDSA-signed preservation context that provides tamper detection and centralized audit. Client-side unsigned preservation <bcp14>MUST NOT</bcp14> be used — all async context preservation requires cryptographic integrity guarantees.</t>
        </section>
        <section anchor="message-transport">
          <name>Message Transport</name>
          <t>For message-based async (SQS, SNS, Kafka), preserved context <bcp14>SHOULD</bcp14> be transported as a message attribute rather than embedded in the message body:
- Attribute name <bcp14>SHOULD</bcp14> be standardized (e.g., <tt>x-transaction-token-preservation-context</tt>)
- Data type: String (Base64-encoded binary)
- Idempotency: if the attribute already exists on the message, preserve the existing value (no overwrite)
- Message attribute limits (e.g., SQS max 10 attributes) <bcp14>MUST</bcp14> be respected — if the limit is reached, the failure <bcp14>SHOULD</bcp14> be logged but the original message <bcp14>MUST</bcp14> still be sent</t>
          <section anchor="batch-token-scoping-enhancements">
            <name>Batch Token Scoping Enhancements</name>
            <t>Batch Tokens (Vouchers) <bcp14>SHOULD</bcp14> include:
- A maximum chain depth counter to prevent infinite rehydration loops
- A total transaction lifetime that cannot be extended beyond a hard maximum regardless of rehydration count
- Namespace/use-case scoping so that a batch token obtained for one async workflow cannot be rehydrated in a different workflow context</t>
          </section>
        </section>
      </section>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <section anchor="token-mix-up-prevention-1">
        <name>Token Mix-up Prevention</name>
        <t>Token mix-up represents a critical security risk. Organizations <bcp14>MUST</bcp14> implement request-scoped token storage and <bcp14>MUST</bcp14> test for mix-up scenarios under concurrent load. Token mix-up can result in unauthorized data access without obvious system failures, making it particularly dangerous.</t>
      </section>
      <section anchor="trust-boundary-controls">
        <name>Trust Boundary Controls</name>
        <t>Organizations <bcp14>MUST</bcp14> define trust boundaries explicitly and <bcp14>MUST</bcp14> implement controls that prevent inappropriate token propagation across those boundaries. Failure to control propagation at trust boundaries can expose sensitive contexts to unauthorized services.</t>
      </section>
      <section anchor="cache-security">
        <name>Cache Security</name>
        <t>Services that cache data based on Txn-Token contexts face security risks if cache keys do not incorporate all relevant contexts. Organizations <bcp14>MUST</bcp14> provide guidance on secure cache key construction and <bcp14>MUST</bcp14> audit caching services for correct context handling.</t>
      </section>
      <section anchor="fallback-mechanisms">
        <name>Fallback Mechanisms</name>
        <t>While fallback mechanisms improve availability, they can introduce security vulnerabilities if not carefully designed. Organizations <bcp14>MUST</bcp14> ensure that fallback policies do not inadvertently grant excessive access when Txn-Tokens are absent. Fallback policies <bcp14>SHOULD</bcp14> be explicitly documented and reviewed by security teams.</t>
      </section>
      <section anchor="token-lifetime">
        <name>Token Lifetime</name>
        <t>Short token lifetimes reduce the window for token compromise but may cause operational issues if set too aggressively. Organizations <bcp14>MUST</bcp14> balance security considerations with operational requirements when setting token lifetimes.</t>
      </section>
      <section anchor="external-propagation">
        <name>External Propagation</name>
        <t>Preventing Txn-Tokens from leaving the trusted domain is critical. Organizations <bcp14>MUST</bcp14> implement multiple layers of defense including library-level controls, network-level filtering, and monitoring for external propagation attempts.</t>
      </section>
      <section anchor="batch-processing-security-consideration">
        <name>Batch Processing Security Consideration</name>
        <section anchor="token-constraining">
          <name>Token Constraining</name>
          <t>Batch Tokens <bcp14>MUST</bcp14> be sender-constrained or scoped to specific namespaces. This prevents a compromised service from "stealing" a Batch Token from a queue and successfully minting a
Transaction Token for an unrelated flow.</t>
        </section>
        <section anchor="data-mutability-and-consent">
          <name>Data Mutability and Consent</name>
          <t>Asynchronous delays increase the risk that the underlying authorization context has changed (e.g., a user has revoked consent). The TTS <bcp14>SHOULD</bcp14> perform a "freshness check" during
rehydration for claims marked as mutable or sensitive.</t>
        </section>
        <section anchor="infinite-exchange-prevention">
          <name>Infinite Exchange Prevention</name>
          <t>To prevent a transaction from living indefinitely through repeated rehydrations, the TTS <bcp14>SHOULD</bcp14> implement a maximum chain depth or total transaction lifetime counter within the token metadata.</t>
        </section>
      </section>
      <section anchor="token-format-identification">
        <name>Token Format Identification</name>
        <t>Validation libraries <bcp14>MUST</bcp14> be able to quickly identify token type (real token vs placeholder vs handle) without performing full decryption. This enables:
- Fast-path rejection of placeholder tokens in strict enforcement mode
- Per-type metrics without expensive decode operations
- Efficient routing to format-specific decoders</t>
      </section>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <t>This document has no IANA actions.</t>
    </section>
    <section anchor="references">
      <name>References</name>
      <t>## Normative References
<eref target="https://datatracker.ietf.org/doc/html/rfc2119">RFC2119</eref> Bradner, S., "Key words for use in RFCs to Indicate Requirement Levels", BCP 14, RFC 2119, DOI 10.17487/RFC2119, March 1997.</t>
      <t><eref target="https://www.ietf.org/archive/id/draft-ietf-oauth-transaction-tokens-06.html">TXNTOKENS</eref> Tulshibagwale, A., Hardt, D., and G. Fletcher, "OAuth 2.0 Transaction Tokens", draft-ietf-oauth-transaction-tokens-06 (work in progress).</t>
      <section anchor="informative-references">
        <name>Informative References</name>
        <t><eref target="https://datatracker.ietf.org/doc/html/rfc4107">RFC4107</eref> Bellovin, S. and R. Housley, "Guidelines for Cryptographic Key Management", BCP 107, RFC 4107, DOI 10.17487/RFC4107, June 2005.</t>
      </section>
    </section>
  </middle>
  <back>
    <references anchor="sec-normative-references">
      <name>Normative References</name>
      <reference anchor="RFC2119">
        <front>
          <title>Key words for use in RFCs to Indicate Requirement Levels</title>
          <author fullname="S. Bradner" initials="S." surname="Bradner"/>
          <date month="March" year="1997"/>
          <abstract>
            <t>In many standards track documents several words are used to signify the requirements in the specification. These words are often capitalized. This document defines these words as they should be interpreted in IETF documents. This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
          </abstract>
        </front>
        <seriesInfo name="BCP" value="14"/>
        <seriesInfo name="RFC" value="2119"/>
        <seriesInfo name="DOI" value="10.17487/RFC2119"/>
      </reference>
      <reference anchor="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>
    </references>
    <?line 567?>

<section numbered="false" anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>TODO acknowledge.</t>
    </section>
  </back>
  <!-- ##markdown-source:
H4sIAAAAAAAAA7V963Ijx5XmfzxFDRUTJtsAu6mRLZs7Yw+azVbTIrtpkpLW
4ZhQF1BJoMxCFbYuZMOWI/Yh9gH2WfZR9kn2fOeSmQUUult2rCIkEUBdMk+e
PNfvnJxMJqM2bwt3mhy8m3btMrmr07JJ521elcld9eDKJnnpmjY56+ralW1y
XePHuTsYzdPWLap6c5rk5X01GmXVvExX9KSsTu/bSVqnXTup6D/LSRse2vIz
J7P5evLixajpZqu8afD9Zk23XpzfvU6SL5K0aCoaUl5mbu3oP2V7ME4OXJa3
VZ2nBT5cTF/S/6qa/rq5e30wKrvVzNWno4yGdTqaV2VD7+ma06StOzd6PE3+
bZTWLj1Npjfn09FTVT8s6qpbnyY/fJP8QJ/ycpF8g29GD25DP2eno2SSlO5D
myxc6eoUo8dXXZnPq5r/bNZp/VDgzixv2jqfda3LksJlC1ePHl3Z0UiSZJG3
y252mqTNMt2AKs/3UoUoPZkLpSdrpTQ9oaA5Ne1psmzbdXP6/Ln7kK7WhTue
V6vnl9O789u70QiPrGoMmm5IkvuuKGQ5prdvpn9Kbqbf3fEPVb1Iy/yvPB36
cZX+FdOif9wqzQsZJQb5nyn/hHeMRmVVr+iOR5rPCKsdPh0fH49Gk8kkSWdE
ARrxaHS3zJuEuKFbgWHWdfWYZ65JMLlEJ5fY5JqEHpbkmA2uBinTMkto2Ytq
g0/ClV8evxjizLShJXDz/D4nsuelcl7u2vtdxpsIjY+HnnN496GcyN9HiSvT
WeEScEhRpVmDB6fgogaLm1VEpjJpK5qCa1z96HjANMt1uqBlSjr6MsnBsnm7
4d9kZZTkCXFmC6ZK53XV0PjpEUSHZFZ1ZZbWOVEk62rMvF06PJZo1OBjdZ/Q
ba4u0wJfL+p0hUWYJ7X7Hx2RFjMD4V+eXSdpltHgGnqW0pnuEZLykmBz0AiF
pTG/edFl/EqQwA8prefLvHXztqvdOGnyv7pklZbpgldq7KeMSa3TFkNrxslj
WuSZfAl+IBFBUxozHaq1vpJGs6pK3ss8z5SoUbsEIyaq0a/gicYRrwhx3f09
jYL4LTCKvIEWgkaRdbKYrnzM66rEzw0xJXPlKs+ywo1GXyQXZesvpc9fJC/T
OYuAMhtdVUSNsreJmw0t94q4tsuLNqGnr3Is2ABpiIVTfEVbjlaQB1ck82Va
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
AA==

-->

</rfc>
