| Internet-Draft | Txn Challenge | May 2026 |
| Rosomakho | Expires 4 November 2026 | [Page] |
This document defines an OAuth mechanism for transaction-specific authorization challenges. A protected resource can require additional authorization for a particular operation by returning a transaction authorization challenge. This is useful when requests are mediated by agents, automated workflows, or delegated services and the protected resource requires confirmation from a human user, resource owner, or organizational authority. The client presents the challenge to an authorization server, which validates the challenge, obtains any required approval, and issues a transaction token. The transaction token is then presented to the protected resource as evidence that the challenged operation was authorized.¶
This note is to be removed before publishing as an RFC.¶
The latest revision of this draft can be found at https://yaroslavros.github.io/oauth-txn-challenge/draft-rosomakho-oauth-txn-challenge.html. Status information for this document may be found at https://datatracker.ietf.org/doc/draft-rosomakho-oauth-txn-challenge/.¶
Discussion of this document takes place on the Web Authorization Protocol Working Group mailing list (mailto:oauth@ietf.org), which is archived at https://mailarchive.ietf.org/arch/browse/oauth/. Subscribe at https://www.ietf.org/mailman/listinfo/oauth/.¶
Source for this draft and an issue tracker can be found at https://github.com/yaroslavros/oauth-txn-challenge.¶
This Internet-Draft is submitted in full conformance with the provisions of BCP 78 and BCP 79.¶
Internet-Drafts are working documents of the Internet Engineering Task Force (IETF). Note that other groups may also distribute working documents as Internet-Drafts. The list of current Internet-Drafts is at https://datatracker.ietf.org/drafts/current/.¶
Internet-Drafts are draft documents valid for a maximum of six months and may be updated, replaced, or obsoleted by other documents at any time. It is inappropriate to use Internet-Drafts as reference material or to cite them other than as "work in progress."¶
This Internet-Draft will expire on 4 November 2026.¶
Copyright (c) 2026 IETF Trust and the persons identified as the document authors. All rights reserved.¶
This document is subject to BCP 78 and the IETF Trust's Legal Provisions Relating to IETF Documents (https://trustee.ietf.org/license-info) in effect on the date of publication of this document. Please review these documents carefully, as they describe your rights and restrictions with respect to this document. Code Components extracted from this document must include Revised BSD License text as described in Section 4.e of the Trust Legal Provisions and are provided without warranty as described in the Revised BSD License.¶
OAuth 2.1 ([OAUTH-FRAMEWORK]) access tokens authorize access to protected resources. In many deployments, however, a protected resource cannot determine whether a requested operation is acceptable based only on the access token that accompanies the request. The access token might establish that the caller is authorized to interact with the protected resource, but a particular operation can still require additional, transaction-specific authorization.¶
This situation arises when the protected resource needs confirmation that a concrete transaction has been approved by an appropriate party. The approving party might be the human user on whose behalf the request is made, a different resource owner, or an organizational authority such as an administrator, manager, data owner, or policy decision point.¶
This document defines a transaction authorization challenge. A protected resource uses this challenge to request additional authorization for a specific operation. The challenge is relayed to a client, which presents it to an authorization server. The authorization server validates the challenge, obtains any required approval, and issues a transaction token as specified by [TXN-TOKENS]. The transaction token is then presented to the protected resource as evidence that the challenged operation was authorized.¶
This mechanism is complementary to OAuth step-up authentication defined in [OAUTH-STEP-UP]. Step-up authentication enables a protected resource to require stronger or fresher authentication of a user. A transaction authorization challenge instead requests authorization for a specific transaction. The approving party can be different from the subject associated with the access token used for the original request.¶
Software agents, automated workflows, and delegated services can perform operations on behalf of users. Some operations are sufficiently sensitive that a protected resource might require explicit approval before processing them. Examples include sending a payment, publishing content, deleting data, modifying access policy, or disclosing sensitive information.¶
Local confirmation mechanisms within an agent framework can reduce risk, but they are not always visible to the protected resource and do not necessarily produce authorization evidence that the protected resource can validate. A transaction authorization challenge allows the protected resource to require explicit authorization for the concrete operation and to receive a transaction token representing that authorization.¶
Some operations require approval by an organizational authority rather than by an individual end user. Examples include approving access to regulated data, authorizing a production deployment, granting elevated administrative access, or permitting data transfer to an external party.¶
A transaction authorization challenge allows the protected resource to request authorization evidence from an authorization server or associated policy infrastructure. The authorization server validates the challenge, applies organizational policy, obtains any required approval, and issues a transaction token only when the required authorization has been obtained.¶
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 [RFC2119] [RFC8174] when, and only when, they appear in all capitals, as shown here.¶
This document uses the terms "client", "authorization server", "access token", "refresh token", and "protected resource" as defined by [OAUTH-FRAMEWORK].¶
This document uses the term "transaction token" as defined by [TXN-TOKENS].¶
This document defines the following additional terms:¶
The human user, resource owner, organizational authority, or policy authority whose approval is required before the challenged transaction can proceed.¶
A software component, automated workflow, delegated service, or other intermediary that attempts an operation at a protected resource and relays a transaction authorization challenge to a client.¶
A challenge returned by a protected resource to indicate that a specific requested operation requires transaction-specific authorization before it can proceed.¶
A transaction authorization challenge involves a protected resource, an agent, a client, an authorization server, and an approving party.¶
The protected resource receives a request and determines whether the authorization currently presented with the request is sufficient. If the protected resource determines that the requested operation requires transaction-specific authorization, it returns a transaction authorization challenge.¶
The agent is the component that attempted the operation at the protected resource. The agent relays the transaction authorization challenge to the client and later presents the resulting transaction token to the protected resource. The agent is not trusted to modify the contents of the challenge or the resulting transaction token.¶
The client receives the transaction authorization challenge from the agent and presents it to the authorization server. The client is responsible for mediating the interaction between the agent-facing environment and the authorization server. The client does not need to interpret all application-specific details of the challenged transaction, but it MUST preserve the integrity of the challenge when presenting it to the authorization server.¶
The authorization server validates the transaction authorization challenge, determines the approving party, obtains any required approval, and issues a transaction token. The authorization server can use local policy, resource metadata, resource-owner information, organizational policy, or other authorization context to determine whether the requested operation can be approved.¶
The approving party is the human user, resource owner, organizational authority, or policy authority whose approval is required. The approving party can be the same subject on whose behalf the agent is acting, but this is not required.¶
The following figure shows the basic protocol flow:¶
The flow is as follows:¶
The agent sends a request to the protected resource using its existing authorization context.¶
The protected resource determines that the request requires transaction-specific authorization.¶
The protected resource returns a transaction authorization challenge to the agent.¶
The agent relays the transaction authorization challenge to the client.¶
The client presents the transaction authorization challenge to the authorization server.¶
The authorization server validates the challenge, determines the approving party, and obtains any required approval.¶
The authorization server issues a transaction token to the client.¶
The client provides the transaction token to the agent.¶
The agent retries or continues the request and presents the transaction token to the protected resource.¶
The protected resource validates the transaction token and processes the request if the token authorizes the challenged operation.¶
A transaction token issued in response to a transaction authorization challenge represents authorization for the challenged operation. This document profiles the transaction token defined in [TXN-TOKENS] for use as evidence of transaction-specific authorization.¶
The transaction token is issued by the authorization server identified by the aud claim of the transaction authorization challenge and is
presented to the protected resource that issued the challenge.¶
The transaction token MUST contain sufficient information for the protected resource to determine that the token authorizes the challenged
operation. This information can include the authorization_details claim from the challenge, a reference to protected resource state, or other
information agreed between the protected resource and authorization server.¶
The transaction token MUST have a limited lifetime. The authorization server SHOULD issue transaction tokens with short expiration times because they represent authorization for a specific operation.¶
When requester context, such as the act claim, is present in the transaction authorization challenge, the authorization server MUST include
equivalent requester context in the transaction token or otherwise bind the transaction token to that context.¶
The client provides the transaction token to the agent. The agent presents the transaction token to the protected resource together with the request for the challenged operation.¶
In deployments where one agent delegates work to another agent, the transaction token MAY be relayed through one or more intermediate agents before being presented to the protected resource. Each agent that relays the transaction token MUST relay it without modification. An agent MUST NOT use the transaction token for a different transaction, different protected resource, or different requester context.¶
When HTTP is used, the transaction token MUST be presented using the Txn-Token header field defined by [TXN-TOKENS].¶
For example:¶
POST /payments HTTP/1.1
Host: resource.example.com
Authorization: Bearer mF_9.B5f-4.1JqM
Txn-Token: eyJhbGciOiJFUzI1NiIsInR5cCI6InR4bnRva2VuK2p3dCJ9...
Content-Type: application/json
{
"amount": "5000.00",
"currency": "GBP",
"recipient": "Example Ltd"
}
The agent MUST NOT modify the transaction token. If the agent cannot present the transaction token to the protected resource, the challenged operation cannot be completed using this mechanism.¶
Before accepting a transaction token as authorization for a challenged operation, the protected resource MUST validate the transaction token according to [TXN-TOKENS] and the requirements of this document.¶
At a minimum, the protected resource MUST verify that:¶
the transaction token was issued by the authorization server identified by the aud claim of the transaction authorization challenge;¶
the transaction token audience identifies the protected resource, unless an application profile defines a different audience binding;¶
the transaction token has not expired;¶
the transaction token contains the same txn value as the transaction authorization challenge;¶
the transaction token authorizes the requested operation;¶
any requester context required by the transaction authorization challenge is present and matches the challenged transaction;¶
the transaction token has not previously been used, if the protected resource requires single-use transaction tokens.¶
A protected resource MUST reject a transaction token that does not correspond to the transaction authorization challenge for the requested operation.¶
A protected resource SHOULD treat transaction tokens as single-use when the challenged operation is non-idempotent or high impact. If single-use semantics are required, the protected resource MUST maintain sufficient state to detect replay of the transaction token or transaction identifier.¶
The protected resource MUST NOT accept a transaction token as general authorization for operations other than the challenged operation.¶
Transaction authorization challenges and transaction tokens are security-sensitive artifacts. A transaction authorization challenge requests authorization for a specific operation, and a transaction token represents evidence that the challenged operation was authorized. Implementations need to ensure that these artifacts cannot be modified, replayed, substituted, or used for a different operation.¶
A protected resource MUST sign each transaction authorization challenge using an asymmetric signing key. Clients and authorization servers MUST validate the challenge signature before using any claim from the challenge for display, policy evaluation, or authorization decisions. If a challenge cannot be validated, it MUST NOT be treated as authentic.¶
The authorization server MUST verify that the aud claim identifies the authorization server and that the protected
resource identified by the iss claim is trusted to request transaction authorization for the requested operation. An
authorization server MUST NOT issue a transaction token for a challenge issued by an unrecognized or unauthorized
protected resource.¶
The transaction authorization challenge and the resulting transaction token MUST be bound to the same transaction
identifier. The protected resource MUST verify that the txn value in the transaction token matches the txn value
from the challenge. A transaction token MUST NOT be accepted as authorization for any operation other than the
challenged operation.¶
Transaction tokens can be replayed if they are not sufficiently constrained. Authorization servers MUST issue transaction tokens with short lifetimes. Protected resources SHOULD treat transaction tokens as single-use for non-idempotent or high-impact operations, and maintain sufficient state to detect replay where single-use semantics are required.¶
The agent is not trusted to modify or summarize the challenge. Clients and authorization servers MUST NOT rely on an unprotected description supplied by the agent as the basis for user display, policy evaluation, or authorization decisions. Information presented to the user or approving party SHOULD be derived from the validated challenge, from protected resource state identified by the challenge, or from information otherwise authenticated and bound to the challenge.¶
When requester context is relevant to the authorization decision, the protected resource SHOULD include that context
in the challenge, for example using the act claim. The authorization server MUST consider requester context when it
is present. This helps prevent an approval obtained for one agent, client, user, or delegation context from being used
to authorize a transaction initiated by another requester.¶
The client can inspect the challenge before presenting it to the authorization server. This is important because the challenge can contain sensitive information about the requested operation, user intent, protected resources, or organizational policy. Clients SHOULD allow the user to decline before disclosing the challenge to the authorization server when the challenge contains privacy-sensitive transaction details.¶
Challenges and transaction tokens can reveal sensitive information if logged or exposed to unintended parties. Implementations SHOULD minimize the information included in challenges and transaction tokens, avoid logging them unless necessary, and protect them in transit and at rest.¶
Application profiles that define additional challenge claims, request binding mechanisms, or alternative audience bindings MUST describe how those extensions preserve challenge integrity, prevent replay and substitution, and avoid confused-deputy attacks.¶
This document registers the Accept-Txn-Challenge HTTP field name, one
OAuth error code, two OAuth parameters, two OAuth Protected Resource
Metadata parameters, one OAuth Authorization Server Metadata Parameter and two JWT claims.¶
IANA is requested to register the following field name in the "HTTP Field Name" registry [IANA.HTTP.FieldNames] as a structured Header Field:¶
IANA is requested to register the following error value in the "OAuth Extensions Error" registry [IANA.OAuth.Parameters]:¶
IANA is requested to register the following parameters in the "OAuth Parameters" registry [IANA.OAuth.Parameters]:¶
transaction_challenge¶
rs-client response, transaction authorization request¶
IETF¶
this document¶
transaction_authorization_id¶
transaction authorization request, transaction authorization response¶
IETF¶
this document¶
IANA is requested to register the following values in the "OAuth Protected Resource Metadata" registry [IANA.OAuth.Parameters].¶
txn_challenge_jwks_uri¶
URL of the protected resource's JSON Web Key Set containing public keys used to validate transaction authorization challenges.¶
IETF¶
this document¶
txn_challenge_signing_alg_values_supported¶
JSON array containing the JWS alg values supported by the protected resource for transaction authorization challenges.¶
IETF¶
this document¶
IANA is requested to register the following claims in the "JSON Web Token Claims" registry [IANA.JSON.Web.Token].¶
reason¶
Human-readable explanation of why authorization, confirmation, or other processing is required.¶
IETF¶
this document¶
reason_uri¶
URI identifying additional information about why authorization, confirmation, or other processing is required.¶
IETF¶
this document¶
TODO acknowledge.¶