| Internet-Draft | OAuth Mission Transaction Authorization | August 2026 |
| McGuinness | Expires 23 February 2027 | [Page] |
A delegated agent's Mission may require that a specific action, with
its concrete parameters, be authorized fresh at the point of use,
across an organizational boundary, without a live callback on the
execution path. This document defines a Mission Transaction
Authorization profile of the OAuth transaction authorization
challenge [I-D.draft-rosomakho-oauth-txn-challenge]. It keeps that
protocol's wire contract whole and adds only the Mission layer: the
profiled challenge claims, subject_token credential carriage,
Mission and authority validation, approval as decision input, the
fresh decision, and the transaction-token profile.¶
This note is to be removed before publishing as an RFC.¶
The latest revision of this draft can be found at https://mcguinness.github.io/mission-bound-authorization/draft-mcguinness-mission-txn-authorization.html. Status information for this document may be found at https://datatracker.ietf.org/doc/draft-mcguinness-oauth-mission-transaction-authorization/.¶
Source for this draft and an issue tracker can be found at https://github.com/mcguinness/mission-bound-authorization.¶
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 23 February 2027.¶
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.¶
An agent's Mission can carry actions whose consequence warrants more than the Mission's own approval and more than a stronger authentication context. Cross-organizational delegation sharpens the requirement: [I-D.draft-reece-wimse-cross-org-delegation] describes delegated work that must remain subject to execution-time human authorization, bound to the concrete action, parameters, resource, on-behalf-of principal, and authorized presenter, surviving delegation, and usable at most once, without a live call back to the approval authority on the execution path.¶
The Mission family already supplies the policy model: the Common
Constraint requires_action_approval
([I-D.draft-mcguinness-oauth-mission]) designates an action as
requiring a fresh approval and is monotonic under the subset rule, and
Mission Runtime's action-bound approval
([I-D.draft-mcguinness-mission-runtime]) defines concrete-parameter
binding, a maximum age, a fresh decision, and atomic consumption. What
neither defines is the portable wire workflow that carries an
approval across a trust boundary to a resource that must enforce
locally. This document supplies that workflow as a profile of the
OAuth transaction authorization challenge
[I-D.draft-rosomakho-oauth-txn-challenge]. The profile keeps that
protocol's challenge type, request and response parameters,
capability signal, endpoint, and asynchronous polling whole; it adds
the Mission-profiled challenge claims, the credential carried to the
transaction endpoint, Mission and authority validation, approval as
decision input, the fresh decision, and the transaction-token
profile.¶
The approval is not authority. The transaction token is authority because a trusted issuer minted it after a fresh decision bounded by the Mission and the approved operation.¶
This profile is the strict-delta consumer of the upstream protocol; engagement with that protocol's own evolution proceeds through the family's coordination process, outside this document.¶
This document is optional. A deployment that satisfies action-bound approval by another means, a synchronous local decision, a bespoke callback, or no cross-organizational case at all, is fully conformant to the issuance profile and the runtime profile and is unaffected by this document. It places no new requirement on either.¶
A deployment claims this profile only when it carries action-bound
approval across a trust boundary through the transaction challenge
and token defined here. The Mission, its Authority Set, the subset
rule, and requires_action_approval are unchanged; this document
governs only the portable wire result that a resource and a
Transaction Authorization Server exchange to satisfy an action-bound
approval requirement.¶
This profile tracks an in-progress substrate. It depends normatively
on the OAuth transaction authorization challenge
([I-D.draft-rosomakho-oauth-txn-challenge]), an early Internet-Draft
that is not ratified and whose details may change, so this profile is
not yet a stable interface and will track the substrate as it
evolves. It reuses, without restating, the upstream challenge type,
parameters, endpoint, and polling states, and the Mission's own
mission claim, requires_action_approval, parameter_digest, and
act delegation chain exactly as those documents define them.
Action-bound approval within a single trust domain, which needs only
the runtime profile, is the stable path; deploy this profile for
evaluation rather than as a stable interface. This document is
Experimental for that reason, tracking its substrate and crossing to
the stable tier by reclassification when the substrate does.¶
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 Mission, Authority Set, Approver, Mission Issuer,
mission_resource_access, and the subset rule as the issuance profile
defines them ([I-D.draft-mcguinness-oauth-mission]); action-bound
approval, the Operation Profile, parameter_digest, and Mission state
freshness as the runtime profile defines them
([I-D.draft-mcguinness-mission-runtime]); the envelope anchor,
canonical-object digest, and raw-octet digest species of the default
commitment construction as the substrate defines them
([I-D.draft-mcguinness-mission-substrate]); and the transaction
authorization challenge, its claims, its endpoint, and its pending and
polling states as the OAuth transaction authorization challenge
defines them ([I-D.draft-rosomakho-oauth-txn-challenge]).¶
The OAuth Authorization Server acting in the role [I-D.draft-rosomakho-oauth-txn-challenge] defines for the transaction authorization endpoint: it validates the challenge, applies the Mission validation and fresh-decision rules of this profile, and mints the transaction token. A TAS instance MAY be the Mission Issuer itself or an Authorization Server deployed separately from it; this profile does not require either arrangement.¶
The protected resource of
[I-D.draft-rosomakho-oauth-txn-challenge] in this profile: it
normalizes the requested operation, computes its parameter_digest,
and signs the transaction challenge with the Mission-profiled claims
of Section 5.¶
The client of [I-D.draft-rosomakho-oauth-txn-challenge] in this profile: it holds the challenge's confirmation key, obtains the transaction token from the TAS, and presents the token to the Challenge-Issuing Resource for execution.¶
The transaction_challenge of
[I-D.draft-rosomakho-oauth-txn-challenge], typed
txn-authz-challenge+jwt, profiled by Section 5 with
the Mission-profiled claims.¶
The sender-constrained, single-audience, single-use JWT the TAS
mints of Section 7, typed application/mission-txn-token+jwt.¶
This profile is invoked when any of these requires action-bound approval for a normalized operation:¶
the matched Authority Set entry carries
constraints.requires_action_approval: true;¶
destination resource policy requires approval for the action or risk class; or¶
a current local entitlement or governance rule requires it.¶
A delegated child MUST preserve requires_action_approval: true
under the Common Constraints subset rule of
[I-D.draft-mcguinness-oauth-mission]. false remains equivalent to
omitting the member and cannot override a true ancestor. This
profile defines no second approval constraint: requires_action_approval
stays the only Authority Set designation this profile reads.¶
Step-up authentication is not a substitute. A step-up obligation ([RFC9470]) proves a stronger authentication context; it does not approve the transaction, and a Transaction Authorization Server MUST NOT treat a step-up context alone as satisfying an action-bound approval requirement. A durable role or relationship grant produced by a governance decision is also not an approval token: it becomes current governance state, and the fresh decision of Section 6 re-evaluates it like any other current policy input rather than consuming it as the approval itself.¶
After receiving an ordinary Mission-bound request for an action that
falls under Section 4, the Challenge-Issuing Resource
normalizes the operation under its Operation Profile and computes the
runtime parameter_digest ([I-D.draft-mcguinness-mission-runtime]).
When no valid transaction token is presented, the resource signals and
returns a transaction authorization challenge exactly as the upstream
protocol defines: the client's Accept-Txn-Challenge header gates the
signal, the transaction_authorization_required error and
transaction_challenge parameter carry the challenge, and the
challenge is a JWT with protected header typ
txn-authz-challenge+jwt
([I-D.draft-rosomakho-oauth-txn-challenge] Sections 4.1, 4.2, and
4.2.1). This document does not restate that mechanism.¶
The challenge's REQUIRED claims iss, aud, iat, exp, jti,
txn, authorization_details, and reason, and its OPTIONAL act
and reason_uri, are exactly as
[I-D.draft-rosomakho-oauth-txn-challenge] Section 4.2.2 defines
them. authorization_details carries exactly one operation-scoped
mission_resource_access entry ([I-D.draft-mcguinness-oauth-mission])
or one compound-action detail whose registered semantics make the
operation atomic. The Operation Profile a TAS and the resource apply
resolves deterministically from the challenge's iss and that entry's
type member ([RFC9396]): a resource versions its Operation Profile
by versioning type, and a TAS MUST retain and recognize a superseded
Operation Profile version for as long as a pending workflow still
references it.¶
This profile adds the following REQUIRED challenge claims:¶
mission:REQUIRED. Copied from the verified Mission-bound access token,
unchanged, including the invariant origin principal
(mission.subject) where the Origin Principal profile applies
([I-D.draft-mcguinness-oauth-mission-cross-domain]).¶
parameter_digest:REQUIRED. Computed exactly as the runtime profile specifies ([I-D.draft-mcguinness-mission-runtime]); this document defines no second canonicalization.¶
cnf:REQUIRED. The presenter key [RFC7800] to which the resulting transaction token must be bound.¶
The resource MUST derive mission, parameter_digest, and cnf from
the request and the verified Mission-bound access token, and MUST NOT
accept a client-supplied replacement for any of them.¶
Raw action parameters SHOULD remain outside the challenge when the TAS
can decide from parameter_digest plus privacy-preserving attributes.
Where a decision needs the normalized operation itself, this profile's
one resource-controlled retrieval mechanism is the upstream
reason_uri claim: dereferencing it, over a channel authenticated to
the Challenge-Issuing Resource, returns the normalized operation bound
to txn, the challenge jti, and parameter_digest; the party
relying on the retrieved operation MUST recompute parameter_digest
against it before relying on it. This document defines no second,
unspecified attribute channel.¶
The Presenting Client submits the challenge to the
transaction_authorization_endpoint exactly as
[I-D.draft-rosomakho-oauth-txn-challenge] Section 5.1 defines:
client_id where required, and the signed transaction_challenge.
This profile adds two REQUIRED parameters that carry the Mission-bound
access token as an assertion, under [RFC8693] Sections 2.1 and 3:¶
subject_token:REQUIRED. The Mission-bound access token.¶
subject_token_type:REQUIRED. urn:ietf:params:oauth:token-type:access_token.¶
The request also carries proof of possession of the challenge's cnf
key, using DPoP [RFC9449] or mTLS [RFC8705], the same mechanism
Section 7 binds the resulting token to. A holder-mediated
cross-organizational delegation Chain is not an acceptable
subject_token for this version of the profile; presenting one at the
transaction endpoint returns once this profile defines its own
subject_token_type and presentation binding for the Chain
Presentation the cross-organizational delegation profile serializes
([I-D.draft-mcguinness-oauth-mission-cross-org-delegation]).¶
The TAS authenticates the Presenting Client and validates the challenge exactly as [I-D.draft-rosomakho-oauth-txn-challenge] Sections 5.1 and 4.6 require. This profile adds, in order:¶
validating subject_token's audience against the challenge's iss
and its cnf against the proof of possession presented on this
request, establishing that the presented Mission-bound access token
was issued for the challenged resource and is held by the party
presenting the challenge;¶
requiring exact equality between the challenge's mission and
subject_token's mission invariants;¶
establishing that the challenge's authorization_details is within
subject_token's Authority Set under the subset rule
([I-D.draft-mcguinness-oauth-mission]) and applies to the
challenge's iss and resource;¶
enforcing requires_action_approval and destination resource
policy;¶
obtaining or resolving a governed approval from an acceptable
independent Approver or policy authority, bound to txn, the
operation identity, parameter_digest, the resource, the Mission,
the destination-local subject and, where the Origin Principal
profile applies
([I-D.draft-mcguinness-oauth-mission-cross-domain]), the
issuer-qualified origin principal, and the presenter key;¶
verifying the approval's status, scope, grant time, maximum age,
and approved_until; and¶
running a fresh authorization decision using the verified approval
as context together with current Mission state, subject_token
validity, client and key binding, resource policy, and the concrete
parameter inputs or attributes; the decision consumes the
destination-local subject and, where present, the issuer-qualified
origin principal as distinct inputs and revalidates their current
mapping and entitlement.¶
Any denial ends the flow. Completion of step 6 alone MUST NOT trigger token issuance and MUST NOT bypass step 7.¶
An approval obtained under step 5 SHOULD carry the shape of an AuthZEN Access Request and Approval Profile approval object ([ARAP]); steps 6 and 7 mirror the checks the AuthZEN binding applies to that object when it is presented as decision input, never as a bearer bypass ([I-D.draft-mcguinness-mission-authzen]). Where an Approval Governance Record backs the decision, that record is the authoritative provenance of who approved and under what authority ([I-D.draft-mcguinness-mission-approval-governance]); this document neither restates nor requires it.¶
The destination-local subject the flow binds, from the approval of step 5 through the token of Section 7, is established at admission and revalidated at completion:¶
verify subject_token and establish its issuer-qualified
identity, the pair of its iss and its sub;¶
establish the destination-local subject from that identity under the configured namespace policy of Section 6.1.1;¶
where the Origin Principal profile applies
([I-D.draft-mcguinness-oauth-mission-cross-domain]), co-resolve
that subject with mission.subject under the profile's
destination mapping rule; a conflict between them MUST be refused;¶
persist, on the pending workflow, the issuer-qualified source identity, the pinned destination-local subject, the origin principal where present, and the identity and version of the namespace policy that produced the pinned subject;¶
at completion, resolve the current namespace policy against the persisted source identity again and require it to produce the pinned subject; a policy that no longer exists, no longer accepts the identity, or produces any other value MUST be refused; and¶
only then run the fresh decision of step 7 and mint the token.¶
A TAS MAY restrict which subject_token issuers and subject
namespaces it accepts. Whether an accepted issuer shares this
Authorization Server's subject namespace is configured trust policy,
never inferred from request data. For a same-namespace issuer the
verified sub is the destination-local subject, unchanged. For every
accepted foreign namespace the TAS MUST apply an injective,
issuer-qualified mapping from the pair (iss, sub) into its own
namespace and use the mapped value. A missing, ambiguous, stale, or
disabled mapping MUST be refused rather than guessed.¶
The challenge's exp bounds initial admission only: the Presenting
Client MUST submit before it expires, and a late challenge is refused
into a new workflow, never revived into an existing one. On
acceptance, the pending workflow, identified by the upstream
transaction_authorization_id (correlated to the ARAP task handle
where ARAP backs the approval,
[I-D.draft-mcguinness-mission-authzen]), carries its own
deployment-declared lifetime: the upstream expires_in of
[I-D.draft-rosomakho-oauth-txn-challenge] Section 5.2. Steps 6 and 7
of Section 6 revalidate current Mission state,
subject_token validity, approval freshness, client and key binding,
entitlement, and policy, fresh at the moment they run; the
transaction token's exp is bounded by those inputs and the pending
workflow's remaining lifetime, never by the already-consumed
challenge exp (Section 7).¶
Repeated initial submission of the same (challenge issuer, challenge
jti, client, cnf) MUST return the existing pending workflow or fail
deterministically; it MUST NOT create a second workflow for the same
admitted challenge.¶
The set of acceptable Transaction Authorization Servers,
Challenge-Issuing Resources, and approval authorities is deployment
and federation policy, never taken from an untrusted request claim.
Key discovery rides the upstream metadata
([I-D.draft-rosomakho-oauth-txn-challenge]): a Challenge-Issuing
Resource publishes its challenge-signing keys at
txn_challenge_jwks_uri with
txn_challenge_signing_alg_values_supported, and the TAS resolves a
challenge issuer's keys there and nowhere else; a client discovers
the TAS through transaction_authorization_endpoint in Authorization
Server metadata. A TAS MAY
be the Mission Issuer itself or an Authorization Server deployed
separately from it; a resource trusts a TAS's token-signing key and
policy role through pre-established federation metadata, not through
anything the request asserts about itself.¶
On permit, the Transaction Authorization Server issues a JWT with
protected header typ mission-txn-token+jwt (Section 13). This is its own
JWT access-token profile with the complete validation semantics below;
it does not conform to [RFC9068], and a Resource Server that
recognizes only at+jwt correctly rejects it as unknown. A deployment
wanting RFC 9068 interoperability instead relies on the upstream txn
claim carried by an ordinary JWT access token
([I-D.draft-rosomakho-oauth-txn-challenge] Section 6); that is not
this profile's shape. Its claims:¶
iss, iat, exp, jti:aud:REQUIRED. A singleton, exactly the verified challenge's iss.
Never a list and never any other value.¶
sub:REQUIRED. The destination-local subject, derived from the verified
issuer-qualified identity of the presented subject_token under
the establishment and revalidation rules of
Section 6.1 and the namespace contract of
Section 6.1.1: the pinned subject those rules produced at
admission and reconfirmed at completion, never a value derived a
second way at minting time. Where the Origin Principal profile
applies ([I-D.draft-mcguinness-oauth-mission-cross-domain]), the
issuer-qualified origin principal travels in mission.subject,
alongside the local subject and never in place of it. Never the
Approver.¶
client_id:REQUIRED. The client authenticated at the transaction endpoint ([RFC8693] Section 4.3). The upstream client and the executing agent MAY be different parties; this claim identifies the former.¶
act:REQUIRED whenever requester or actor context existed on
subject_token or the challenge; otherwise absent. Present under
the same conditions and structure as the issuance profile's act
chain ([I-D.draft-mcguinness-oauth-mission], Section "Delegation
Within a Mission"; the OAuth Actor Profile
[I-D.draft-mcguinness-oauth-actor-profile] remains the structural
reference). The chain is attribution, never authority: it names
who acted, for audit and as policy input, and grants nothing by
itself. Actor proofs and receipts, where a deployment carries them,
stay off this token; they ride subject_token or the delegation
context the TAS verified at redemption (Section 6),
never the transaction token itself.¶
txn:REQUIRED. Copied unchanged from the verified challenge.¶
authorization_details:REQUIRED. The exact permitted entry, never wider than the
challenge, subject_token's Authority Set, or the fresh decision of
Section 6.¶
parameter_digest:REQUIRED. Copied only after recomputation and verification against the challenge's value.¶
mission:REQUIRED. The Mission claim's profiled members, value-equal to the
verified challenge's mission. The transaction token is a freshly
signed JWT; this is value equality of the profiled members, not
byte preservation of a carried artifact.¶
cnf:REQUIRED. Bound to the verified presenter key, DPoP [RFC9449]
(cnf.jkt) or mTLS [RFC8705] (cnf.x5t#S256), equal to the
challenge's cnf and the proof verified at redemption.¶
The token MUST NOT carry a generic approval object, a single_use
boolean, raw rendered approval text or action parameters, roles or
relationships conferred by an approval workflow, or evidence objects
whose lifecycle and disclosure rules belong to the evidence and audit
profiles. It MUST NOT carry a refresh token, a delegation grant, or
token-exchange input, and MUST NOT be accepted as a general
Mission-bound access token for any purpose beyond the challenged
operation.¶
The token's exp MUST be no later than the earliest of: approval
freshness or approved_until; subject_token's own validity; Mission
expiry; the pending workflow's remaining lifetime
(Section 6.2); and deployment maximum. It is never bounded by
the already-consumed challenge exp. A short token lifetime limits
stale-policy and revocation exposure but does not replace the
point-of-use state checks Section 8 requires.¶
The Challenge-Issuing Resource verifies the transaction token locally, without calling the Transaction Authorization Server on the request path:¶
exact token typ, trusted issuer and signature, intended aud,
iat and exp, and token class;¶
cnf proof by the current presenter;¶
equality of txn, the mission invariants, the operation
authorization_details, and the recomputed parameter_digest
with the pending operation;¶
origin principal, local subject, and actor consistency under the principal profile in effect ([I-D.draft-mcguinness-oauth-mission-cross-domain]);¶
current local policy, principal entitlement, and that the
challenged operation remains within the Mission's current
Effective Authority Set, observed through a full audience-scoped
Mission Status Response, containment- and discharge-aware issuer
token introspection, or an equivalent authenticated, versioned
authority source that reflects every relevant authority_changed
update, each within its declared freshness bounds; the Status
List MAY serve as a lifecycle prefilter only and MUST NOT alone
satisfy this step, since its two-bit reliance state does not
observe containment or discharge
([I-D.draft-mcguinness-oauth-mission-status],
[I-D.draft-mcguinness-oauth-mission-signals],
[I-D.draft-mcguinness-mission-runtime]); and¶
atomic first use of the resource-scoped txn in the consumption
domain; a second, distinct token jti presented for an
already-consumed txn is the same replay and MUST be refused,
never executed as a new attempt.¶
The Effective Authority Set belongs to the Mission and is evaluated
at the point of use, not carried by the token: an active Mission
observed before containment or discharge narrowed the set does not
satisfy step 5. The transaction token transports a bounded,
action-bound approval and never substitutes for the Mission's current
authority, applicable Resource policy, or consumption state.¶
Consumption of txn MUST be linearizable across every replica capable
of executing the same operation, meeting the metering companion's
Exact enforcement profile
([I-D.draft-mcguinness-mission-metering]): the record commits before
the irreversible effect, or atomically with it where the operation
store supports that transaction. If the consumption store is
unavailable, the resource MUST fail closed for this profile.¶
txn identifies the resource transaction and is the atomic
consumption key; challenge jti identifies one admission into a
workflow; transaction_authorization_id (or the ARAP task handle
backing it) identifies one pending workflow; token jti identifies
one issuance from that workflow, not the one execution; and the
Operation Profile's idempotency key identifies one effect. At most one
authorization result exists per accepted workflow: repeated polling
after a decision returns the same token or result stably, and a TAS
MUST NOT mint a second token, under a different jti, for a txn
whose workflow already produced one. An ambiguous retry looks up the
prior result along this chain, from txn and token jti to the
workflow to the idempotency key, and the resource returns
duplicate_suppressed as the runtime profile defines it
([I-D.draft-mcguinness-mission-runtime]) rather than executing
again. A genuinely new attempt requires a new challenge, a new
workflow, a new token, and a new idempotency key.¶
This document defines no evidence object of its own. The approval
service or TAS records Approval Governance and, where configured,
Consent Evidence state
([I-D.draft-mcguinness-mission-approval-governance],
[I-D.draft-mcguinness-oauth-mission-consent-evidence]); the fresh
decision and the executing resource emit Decision Evidence and
Execution Evidence under the runtime evidence profile
([I-D.draft-mcguinness-mission-runtime-evidence]), which a Mission
Receipt may summarize ([I-D.draft-mcguinness-mission-runtime]); and
where durable independent proof is required, the audit profile
registers the relevant evidence
([I-D.draft-mcguinness-mission-audit]). These records correlate by
the Mission reference, txn, the transaction token's jti,
parameter_digest, and idempotency identity. None of them ride in the
transaction token.¶
The Transaction Authorization Server MUST be able to show that its fresh decision relied on a valid approval. A resource's own authorization decision rests on the trusted, typed transaction token plus the current local checks of Section 8, never on parsing an arbitrary evidence blob presented at the request.¶
This profile defines no Continuation Transport and no continuity
guarantee of its own
([I-D.draft-mcguinness-oauth-mission-continuation]). Its token is a
bounded, single-use authorization artifact. The token carries txn,
its own jti, and parameter_digest; those correlate the runtime
evidence profile's execution-time evidence to this hop
([I-D.draft-mcguinness-mission-runtime-evidence]). The Operation
Profile's idempotency identity correlates the effect and is not
carried by the token.¶
The pending and polling states and errors of
[I-D.draft-rosomakho-oauth-txn-challenge] Section 5.3
(authorization_pending, slow_down, access_denied,
expired_token) apply unchanged; this document defines no second
error vocabulary for that surface. Initial validation only admits a
workflow: only the fresh decision at Section 6
completion is final, and an admitted workflow MUST still refuse there
when a fresh input no longer holds.¶
Deny. The workflow MAY return or request another approval.¶
Terminal refusal for that token or challenge.¶
Fail closed. Retry only according to the declared state-recovery policy.¶
Return the prior idempotent result via the relationship map of
Section 8 when the Operation Profile allows it;
otherwise duplicate_suppressed
([I-D.draft-mcguinness-mission-runtime]). Never execute again.¶
typ or unrecognizedauthorization_details semantics:MUST be rejected outright, never parsed on a best-effort basis.¶
The security considerations of the issuance profile [I-D.draft-mcguinness-oauth-mission] and the runtime profile [I-D.draft-mcguinness-mission-runtime] apply.¶
A challenge is scoped to one resource, one operation, and one
presenter key. Section 6's step 1 (subject_token
audience and cnf), step 2 (exact mission equality), and step 3
(authority subset) together close the case of a challenge issued
for one resource being redeemed for another's benefit, or a
Mission-bound access token issued for a different resource or held
by a different party being accepted as this profile's credential; a
TAS that skips any of the three can be induced to authorize an
operation the verified authority never covered.¶
An approval is bound to txn, the operation identity, and
parameter_digest. A TAS that treats a completed approval as
standing authority for a different transaction, rather than
re-running step 7 fresh for each redemption, reintroduces the
bearer-grant failure mode this profile exists to close.¶
The TAS is the component every resource on the deployment trusts to
have run a genuine fresh decision. Its compromise mints tokens for
operations no human or policy authority approved, and a long-lived
pending workflow widens the window in which subject_token, its
key, or the approval authority can be compromised before that
decision runs. Deployments SHOULD isolate the TAS's signing key and
decision logic from the agent's own execution environment, matching
the runtime profile's mediated-custody posture, SHOULD bound the
pending workflow's declared lifetime (Section 6.2) to what
genuine approval latency requires, and SHOULD bound token lifetime
tightly enough that a detected compromise's blast radius is the
outstanding token population, not the Mission's full remaining
lifetime.¶
The at-most-once property this profile claims exists only while the
consumption store meets the Exact enforcement profile of
[I-D.draft-mcguinness-mission-metering]; a deployment that
degrades to a merely local cache during partition no longer has
that property and MUST NOT claim it. Every failure path of
Section 10 resolves to denial, refusal, or a fail-closed
state, never silent pass-through; an implementation that treats an
unrecognized typ, an unverifiable approval, or an unreachable
consumption store as permission is nonconformant.¶
Raw action parameters and approval detail stay off the transaction
token by design: the token carries parameter_digest, not the
parameters, and no approval object. A Transaction Authorization
Server that needs more than the digest to decide or render obtains
raw values through the reason_uri retrieval of
Section 5, never by widening the token.¶
Digest-plus-attributes authorization lets a TAS decide without
learning more than the deployment chooses to disclose over that
channel; a deployment SHOULD weigh what attributes it discloses to
the TAS against what the decision genuinely requires. Presenting
subject_token discloses to the TAS that the Presenting Client holds
Mission-bound authority at the challenged resource; the TAS already
is a party the deployment trusts with the fresh decision, so this is
not a disclosure beyond what Section 6 already requires
it to evaluate.¶
txn and the transaction token's jti are a correlation surface: any
party observing both a challenge and its redeemed token can link one
resource transaction to one TAS decision. This is the profile's
intended accountability property, not an incidental leak, but a
deployment SHOULD scope txn values to the minimum lifetime and
audience that Section 5 and Section 8
require.¶
IANA is requested to register one media type per [RFC6838]. Its
JOSE protected typ is the registered media type with the
application/ prefix omitted where JWS permits the shortened form; an
HTTP Content-Type carries the full media type. This document
registers no new claim, parameter, or metadata member: txn,
mission, cnf, parameter_digest, subject_token, and
authorization_details are each defined by the document that owns
them and are reused here unchanged. This document does not register a
second challenge media type; the challenge keeps the upstream typ
txn-authz-challenge+jwt unchanged.¶
Type name: application¶
Subtype name: mission-txn-token+jwt¶
Required parameters: none¶
Optional parameters: none¶
Encoding considerations: 8bit; JWS Compact Serialization [RFC7515]¶
Security considerations: see Section 11¶
Interoperability considerations: see this document¶
Published specification: this document¶
Applications that use this media type: Mission-Bound Authorization Challenge-Issuing Resources, Transaction Authorization Servers, and Presenting Clients¶
Fragment identifier considerations: not applicable¶
Additional information:¶
Person & email address to contact for further information: Karl McGuinness public@karlmcguinness.com¶
Intended usage: COMMON¶
Restrictions on usage: none¶
Author: IETF¶
Change controller: IETF¶
The transaction token's registered semantics are sender-constrained,
single-audience, and single-use. A Resource Server that recognizes
typ mission-txn-token+jwt enforces exactly those properties regardless
of any member on the token; this document defines no single_use
member anywhere, because single use is semantic to the type itself.¶
This document is defined against the Mission model rather than against OAuth 2.0 mechanics: it is a substrate-neutral consumer, and this section is its consumption declaration under the rule of Mission Substrate Requirements ([I-D.draft-mcguinness-mission-substrate]) that a substrate-neutral profile declare the kernel functions and optional capabilities it consumes.¶
From the contextual-governance kernel it consumes the Mission
identifier and issuer, the kernel's Mission Reference and Controller
carried in the mission claim, and the active and non-active gate the
fresh decision of Section 6 observes.¶
Its declaration against the optional capabilities:¶
| Capability | Consumption | Scope of consumption |
|---|---|---|
| Lifecycle-Gated Authorization | required | A transaction token is minted only from a Mission the TAS observed active; this document adds no second gate to the issuance profile's ([I-D.draft-mcguinness-oauth-mission]) |
| Structured Authority | consumed | The challenge and token's authorization_details entry is evaluated against the verified Authority Set under the subset rule (Section 6 step 3) |
| State-Observable | consumed | Offline verification observes current Mission state within its declared freshness bound (Section 8); establishing that state is the runtime and Status profiles' concern |
| Monotonic Derivation | not consumed | A transaction token narrows nothing durable: it is a bounded, single-use permit, not a Mission, Child Mission, or successor |
| Credential-Bound | required and produced |
subject_token MUST already be sender-constrained by cnf, and the minted transaction token is itself a cnf-bound artifact (Section 7); this profile both requires and produces the capability |
| Authorized Context Correlation | not consumed | The Presenting Client authenticates directly with its own cnf proof; no issuer-established correlation joins a separate credential to the Mission here |
| Independently Verifiable | produced | Offline verification of Section 8 independently verifies the transaction permit, the transaction binding, the carried authority, and the presenter binding, all as of issuance; it is explicitly not independent verification of Mission approval history or current Mission state |
| Portable Evidence | not consumed | This document defines no evidence artifact of its own; the evidence plane of Section 9 carries the durable account |
Beyond the kernel, this profile also consumes companion capabilities
outside the substrate contract: the metering companion's Exact
enforcement profile for atomic txn consumption and the Mission
Status surface for freshness-bounded state observation (both
Section 8), and, conditionally, the cross-domain Origin
Principal profile for the invariant origin principal
(Section 5). All three are consumed, none produced.¶
These consumed capabilities join conjunctively, at the runtime decision, with the Mission's current Effective Authority Set and any applicable cumulative-consumption or stateful operational gate ([I-D.draft-mcguinness-mission-runtime], Section "The Runtime Decision"): the fresh, action-bound permit this profile mints is one more independent gate, never a substitute for the others.¶
The carrier-side dual of this declaration, what a protocol binding must provide for another substrate to host this profile's flow, is Section 15.¶
The wire mechanics of this document are one discharge of a carrier-neutral flow: Section 14 declares what this profile consumes from the Mission kernel, and this section declares what the flow itself requires, in three layers. Section 15.1 states the invariants that make the flow safe on any substrate. Section 15.2 states the slots a protocol binding MUST provide to carry them. Section 15.3 names this document's own discharge of each slot. A binding that cannot provide a slot does not host this profile: absence is fail-closed, and there is no partial hosting.¶
Four roles participate: the Challenging Resource, which owns the operation and its state; the Transaction Authority, which admits the workflow and mints the result; the Presenter, which holds the committed key; and the Approver, whose governed decision is input to the Transaction Authority's own. The invariants bind commitments, not member names:¶
Every commitment the challenge carries, to the operation, to the concrete parameters, to the Mission context, and to the presenter key, is derived by the Challenging Resource from its own authoritative state; a caller-supplied replacement for any of them is never accepted.¶
Admission and completion are distinct: challenge expiry bounds admission alone, the pending workflow has its own declared lifetime, and completion runs a fresh authorization decision to which the approval is input and never a bypass. A step-up authentication context and durable governance state never issue alone.¶
At most one result exists per transaction instance, across every workflow that references it, and repeated polls return that result stably.¶
The result is single-use by class, sender-constrained to the committed key, audience-restricted to the Challenging Resource, carries no approval object, no evidence, and no raw parameters, and is never acceptable as a general credential of the substrate.¶
Immediately before execution, the Challenging Resource re-establishes, within declared freshness bounds, current Mission lifecycle state, current authority, current entitlement, and its own policy, and consumes the transaction instance atomically, linearizably across every replica capable of executing the operation, failing closed when either the state source or the consumption store is unavailable. A result minted before a termination or a narrowing never executes after it.¶
The result's subject is the destination-local subject; the issuer-qualified origin principal travels alongside it, never in place of it; actor context is attribution, never authority.¶
Refusals are typed, and pending, denied, and expired workflow states are distinguishable, so a refused caller can re-plan without receiving a map of the environment.¶
A protocol binding provides one slot for each requirement below. Each slot is named by function; the binding supplies the substrate-native carrier.¶
A resource-authenticated artifact for the commitments of Section 15.1, whose signing keys a verifier resolves from the issuer's published metadata and nowhere else; one issuer's key never verifies another issuer's challenge.¶
A versioned operation identifier scoped to the Challenging Resource, validated as a complete entry and yielding a typed operation; a human-readable member is never authorization input; a superseded version resolves only for workflows admitted under it.¶
The runtime profile's parameter_digest
([I-D.draft-mcguinness-mission-runtime]), adopted into the
binding's native commitment, or a verifiable equivalence to it. A
binding never defines a second canonicalization.¶
A transaction-instance identifier with its own lifetime, distinct from any content address, under which repeated initial submission of one (challenge issuer, challenge identifier, client, presenter key) returns the existing workflow or fails deterministically.¶
An artifact class every verifier can distinguish from each of the substrate's general credential classes, carrying the single-use semantics of invariant 4 on the class itself, never on a member.¶
Proof of the committed presenter key at redemption and at execution, with the execution proof bound to the presented artifact itself, not only to the key.¶
An authoritative source for the execution-time checks of invariant 5, with a declared freshness bound, available to the Challenging Resource unconditionally on the execution path.¶
A mapping of pending, denied, and expired workflow states onto the substrate's native vocabulary; the binding defines no second vocabulary.¶
| Requirement | This document |
|---|---|
| Challenge carrier | The signed challenge of Section 5, keys via txn_challenge_jwks_uri
|
| Operation identity | The authorization_details entry type and Operation Profile rules of Section 5
|
| Parameter commitment |
parameter_digest, carried and verified per Section 5 and Section 8
|
| Workflow handle |
transaction_authorization_id and the admission rules of Section 6.2
|
| Result class |
mission-txn-token+jwt per Section 7
|
| Possession |
cnf under DPoP or mutual TLS, including ath, per Section 6 and Section 8
|
| Current-state source | Offline verification step 5 of Section 8: the Mission Status surface, the Status List, or issuer introspection within declared freshness bounds |
| Failure vocabulary | The upstream vocabulary applied unchanged per Section 10 |
The Mission Context Binding for AAuth ([I-D.draft-mcguinness-mission-aauth]) records, informatively, the native and missing status of each requirement against AAuth and R3 ([I-D.draft-hardt-aauth-r3]); it does not claim the capability.¶
A Transaction Authorization Server:¶
authenticates the Presenting Client and validates the challenge as [I-D.draft-rosomakho-oauth-txn-challenge] requires, then completes every added step of Section 6 in order and refuses on any failure;¶
MUST NOT let completion of the approval step alone trigger token issuance or bypass the fresh decision;¶
mints the transaction token only with the claims and MUST NOT list of Section 7; and¶
publishes its signing keys and accepted challenge issuers as
deployment and federation metadata, resolving each challenge
issuer's keys through its published txn_challenge_jwks_uri and
never accepting either from the request.¶
A Challenge-Issuing Resource:¶
derives the Mission-profiled challenge claims from the request and the verified credential, never from a client-supplied value (Section 5);¶
verifies the transaction token locally under Section 8 without a request-path call to the TAS; and¶
consumes txn atomically and linearizably across every replica,
failing closed when the consumption store is unavailable.¶
A Presenting Client:¶
proves possession of the challenge's and token's confirmation key at redemption and at execution; and¶
treats the transaction token, not the approval, as authority: it does not construct or assert an approval object of its own.¶
Positive and negative conformance vectors exist for: a valid
challenge, subject_token presentation, approval, fresh decision, and
one execution; delegated constraint preservation and an attempted
removal of requires_action_approval; step-up presented without
transaction approval; an approval valid for a changed amount,
recipient, resource, action, Mission, destination-local subject,
origin principal, actor, audience, or presenter key; an approval
complete but Authority Set, entitlement, or resource policy denying;
a missing or changed parameter_digest and a different
canonicalization; a pending
workflow that outlives its challenge and is later approved; repeated
initial submission of the same challenge returning one workflow;
challenge replay, single-replica token replay, and two distinct token
jti values presented for one txn; an ambiguous first execution
followed by an idempotent retry; an expired challenge, pending
workflow, subject_token, or transaction token; a subject_token
valid for a different resource audience or an unmatched cnf; an
untrusted resource, TAS, or approval authority; an arbitrary signed
JWT or an ordinary Mission token presented as a transaction token; a
privacy projection showing raw parameters and approval detail absent
from the token; and evidence correlation from challenge and decision
through exactly one execution or terminal refusal.¶
This document is part of the Mission-Bound Authorization work and profiles the OAuth transaction authorization challenge for cross-organizational, execution-time approval.¶