OAuth Transaction Tokens (Txn-Tokens)
What it is
Transaction Tokens (Txn-Tokens) are short-lived, signed JWTs that "maintain and propagate user identity, workload identity and authorization context throughout the Call Chain within a trusted domain", in the words of the IETF draft. A Transaction Token Service (TTS) mints one when a request enters the domain, typically at an API gateway, and every internal service that handles the request verifies it rather than receiving the caller's original access token.
The problem is the internal call chain. An external request arrives with an OAuth access token and then touches five, ten or fifty microservices. Most architectures either forward the external token downstream (any service that logs or leaks it hands an attacker a replayable credential with the full external scope) or drop it and rely on network location (no service past the gateway knows which user the work is for). Txn-Tokens replace both with a token scoped to one transaction, lasting minutes. The glossary entry has the one-paragraph version.
Status (November 2026)
The latest revision is draft-11, dated 30 July 2026, read from the IETF datatracker on 5 November 2026. Its working-group state is WG Consensus: Waiting for Write-Up: the OAuth Working Group agrees on the text and the shepherd write-up is pending before it goes to the IESG. The OAuth WG milestones list "Submit Transaction Tokens to the IESG" for December 2026. It is Standards Track, not an RFC. The authors are Atul Tulshibagwale (CrowdStrike), George Fletcher (Practical Identity LLC) and Pieter Kasselman (Defakto Security).
Consensus means the design is unlikely to change shape, but claim details can still move during IESG review. Pin the revision.
How it works
A concrete flow for an order placed through a public API:
- External call. A client calls
POST /ordersat the gateway with an OAuth access token for the user. - Token request. The gateway calls the TTS using token exchange (RFC 8693):
grant_type=urn:ietf:params:oauth:grant-type:token-exchange,requested_token_type=urn:ietf:params:oauth:token-type:txn_token,audienceset to the trust domain name,scopeset to the narrow purpose (for exampleorders.create), and the external access token assubject_token. The gateway authenticates to the TTS as a workload, for example with mutual TLS or a SPIFFE credential. - Mint. The TTS checks the subject token is unexpired and its own issuance policy, then returns a Txn-Token.
- Propagate. The gateway calls the orders service with the Txn-Token in the
Txn-TokenHTTP header. The orders service calls inventory and payments with the same Txn-Token. The draft forbids carrying it in theAuthorizationheader, because that header may already hold the caller's workload credential. - Verify at each hop. Each service checks the signature, that
audis its own trust domain, thatexphas not passed, and thatscopeand the context permit the action it is about to take.
The JWT header must carry typ txntoken+jwt. Body claims:
| Claim | Requirement | Meaning |
|---|---|---|
aud |
Required | The trust domain where the token is valid; must not be accepted elsewhere |
iat, exp |
Required | Issue and expiry times, expected to be minutes or less |
txn |
Required | Unique transaction identifier (as in RFC 8417) |
sub |
Required | The principal, unique within the trust domain |
scope |
Required | The purpose of this transaction, chosen by the TTS and possibly narrower than the external scope |
req_wl |
Required | The workload that requested the token |
tctx |
Recommended | Transaction context that stays immutable along the chain, such as an order amount |
rctx |
Recommended | Request context such as the original IP address or authentication method |
iss |
Optional | Often omitted, because keys are known within one domain |
Two rules in the draft are worth memorizing. A Txn-Token is not an authentication credential: a workload must not use it to prove its own identity. And it is not an access token: it records the context of one transaction, not a grant to a client. Services still authenticate each other with workload identity (WIMSE, mTLS or SPIFFE) and use the Txn-Token for the authorization decision.
For scheduled or internally started work with no inbound token, the requesting service may present a self-signed JWT as the subject token. That path deserves the strictest TTS policy, since it is where a compromised internal service could mint context for any user.
What it solves for AI agents and SaaS
For SaaS platforms built from many services, Txn-Tokens give least privilege inside the perimeter. A stolen Txn-Token is valid in one trust domain, for one purpose, for minutes. Signed tctx means a downstream service can trust that the order amount it sees is the amount the user submitted, not a value changed by a compromised hop. Every service logs the same txn, so incident responders can follow one request end to end.
For AI agents, the internal call chain is the tool chain. An agent platform that receives a user request and calls retrieval, code execution, ticketing and email tools can mint a Txn-Token that names the user, the agent workload in req_wl and a narrow purpose, and require every internal tool service to check it. The IETF WIMSE working group's AIMS draft (revision -01, 2 November 2026) lists Transaction Tokens among the existing standards it maps agents onto, and SWI's Agent Identity Standards Map 2026 places them under chained delegation and audit.
Limits: one trust domain only, and the draft does not define how an agent's natural-language task becomes a scope. That translation step, where prompt injection becomes over-broad access, is still undefined by any standard.
Adoption signals (verified)
We found no vendor documentation, as of 5 November 2026, that announces general availability of a Transaction Token Service built to this draft. The verifiable signals are standards-track: working-group consensus, the December 2026 IESG milestone, and citation in the AIMS draft. Authors from CrowdStrike, Practical Identity and Defakto Security indicate where implementations are likely to appear first, but that is a signal, not a deployment.
How to implement or evaluate
- Start at the gateway. Run the TTS as a small internal service next to your API gateway or service mesh ingress. Only the gateway, and a short allowlist of internal schedulers, should be able to request tokens.
- Design purposes, not scopes. Define
scopevalues per business transaction (orders.create,refund.issue), not per API. The draft lets the TTS choose a value narrower than the external scope. - Keep lifetimes in minutes. Long-running jobs should request new tokens per step rather than one long-lived token.
- Verify everywhere. A service that does not check the Txn-Token turns the whole design back into network trust. Build verification into a shared middleware.
- Separate authentication. Pair Txn-Tokens with workload identity for service-to-service authentication; see workload identity 101.
- Log
txn,subandreq_wlon every call. That gives you the audit trail agent deployments otherwise lack.
Pitfalls
- Treating it as a bearer access token and accepting it at external APIs. The draft forbids both.
- A TTS that mints for anyone. If any workload can request a token for any subject, the TTS becomes a privilege escalation service. Restrict requesters and log issuance.
- Copying the whole external scope. That keeps replay value high and defeats the design.
Related
ID-JAG and Cross App Access, MCP authorization, Shared Signals Framework, the securing AI agent identities guide, and the Agent Identity Standards Map 2026. Glossary: workload identity, delegation chain, identity chaining, access token, token theft.
Who wrote it
The draft is by Atul Tulshibagwale, George Fletcher and Pieter Kasselman. More in the experts directory.
OAuth Transaction Tokens (Txn-Tokens): frequently asked questions
- What are OAuth Transaction Tokens?
- Transaction Tokens (Txn-Tokens) are short-lived, signed JWTs defined in the IETF draft draft-ietf-oauth-transaction-tokens. A Transaction Token Service mints one at the edge of a trust domain when an external request arrives, and every internal workload that processes the request receives and verifies it. The token carries the principal (sub), the requesting workload (req_wl), a narrow purpose (scope), a unique transaction ID (txn) and immutable context, so downstream services know who started the request and why without receiving the original access token.
- Are Transaction Tokens an RFC?
- Not yet. As of 5 November 2026 the latest revision is draft-11, dated 30 July 2026, and its datatracker state is 'WG Consensus: Waiting for Write-Up' in the IETF OAuth Working Group. The working group's milestone is to submit it to the IESG in December 2026. After that come IESG review, any revisions, and RFC Editor processing.
- What is the difference between a Transaction Token and an access token?
- An access token is a grant of authority to a client to call an API. A Transaction Token describes the context of one specific transaction inside one trust domain. The draft says a workload must not use a Txn-Token as an OAuth access token and must not use it to authenticate itself. It travels in its own Txn-Token HTTP header, not the Authorization header, so a service can receive both a workload credential and a Txn-Token on the same call.
- Do Transaction Tokens work across organizations?
- No. A Txn-Token's aud claim names one trust domain, and the draft says it must not be accepted outside that domain. For crossing a domain boundary, use OAuth 2.0 Token Exchange (RFC 8693) or the Identity and Authorization Chaining Across Domains draft, and mint a new Txn-Token on the other side if that domain uses them.
- Why do Transaction Tokens matter for AI agents?
- An agent request often fans out into many tool and service calls. Without Txn-Tokens, internal services either receive the user's broad access token, which can be replayed, or receive nothing and trust the network. A Txn-Token gives each hop a verifiable record of the user, the agent workload that asked and the narrow purpose, valid for minutes. The IETF AIMS draft lists Transaction Tokens among the existing standards agents should build on.
Related on Start with Identity
- CVEDuende OAuth token management mixes tokens across requests
A race in Duende's .NET OAuth token-management package could attach client A's token to client B's request. Session mix-up, not a crypto break, but it is still
- BlogA Check Point SmartConsole flaw hands out full admin tokens to unauthenticated attackers
CVE-2026-16232 (CVSS 9.3) lets an unauthenticated remote attacker obtain an application login token for Check Point Security Management and Multi-Domain Managem
- BlogA phantom join key let anyone mint JFrog Artifactory admin tokens, and exploitation started in days
CVE-2026-82329 (CVSS 9.8) is an authentication bypass in JFrog Access. Instances without an explicit join key got a predictable one, letting an unauthenticated
- BlogACR Stealer uses ClickFix lures to take browser tokens and OneDrive files
Microsoft reports ACR Stealer activity climbing in enterprise networks from late April to mid-June 2026. It arrives when someone pastes a command into the Windo
- CVEDrupal Simple OAuth/OIDC auth bypass via an alternate path
Drupal Simple OAuth / OIDC 6.0.0 through 6.0.6 allowed authentication to be skipped on an alternate path. Patched in 6.0.7.
- ExpertEditor, OAuth 2.0 (RFC 6749)
Dick Hardt edited RFC 6749, the OAuth 2.0 Authorization Framework, the document nearly every modern login flow rests on. He founded Sxip Identity in 2003, was a