Internet-Draft Mission GNAP August 2026
McGuinness Expires 23 February 2027 [Page]
Workgroup:
Network Working Group
Internet-Draft:
draft-mcguinness-mission-gnap-latest
Published:
Intended Status:
Experimental
Expires:
Author:
K. McGuinness
Independent

Mission-Bound Authorization for GNAP

Abstract

The Grant Negotiation and Authorization Protocol (GNAP) standardized the negotiation the OAuth issuance profile assembles from parts: a grant request delivered by direct post, client instances identified by key with every request signed, a native pending state whose continuation carries asynchronous approval, structured access rights, interaction ceremonies with an integrity-protected finish, and per-token management. It deliberately left the object of that negotiation unspecified: what the resource owner approved persists nowhere as a governed artifact, the grant request is mutable by design, and no lifecycle governs authority already issued when circumstances change. This document supplies that interior from the Mission model of Mission-Bound Authorization for OAuth 2.0. The Mission Intent rides the grant request as a registered member, the interaction ceremony, or a standing basis an adopted companion supplies, is the approval event that creates the Mission record with its integrity anchors, the Mission lifecycle gates every access token issuance and rotation, grant modification is profiled as in-Mission drawdown or Approver-routed expansion, and the continuation access token is Mission continuity that is never authority. This is the fifth binding of the Mission model and the second authored against the Mission Substrate Requirements contract. It is an experimental sketch: the binding's shape and its Mission Substrate Statement are fixed here, and wire-level completeness is deferred.

About This Document

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-gnap.html. Status information for this document may be found at https://datatracker.ietf.org/doc/draft-mcguinness-mission-gnap/.

Source for this draft and an issue tracker can be found at https://github.com/mcguinness/mission-bound-authorization.

Status of This Memo

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.

Table of Contents

1. Introduction

The Grant Negotiation and Authorization Protocol (GNAP) [RFC9635] is a full redesign of delegated authorization around one continuable object: a client instance posts a grant request to the authorization server's grant endpoint, the server negotiates interaction with the resource owner as needed, and the client continues the same grant through an opaque continuation reference until authority is issued, modified, or the grant is finalized. Its companion [RFC9767] standardizes the resource server's contract with that authorization server: RS-facing discovery, token introspection, and a registry of structured token formats.

What GNAP deliberately does not standardize is the object at the center of the negotiation. How the authorization server assesses a request, what the resource owner approved, in what bounds, with what durable record, under what lifecycle: all of it is unspecified policy behind the grant endpoint. The Mission model of [I-D.draft-mcguinness-oauth-mission] (the "issuance profile") is a specification of exactly that interior: a durable Mission record created by an explicit approval event, integrity anchors committing the approved task and its derived authority, a lifecycle whose only-active rule gates issuance, and evidence surfaces built on the record. The issuance profile's own Relationship to GNAP names this document's premise: the Mission model is the OAuth-native instantiation of a binding-neutral contextual-governance kernel, and a deployment that starts from GNAP admits a candidate binding onto that substrate. This document is that binding.

Four mechanics the OAuth binding assembles from parts are native here. The grant request is delivered by direct post by construction, the property the OAuth binding retrofits with pushed authorization requests. Structured authority proposals ride the grant request's native access rights, the intake role Rich Authorization Requests play (Section 5 defines their projection into the family's Authority Set), and every request is signed with the client instance's key, so the proposal is cryptographically attributable. Asynchronous approval is the pending grant state with continuation under the server's declared wait interval, the surface the OAuth binding reaches through the Mission Deferred Approval companion ([I-D.draft-mcguinness-oauth-mission-approval]) over an unratified substrate. And the resource server's contract with the Mission Issuer is standardized by [RFC9767] rather than assembled per deployment. The family has already met this shape once: the Mission Authority Server's lifecycle surfaces follow a reference-plus-continuation pattern that its specification notes parallels GNAP's grant continuation ([I-D.draft-mcguinness-mission-authority-server]); here the parallel is the substrate itself.

This is the fifth binding of the Mission model: the issuance profile binds it to the OAuth Authorization Server, the Mission Authority Server to a standalone service beside an unchanged AS, the AAuth binding to the AAuth Person Server ([I-D.draft-mcguinness-mission-aauth]), the UMA binding to the UMA 2.0 authorization server ([I-D.draft-mcguinness-mission-uma]), and this document to the GNAP authorization server. Like the AAuth and UMA bindings, it provides issuance gating structurally: no access token exists without passing the authorization server. It is the second binding authored against the Mission Substrate Requirements contract ([I-D.draft-mcguinness-mission-substrate]); its Mission Substrate Statement (Section 10) is written to that document's conformance rules, and it is the first Statement written in the contract's supplied/not-supplied form with activation conditions.

1.1. Intent-First Operation

GNAP shares the OAuth binding's flow direction and strengthens it. The client instance's first move is the grant request itself, before any resource is touched, and no front-channel authorization request exists to bypass the push. The model's compile-once property therefore needs only one rule: the first grant request under a prospective Mission carries the whole task as a Mission Intent, and the authorization server derives and obtains approval for the full Authority Set (Section 4). The access tokens requested in that grant request, and in every later modification of it, locate drawdowns within the approved ceiling, not the Mission's extent: the shape the progressive companion names ([I-D.draft-mcguinness-oauth-mission-progressive]), run on GNAP's own negotiation surface (Section 9.3).

The tension GNAP adds is the inverse of UMA's. Where the UMA binding had to assemble intent-first behavior on an attempt-first substrate, GNAP's grant request is mutable by design: [RFC9635] lets a client modify a grant while it is approved or pending. The kernel requires the Approved Context to be immutable ([I-D.draft-mcguinness-mission-substrate]). This binding resolves the tension with one split: a modification within the approved Authority Set is a drawdown the authorization server may adjudicate by policy, and a modification beyond it is an expansion that MUST return to the Approver and, on approval, yields a successor Mission (Section 9.3). The grant is the negotiation surface; the Mission record, never the grant, is the approved value.

1.2. Applicability

This profile targets deployments that operate a GNAP authorization server implementing [RFC9635] and that route an agent's access through grant requests. The agent is the GNAP client instance; the accountable person is the resource owner. Resource servers participate through [RFC9767] introspection, or validate structured tokens directly, and need no Mission awareness beyond what those surfaces already return (Section 9). Both substrate documents are Proposed Standard RFCs, the only binding in the family whose entire substrate is IETF-ratified; Section 11 discusses what that dependency choice trades.

This document is an experimental sketch. It fixes the binding's shape and its Mission Substrate Statement; worked test vectors, a per-surface error taxonomy, and the discovery-field registrations noted in Section 15 are deferred to a later revision.

1.3. Conventions and Terminology

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.

All JSON and HTTP shown in this document is non-normative and illustrative; the member definitions in the surrounding text are authoritative.

This document uses Mission, Mission Intent, Mission Issuer, Authority Set, Approver, Subject, mission_id, the integrity anchors (intent_hash, authority_hash, and, where the Mission records an authority proposal, proposal_hash), the subset rule, the only-active rule, and the audit horizon as defined by [I-D.draft-mcguinness-oauth-mission], and Effective Authority Set as defined by [I-D.draft-mcguinness-oauth-mission-status]. It uses authorization server (AS), client instance, instance identifier, resource owner (RO), end user, grant request, grant endpoint, access rights, the grant states (processing, pending, approved, finalized), continuation, continuation access token, token management, interaction start modes and finish methods, key proofing methods, and the error codes as defined by [RFC9635], and RS-facing discovery, token introspection, and token formats as defined by [RFC9767]. It additionally uses:

Mission-Bound GNAP Authorization Server:

A GNAP authorization server conforming to this profile: it implements the Mission Issuer role behind its grant endpoint, continuation, token management, and interaction surfaces (Section 12).

Mission-Bound GNAP Client Instance:

A GNAP client instance that proposes structured intent on its first grant request under a prospective Mission and respects the Mission lifecycle (Section 12).

2. Mission Roles

Table 1
GNAP role Mission model role
Authorization server Mission Issuer: runs the assessment, holds the Mission record, gates every token issuance and rotation, serves Mission state
Client instance Agent: the Actor, identified by its instance identifier or a stable key-derived identifier; its requests are key-proved (Section 7)
Resource owner Candidate Approver, and authority source where the assessment consumes its standing authority
End user The interacting operator; no Mission role follows automatically
Resource server Resource Server: [RFC9767] participant or structured-token validator, no Mission awareness required

The Subject is not a wire role. It is the issuer-qualified principal on whose behalf the Mission runs, established by the authorization server under the issuance profile's authority-source rules and recorded with the Mission: often the resource owner, and in GNAP's cross-user flows (an operator working a client on a customer's behalf) it follows the authority source, not the operator. The grant request's user member is an unauthenticated hint and never establishes it (Section 6).

Two properties of this mapping are structural in GNAP rather than profile rules. First, the proposer is never the approver on the wire: the client instance can only request, and every grant of authority is decided at the authorization server. Second, the pending grant with continuation makes the human Approver's asynchronous decision native rather than a companion overlay (Section 6).

In the agent deployments this profile targets, one natural person commonly operates the client, owns the resources, and is the principal the Mission serves: operator, Approver, and Subject coincide, the OAuth binding's default geometry. The table's role assignments, not that coincidence, are normative.

3. Mission Flow

This section is informative. An agent holds the task "reconcile Q3 invoices at the finance service and file the summary at the document service" for Alice, whose resources at both services are governed by the authorization server at https://as.example.com/gnap.

  1. The agent posts a grant request to the grant endpoint, signed with its instance key: a mission_intent member carrying the whole task (Section 4), access token requests whose access arrays name both services (the authority proposal), and an interact member offering redirect start with a redirect finish.

  2. The authorization server validates the Intent as untrusted input, derives the full Authority Set, and returns a pending response: a continue object with a continuation access token bound to the agent's key, and interaction instructions for Alice.

  3. Alice authenticates at the authorization server's interaction surface, reviews the rendered task and derived Authority Set, and approves. The Mission record is created active, the anchors are committed, and Consent Evidence is recorded (Section 6).

  4. The interaction finish returns Alice's browser to the agent's callback with an interaction reference, integrity-bound by the finish hash. The agent continues the grant with interact_ref; the grant reaches approved, and the response carries the finance-service access token, the first drawdown of the approved ceiling, plus the Mission Reference in the mission response member (Section 9.1).

  5. Later the agent needs the document service. It modifies the grant with a request for that service's access. The requested rights are within the Authority Set, so the authorization server approves by policy without waking Alice and issues the second token: a drawdown, not a new approval (Section 9.3).

  6. Each resource server introspects tokens per [RFC9767], or validates the structured token's mission claim offline. Revoking the Mission at the authorization server finalizes the grant and takes effect at the next introspection everywhere: one Mission, compiled once, drawn down per service, killed in one place.

4. Mission Intent

The Mission Intent reaches the authorization server inside the grant request: a mission_intent top-level member, registered for the GNAP Grant Request Parameters registry (Section 15). This binding defines no new endpoint; the grant endpoint is the intake.

The mission_intent value is a Mission Intent Submission envelope as the issuance profile defines it, intent plus OPTIONAL evidence, under that profile's syntactic and Intent Submission Evidence rules (the envelope and the Intent are both closed at the top level, the authorization server MUST bound size, array lengths, evidence entry count, and evidence verification cost, presented evidence is dispatched by type and refused when unsupported or failing, and the submission is untrusted client input, never authority). The grant request's signature attributes the submission to the client instance's key; attribution confers no authority.

The access rights of the grant request's access token requests are this binding's authority proposal, replacing the issuance profile's PAR-only carriage rule. GNAP rights are not an OAuth authorization_details array: Section 5 defines the normative projection that resolves, normalizes, and aggregates them before the issuance profile's recording and hashing semantics apply (a proposal, never authority; the Intent itself carries no authority members).

A Mission-Bound GNAP Client Instance MUST carry the Mission Intent on the first grant request it makes under a prospective Mission, and the Intent MUST describe the whole task, not the slice the request's access rights name. The authorization server derives the Authority Set from the Intent, and from the authority proposal, bounded by the issuance profile's Mission Authority rules; the requested access locates the first drawdown, not the Mission's extent (Section 1.1). The mission_intent member is valid only on the grant request that opens the negotiation (Section 6.2). A grant request with no mission_intent and no Mission association is plain GNAP, outside this profile's scope.

The Subject arrives through GNAP's own channels: interaction at the authorization server, or subject assertions the server verifies. The authorization server MUST NOT take the Subject from the grant request's user member or from the Mission Intent, which are unauthenticated client input (Section 6).

The proposal is the shaping profile's Mission Intent proposal, and a deployment that shapes free-text instructions into structured Intents composes here unchanged ([I-D.draft-mcguinness-mission-shaping]).

5. Mission Authority Adapter

GNAP access rights are strings or type-defined objects whose semantics belong to each type, per [RFC9635]; a grant request may carry several labeled access token requests; and nothing makes two rights comparable because their members share names. The family's proposed_authority is specifically an array of authorization details objects. This section is the normative bridge between the two.

A Mission-Bound GNAP Authorization Server MUST project the grant request's access rights into the family representation as follows:

  1. Resolve. Every reference string resolves to the authorization-server-defined access-right object it names, pinned as an immutable, versioned value for the Mission's retention period. An unresolvable reference refuses intake.

  2. Type contract. For each access-right type the deployment supports, the authorization server defines: normalization to a canonical form, audience and location interpretation, conversion to an authorization details object, equality, and, where the type admits one, a subset relation in the type's value space. An unsupported type refuses intake; nothing is inferred from member-name coincidence.

  3. Aggregate. Rights are aggregated across all of the grant request's access token requests and deduplicated under type-defined equality. Token labels are issuance metadata, never authority.

  4. Record. The resulting canonical authorization details array is recorded as proposed_authority and hashed as proposal_hash under the issuance profile's rules. The raw GNAP request MAY be retained as transaction evidence; it is not the record field.

A type that defines equality but no subset relation is an exact-carry type: its rights enter the Authority Set and later comparisons only as exact values at their original audience, and a modification touching them classifies as exact drawdown or refusal, never as attenuation (Section 9.2, Section 9.3). The derived Authority Set remains bounded by the issuance profile's Mission Authority rules; the adapter governs the proposal input, not the derivation.

6. Mission Approval

GNAP's grant processing is this binding's approval surface. Where processing concludes that a new Mission is proposed, it executes the issuance profile's approval steps:

  1. Authenticate the Approver: the resource owner or other accountable principal at the authorization server's interaction surface, or establish the standing basis of an adopted companion profile (Section 6.1). When the Intent carries controls.acr, the authentication MUST be one the deployment's policy maps as satisfying the named class.

  2. Establish the Subject: the issuer-qualified principal on whose behalf the Mission runs, per the deployment's authority-source policy (Section 2), from interaction the authorization server itself conducted or from subject assertions it verified, never from the grant request's user member, the Mission Intent, or other unauthenticated client input.

  3. Derive the Authority Set from the Intent and the authority proposal (Section 4), and render it for consent on the interaction surface under the issuance profile's rendering rules (Section 13.3).

  4. Compute the integrity anchors with the authorization server's grant endpoint URI as the envelope iss (Section 7).

  5. Create the Mission record in the active state atomically with the approval decision. The grant request MUST NOT reach the approved state under the Mission before the record is active.

6.1. Approval Modes

Three native processing outcomes realize the approval event:

Interactive owner decision. The authorization server directs the resource owner through an interaction start mode (redirect, app, user_code, or user_code_uri), and the decision is made on the server's own surface. Where a finish method is used, the interaction hash of [RFC9635] binds the client's nonce, the server's nonce, the interaction reference, and the grant endpoint URI, and the client instance MUST verify it before continuing (Section 13.2).

Deferred decision. Where no finish method is used, or the owner decides on their own schedule, the grant rests in pending: the client instance polls the continuation URI under the server's declared wait interval, and the rotating continuation access token is the deferral handle (Section 13.1). This is the surface the OAuth binding needs the Mission Deferred Approval companion for ([I-D.draft-mcguinness-oauth-mission-approval]); here it is the substrate's ratified machinery, and that companion does not apply.

Standing basis. A policy is not the Approver. A grant the authorization server would approve without interaction creates a Mission only where an adopted profile supplies the complete approval_basis the issuance profile defines (type, consent principal, root commitment, activation, and activation actor), tracing the machine-speed activation to an accountable human consent; the family's Mission Templates profile is that shape. The GNAP policy identifier and version are activation context, never the Approver. Absent such a profile, noninteractive processing MUST NOT create a Mission: baseline Mission creation under this binding is interactive or deferred.

The negotiation loop is the clarification and narrowing surface: the owner or the authorization server may narrow the proposal across interaction rounds while the grant rests in pending, and a denial that leaves the grant continuable rides the error-with-continue response of [RFC9635]. That loop is most of the state machine the approval-revision companion defines, native to the substrate ([I-D.draft-mcguinness-oauth-mission-approval-revision]); where a deployment adopts that companion's semantics, the continuation URI is its revision handle.

Mission Consent Evidence composes unchanged, with the authorization server as the committing issuer ([I-D.draft-mcguinness-oauth-mission-consent-evidence]): the interaction surface is where the disclosure is rendered, and what was shown is what the evidence commits.

6.2. Proposal Revision

A grant under a prospective Mission is mutable until approval, and the ceremony must bind what was actually approved. The authorization server MUST maintain a proposal revision for the grant: every modification that changes what rendering depends on (the access token requests, the subject request, user assertions, or the interaction arrangement) increments it. Rendering, the approval decision, the interaction reference, Consent Evidence, and the anchors MUST all bind the same revision, and an interaction completion presented for a stale revision MUST NOT approve a later one: the authorization server refuses it (invalid_interaction) and re-renders. The anchors are computed over the revision actually approved.

The mission_intent member is valid only on the grant request that opens the negotiation; the authorization server MUST reject a modification that carries it (invalid_request). After activation, modification is adjudicated per Section 9.3, and the Approved Context is never revised behind the existing reference.

7. Mission Record

GNAP has no native artifact for what was approved; the grant request is mutable and the states carry no content. The Mission record supplies it. A Mission-Bound GNAP Authorization Server MUST create a Mission record, as the issuance profile's Mission Record section defines it, for every Mission it approves, with issuer its grant endpoint URI (the value [RFC9635] defines as the identifier of the AS) and client_id the client instance's instance identifier where the authorization server registers one, or a stable approval-time identifier it derives from the instance's key where none is registered. That value is the Actor identity; token presenter keys are credential bindings recorded separately (Section 13.4). expires_at is REQUIRED, in RFC 3339 [RFC3339] date-time form; when the proposal's Intent carries none, the authorization server MUST set one by policy.

Like the UMA binding and unlike the AAuth binding, this substrate carries no wire-native mission artifact to commit. The record is held at the authorization server, mission_id and issuer name the Mission, and consumers meet the reference in the mission grant response member, the token's mission claim, or the introspection response (Section 9). No substrate-native commitment exists beside the anchors, and nothing substitutes for them.

8. Mission Lifecycle

The Mission lifecycle is the issuance profile's state space, extended by the status profile where the deployment adopts it ([I-D.draft-mcguinness-oauth-mission-status]), with the only-active rule governing every authorization-server surface and unrecognized states fail-safe non-active.

Table 2
Family state GNAP surface
active continuation, token issuance, and rotation served; introspection reports tokens by their own status
completed grant finalized; continuation refused (invalid_continuation); rotation refused (invalid_rotation); introspection reports active: false
revoked grant finalized; continuation refused (invalid_continuation); rotation refused (invalid_rotation); introspection reports active: false
expired grant finalized; continuation refused (invalid_continuation); rotation refused (invalid_rotation); introspection reports active: false
suspended continuation defers: a continue object with wait and no new tokens; rotation refused (invalid_rotation); introspection reports active: false

The projection is fail-safe: every non-active state projects to a non-permitting native signal. The introspection projection is binary: a response for a token under a non-active Mission is active: false with every other member omitted, per [RFC9767], the mission member appears only in active responses (Section 9.1), and the lifecycle reason is obtained from the family state surfaces (Section 8.2). This binding adds to GNAP's model:

The grant and the Mission have distinct lifetimes. A Mission-Bound GNAP Authorization Server SHOULD keep the grant continuable (returning a continue object) while the Mission is active, so the negotiation surface tracks the Mission; a grant the server finalizes early ends negotiation but not governance of tokens already issued. Re-attaching a new grant request to an existing Mission is deferred work.

8.1. Issuance Gating

No access token exists without the authorization server, so issuance gating is structural, as it is at the AAuth Person Server and the UMA authorization server. On that precondition the authorization server MUST NOT issue an access token, honor a grant modification, or rotate a token's value or key under a Mission that is not active, and the active check MUST be atomic with the operation. One derivation is counted per successful GNAP operation that issues or rotates credentials under the Mission (an initial grant response, a continuation response, a modifying request's response, or a token rotation), regardless of the number of tokens the response carries; an operation that issues none counts zero. Where the Intent's controls.max_derivations is present, the authorization server MUST refuse the derivation that would exceed it, per the issuance profile's count-and-gate rule. An access token issued under a Mission MUST NOT expire later than the Mission's expires_at, so no credential outlives the Mission.

Where the deployment adopts Mission Containment ([I-D.draft-mcguinness-oauth-mission-containment]), the authorization server MUST intersect every issued token's access rights, including rights carried in a grant from before a contain transition, with the Mission's current Effective Authority Set ([I-D.draft-mcguinness-oauth-mission-status]) at every issuance and every modification. The intersection runs at access-right grain: the authorization server removes every right the Effective Authority Set no longer grants, and refuses the request (request_denied) when no right survives. Because rotation preserves a token's rights by definition in [RFC9635], the authorization server MUST refuse rotation (invalid_rotation) for a token whose rights are no longer within the Effective Authority Set; the client instance's recourse is a grant modification, which is adjudicated against the current set. Carriage of the containment profile's registered denial reason on GNAP's error object is deferred wire work (Section 11).

8.2. Mission State Surfaces

Per-use introspection is this binding's native state source for resource servers. A response for a token under an active Mission carries the mission member with its state (Section 9.1) and, under Containment, an access array filtered to the Effective Authority Set at access-right grain. [RFC9767] evaluates activity in the resource server's context: where the introspection request named minimum access rights and the filtered set no longer satisfies them, the token is inactive in that context and the response is active: false with every other member omitted. Where no minimum was named, an otherwise valid token reports active: true with the filtered, possibly empty, access array: the resource server then holds no disclosed authority to permit. mission.state continues to report active because containment narrows authority without changing Mission state. The staleness bound is the introspection caching the deployment permits, which the deployment MUST state; with caching disabled the bound is effectively zero.

A deployment whose tokens are structured formats validated without introspection loses that source, and MUST either cap token lifetime at its declared staleness bound (lifetime-bounded reliance) or serve an active state surface. A Mission-Bound GNAP Authorization Server SHOULD serve the Mission Status operation of [I-D.draft-mcguinness-oauth-mission-status], with its signed responses, authentication, anti-oracle property, and caching rules, and MAY emit Mission Lifecycle Signals ([I-D.draft-mcguinness-oauth-mission-signals]) as the transmitting Mission Issuer. A deployment claiming runtime enforcement of the high-consequence classes MUST provide an active freshness source with a published staleness bound ([I-D.draft-mcguinness-mission-runtime]); per-use introspection with a stated cache bound satisfies it, and token lifetime alone does not.

An authorization server that serves these surfaces advertises the corresponding members (mission_status_endpoint, mission_status_signing_alg_values_supported, mission_lifecycle_endpoint, mission_event_stream_endpoint, mission_max_stale_seconds) in its discovery responses: the client-facing OPTIONS discovery of [RFC9635] and the RS-facing discovery document of [RFC9767], with the semantics those family profiles define. GNAP defines no client-facing key publication surface, so the verification keys for signed family artifacts are distributed by deployment configuration or an RS-facing discovery extension; registration of these discovery fields is deferred work (Section 15).

9. Mission-Bound Credential

The GNAP access token is this binding's Mission-bound credential. It is bound to the client instance's key by default under [RFC9635]; a deployment that sets the bearer flag on a Mission-bound token weakens the holder guarantee and MUST declare that mode in its Mission Deployment Profile.

9.1. The Mission Claim

An access token issued under a Mission names it through the mission object: the family members id, issuer, and authority_hash as the issuance profile defines them, and it SHOULD carry the record's expires_at, a bounding commitment with no liveness that the token's own expiry already sits inside (Section 8.1). The object is delivered on three carriage surfaces:

  • Token-carried: a deployment issuing structured tokens (for example the jwt-signed format of [RFC9767]) carries the issuance profile's registered mission JWT claim in the token.

  • Introspection-carried: a deployment issuing opaque tokens carries the same object, with the state member per the issuance profile's introspection section, in a mission member of the [RFC9767] introspection response, beside access, on active responses only (Section 8, Section 15).

  • Grant-response-carried: the grant response carries a mission member (Section 15) giving the client instance the Mission Reference, expires_at, and current state. This surface informs the Actor; it is correlation for the client, never proof for a resource server.

A token-carried claim verifies offline under keys the deployment distributes; an introspection-carried claim is asserted by the authorization server over the mutually authenticated introspection exchange at each use. In both, the Mission reference arrives through token validation itself, so the runtime profile's binding establishment composes credential-carried with no join (Section 10). A consumer MUST NOT use any mission member to grant or widen authority, per the issuance profile.

9.2. Authority Subset and Grain

The access rights a token carries MUST be a subset of the Mission's Authority Set under the issuance profile's subset rule, evaluated through the authority adapter (Section 5): each right maps to its type's canonical authorization-detail form and is compared in the type's declared value space. Unknown types, unresolved references, or incomparable members fail closed at the decision point that requires their semantics, and an exact-carry type is satisfied only by the exact right at its original audience. Where the deployment adopts Mission Containment, Section 8.1 states the set a token is gated against at issuance and modification.

The grain is finer than UMA's resource-and-scopes projection: a type-qualified rights object can carry parameter bounds the family's Authority Set expresses, where its type defines them. What it still cannot carry is cumulative consumption: the metering companion's budgets ([I-D.draft-mcguinness-mission-metering]) and cross-action constraints bind at the runtime layer, where the PDP evaluates each consequential action against the full Authority Set ([I-D.draft-mcguinness-mission-runtime], [I-D.draft-mcguinness-mission-authzen]); the substrate swap leaves that layer untouched (Section 11).

9.3. Drawdown and Modification

The approved Authority Set is a pre-consented ceiling, and each token issuance is a drawdown within it: the model the progressive companion defines for the OAuth binding ([I-D.draft-mcguinness-oauth-mission-progressive]), run natively on GNAP's grant modification. When the client instance modifies the grant with requested rights within the Authority Set, the authorization server MAY approve by policy without waking the Approver: that adjudication is a drawdown, not a new approval, and the anchors do not change. Modification never alters previously issued tokens, per [RFC9635]; each newly issued token is a fresh derivation gated per Section 8.1.

A requested right outside the Authority Set is an expansion, not a drawdown. The authorization server MUST NOT widen by policy: it routes the modification to the Approver through interaction or the pending deferral, and an approval creates a successor Mission under the expansion companion's semantics ([I-D.draft-mcguinness-oauth-mission-expansion]), atomically associating the grant with the successor. The predecessor record and its anchors are never rewritten, and previously issued tokens retain the predecessor's Mission reference. The wire needs nothing new: widening is another negotiation round the owner must decide.

9.4. Mission Continuity: the Continuation Access Token

The continuation access token is GNAP's continuity artifact: it is bound to the client instance's key, rotated by the authorization server across continuation responses, and usable only to continue, modify, or revoke the grant. It grants no resource access, and this binding keeps it that way: the authorization server MUST NOT accept a continuation or token management access token for resource access or as evidence of Mission authority. That is the family's session-continuity discipline (continuity is never authority, as the harness profile enforces for agent sessions ([I-D.draft-mcguinness-mission-harness])), pre-enforced by the substrate's own design. The continuation URI and its token are the Mission's negotiation handle: a later drawdown or completion proposal rides them without the client re-pushing the Intent.

Continuity is never authority. Continuation possession MUST NOT substitute for Mission state, for the subset check, or for any approval; a continuation request under a non-active Mission yields the non-permitting outcome of Section 8, and holding the continuation never widens what assessment would grant without it.

9.5. Worked Example

The introspection response for the finance-service token of Section 3, while the Mission is active:

{
  "active": true,
  "iss": "https://as.example.com/gnap",
  "access": [
    {
      "type": "finance-ledger",
      "actions": ["read", "post-adjustments"],
      "locations": ["https://finance.example.com/q3"]
    }
  ],
  "key": {
    "proof": "httpsig",
    "jwk": {
      "kty": "OKP",
      "crv": "Ed25519",
      "x": "JrQLj5P_89iXES9-vFgrIy29clF9CC_oPPsw3c5D0bs"
    }
  },
  "exp": 1793610000,
  "mission": {
    "id": "msn_9Fk2WqLp0Vd5Jh8xTc4nB7r1",
    "issuer": "https://as.example.com/gnap",
    "authority_hash":
      "sha-256:x8FvWqLp0Vd5Jh2mTc4nB7r1KdYzQw6aA3f5EMkRb60",
    "expires_at": "2026-12-31T23:59:59Z",
    "state": "active"
  }
}

The active, iss, access, and key members are [RFC9767]'s, unchanged; the mission member is this binding's introspection carriage of the issuance profile's object (Section 9.1). The access array is the projection of the Mission's Authority Set entries for this token; a consumption budget on post-adjustments does not appear, because it binds at the runtime layer (Section 9.2).

10. Mission Substrate Statement

This section is this binding's Mission Substrate Statement ([I-D.draft-mcguinness-mission-substrate]). It applies to this revision of the binding in token-carried, introspection-carried, and mixed credential modes.

The contextual-governance kernel maps as follows:

  1. Mission Reference: the tuple (issuer, mission_id) names one record. issuer is the grant endpoint URI, the identifier of the AS under [RFC9635]; mission_id follows the issuance profile's uniqueness, retention, comparison, non-reassignment, and entropy rules (Section 7).

  2. Controller: the GNAP authorization server controls approval, state, assessment, and token issuance. Relying components establish it from the configured trust in its grant endpoint URI; resource servers locate its introspection surface through RS-facing discovery ([RFC9767]), and verification keys for signed family artifacts are deployment-distributed (Section 8.2).

  3. Actor binding: the Actor is the client instance, identified by its instance identifier where the authorization server registers one, otherwise by a stable approval-time identifier the Controller derives from the instance's key. Instance requests are proved by the key proofing method on every signed request; at approval the Controller binds the instance that signed the negotiation-opening request. Access-token presenter keys are credential bindings recorded separately: token key rotation is a credential event, never Actor succession, and client-instance identity migration is outside [RFC9635], requiring a deployment-authenticated rule or a fresh approval. Delegation is not defined by this binding (Section 2, Section 7, Section 13.4).

  4. Approved Context: the immutable Mission Intent, the recorded authority proposal (the adapter's canonical array, Section 5), and the derived Authority Set in the Mission record are the Approved Context. The family intent_hash, authority_hash, and proposal_hash commit them under the issuance profile's canonicalization; they are this binding's chosen mechanism, not a substrate-kernel requirement. The mutable grant request is never the approved value, and modification never revises the record behind its reference: approved widening yields a successor Mission (Section 1.1, Section 7, Section 9.3).

  5. Approval ceremony: grant processing performs the five approval steps in the interactive or deferred mode, or under a companion-supplied standing basis, binding one proposal revision, and creates the record active atomically with approval; the grant does not reach approved before the record does (Section 6, Section 6.2).

  6. Governance gate: only the issuance profile's active state is active. Every other or unrecognized value fails closed at continuation, issuance, rotation, and the introspection projection. The Subject, Approver, and administrator have an authenticated revocation path (Section 8, Section 8.1).

  7. Reliance bound: issuance, modification, and rotation establish active at the authorization server. An opaque token is bounded by authenticated per-use introspection; a structured token without a state check remains usable only for its bounded lifetime, capped at the Mission's expires_at, after a transition (Section 8.1, Section 8.2).

  8. Context propagation: the protected mission claim in a structured token proves issuance under the Mission and verifies offline; the mission member of the introspection response (on active responses only) is the Controller's authenticated per-use assertion of the same fact and current state; the mission grant response member is correlation for the client instance only. The continuation access token carries continuity and never establishes Mission governance or authority (Section 9.1, Section 9.4).

  9. Governance record: the assessment log is the ordered governance record. The authorization server MUST append approval, positive and negative Mission-dependent decisions (issuance, modification, rotation, introspection projections it relies on), and lifecycle transitions in per-Mission append order; MUST protect the log under the same integrity and access controls as the Mission record; and MUST retain both for the deployment-declared audit horizon.

The binding declares these capabilities:

Table 3: GNAP Mission substrate capabilities
Capability Claim Activation Scope and defining sections Limitations
Lifecycle-Gated Authorization supplied always Token issuance, grant modification, and token rotation at the AS (Section 8.1) A structured token without a state check remains usable only for its bounded lifetime
State-Observable supplied [RFC9767] introspection deployed, or Mission Status active Resource servers via per-use introspection with a declared cache bound; any authorized consumer via Mission Status (Section 8.2) Token lifetime alone is not observation
Structured Authority supplied always Access rights admitted through the authority adapter; the AS owns each supported type's semantics; comparison in the type's declared value space (Section 5, Section 9.2) Unsupported types refuse at intake; exact-carry types compare by equality only; consumption bounds bind at the runtime layer
Monotonic Derivation supplied always The no-broader-than relation of adapter-supported types at issuance, modification adjudication, and rotation refusal (Section 9.2, Section 9.3, Section 8.1) Exact-carry types classify exact matches or refuse; covers this issuer's boundary
Credential-Bound supplied always Key-bound token with a protected mission claim, or the authenticated introspection assertion; fact semantics: lifecycle-gated issuance (Section 9.1) Introspection carriage is an online issuer assertion; a bearer-flagged token weakens holder proof
Authorized Context Correlation not supplied -- -- The Controller binds Mission, Actor, Subject, and tokens natively; no cross-authority join is defined
Independently Verifiable supplied structured token format issued, or signed Mission Status active Offline verification of issuance-under-Mission and of state as of a signed observation (Section 9.1, Section 8.2) Key distribution is deployment-configured; GNAP publishes no client-facing key surface
Portable Evidence supplied Consent Evidence, Mission Mandate, or Audit Transparency active The adopted profile's artifact and verification procedure The base assessment log is Controller-local

Each supplied row's temporal elements inherit the reliance floor of Section 8.1 unless stated: freshness at use is established at the gated operation or at introspection, artifact lifetime is the token's expiry capped by the Mission's expires_at, and the residual interval after the Mission becomes non-active is the remaining lifetime of structured tokens or the declared introspection cache bound. Failure behavior is uniformly fail-closed: absent, stale, unknown, incomparable, invalid, or unavailable input refuses the gated operation. The Portable Evidence row is supplied only while its activation profile ([I-D.draft-mcguinness-oauth-mission-consent-evidence], [I-D.draft-mcguinness-mission-mandate], [I-D.draft-mcguinness-mission-audit]) is adopted; the referenced profile defines the portable artifact and verification procedure.

The composition consequences:

11. Limitations

Deployed base. Both substrate documents are Proposed Standard RFCs, so this binding is the family's only one whose entire substrate is IETF-ratified. What GNAP lacks is deployed breadth. The issuance profile's Relationship to GNAP states the composition posture this document inherits: the family composes with deployed grant protocols rather than requiring new ones, so this binding governs estates that already run GNAP; it does not create them, and a deployment without a GNAP substrate has no reason to adopt one for the Mission's sake, since the OAuth binding exists.

Mutability discipline. The grant request is mutable by design, and this binding's drawdown/expansion split (Section 9.3) is the load-bearing rule that keeps the Approved Context immutable behind it. An implementation that lets policy adjudication of a modification widen authority, or that treats the negotiated grant as the approved value, has silently replaced the approval; the Mission record and its anchors, never the grant, are what was approved.

Deferred wire work. Beyond test vectors and the error taxonomy, this sketch defers: carriage of the containment profile's denial reason on GNAP's error object; registration of the family discovery members for both GNAP discovery surfaces; re-attaching a new grant request to an existing Mission after finalization; client-instance identity migration; GNAP-native Child Missions; and the attenuable-token-format composition (Section 10).

12. Conformance

An implementation conforms in one of two roles. Resource servers participate through unmodified [RFC9767] or structured-token validation and have no role to claim.

A Mission-Bound GNAP Authorization Server:

A Mission-Bound GNAP Client Instance:

13. Security Considerations

13.1. The Continuation Token as Deferral Handle

Between the pending response and the owner's decision, the continuation access token is the artifact binding the client instance to the pending approval: the role the deferral code plays in the Mission Deferred Approval companion and the rotating ticket plays in the UMA binding. GNAP's protections (the token is bound to the client instance's key, presented only over signed requests, and rotated across continuation responses) are load-bearing for the approval's integrity, and an authorization server MUST maintain them across the negotiation. A continuation accepted without key proof would let a stale or hijacked exchange complete against a decision the owner made about a different pending state.

13.2. Interaction Finish Integrity

Where a finish method is used, the interaction hash binds the client's nonce, the server's nonce, the interaction reference, and the grant endpoint URI. The client instance MUST verify it before presenting interact_ref, and the authorization server MUST reject a reference that fails its own integrity checks, per [RFC9635]. For this binding the hash is not an optimization: it is what prevents an attacker from splicing a victim's approval onto the attacker's grant, the approval-substitution attack the family's security model names ([I-D.draft-mcguinness-mission-security-model]).

13.3. Rendering the Proposal

The Mission Intent, its goal text, and every justification are attacker-influenceable input rendered on the interaction surface. The issuance profile's rendering rules apply unchanged: render client text inert and sanitized, mitigate direction-override and confusable-character presentation, and keep the derived Authority Set visually distinct from client-supplied narrative, so crafted text cannot pass as derived authority.

13.4. Token Keys and Actor Identity

The Actor is the client instance (Section 2); an access token's key is a credential binding, and the two must not be conflated: GNAP tokens can be bound to a different key than the instance's, to an AS-provided key, or carry the bearer flag. [RFC9635] permits rotating a token's key only under dual proof of the old and new keys, and defines no modification of client-instance keys. A Mission-Bound GNAP Authorization Server MUST record an accepted token key rotation in the governance record as a credential event, MUST NOT treat it as Actor succession or rewrite the Mission's Actor binding, and refuses a rotation it cannot attribute to the bound Actor (key_rotation_not_supported). Client-instance identity migration is outside [RFC9635]: a deployment defines an authenticated migration rule or requires a fresh approval; silent key succession would let a compromised instance walk the Mission to an attacker-held key.

13.5. Authorization Server Compromise

A compromised authorization server is a compromised Mission Issuer: forged approvals, arbitrary tokens, false state ([I-D.draft-mcguinness-mission-security-model]). GNAP concentrates approval, issuance, introspection, and the interaction surface in one service, so the security model's concentration analysis for the OAuth binding applies in full. Consent evidence and audit transparency make forgery detectable after the fact; they do not prevent it.

13.6. Introspection as the State Channel

Where opaque tokens make introspection the Mission and state channel, the exchange's mutual authentication (the resource server signs with its own key and the response is the issuer's assertion) and its caching policy carry this binding's freshness claims. A resource server that caches introspection responses beyond the deployment's declared staleness bound turns fail-closed rules fail-open in effect; a deployment MUST size cache bounds to what its Mission Deployment Profile claims. Structured tokens move the same weight onto token lifetime (Section 8.2).

14. Privacy Considerations

The task concentrates at the authorization server. The whole-task Intent rule sends the full task description to the authorization server in the first grant request, earlier and more completely than per-service negotiation would. That is deliberate, and it is the concentration the issuance profile's record already implies; the shaping profile's minimization guidance applies to what the Intent says.

Resource servers see little. Introspection returns a resource server only the token's access rights and the mission members; the Intent, the constraints, and the rest of the Authority Set stay at the authorization server, and [RFC9767] already prohibits echoing the token value. Subject information is released only in the formats and identifiers requested and authorized, per [RFC9635].

mission_id is a correlation handle. The mission members correlate one Mission's activity across resource servers and across tokens, the issuance profile's deliberate stable-anchor property; that profile's guidance applies. The mission grant response member adds correlation at the client instance only, and nothing new crosses to resource servers.

15. IANA Considerations

This document registers two GNAP extension members and one introspection response member; the behavior fixed here is the registration content.

GNAP Grant Request Parameters registry ([RFC9635]):

GNAP Grant Response Parameters registry ([RFC9635]):

Token introspection response registry ([RFC9767]):

The family discovery members of Section 8.2 remain to be registered in the GNAP Authorization Server Discovery Fields registry of [RFC9635] and the RS-facing discovery registry of [RFC9767] in a later revision (Section 11). The mission JWT claim is registered by the issuance profile.

16. References

16.1. Normative References

[I-D.draft-mcguinness-mission-substrate]
McGuinness, K., "Mission Substrate Requirements", , <https://mcguinness.github.io/mission-bound-authorization/draft-mcguinness-mission-substrate.html>.
[I-D.draft-mcguinness-oauth-mission]
McGuinness, K., "Mission-Bound Authorization for OAuth 2.0", , <https://mcguinness.github.io/mission-bound-authorization/draft-mcguinness-oauth-mission.html>.
[I-D.draft-mcguinness-oauth-mission-containment]
McGuinness, K., "Mission Containment for OAuth 2.0", , <https://mcguinness.github.io/mission-bound-authorization/draft-mcguinness-oauth-mission-containment.html>.
[I-D.draft-mcguinness-oauth-mission-expansion]
McGuinness, K., "Mission Expansion for OAuth 2.0", , <https://mcguinness.github.io/mission-bound-authorization/draft-mcguinness-oauth-mission-expansion.html>.
[I-D.draft-mcguinness-oauth-mission-status]
McGuinness, K., "Mission Status and Lifecycle for OAuth 2.0", , <https://mcguinness.github.io/mission-bound-authorization/draft-mcguinness-oauth-mission-status.html>.
[RFC2119]
Bradner, S., "Key words for use in RFCs to Indicate Requirement Levels", BCP 14, RFC 2119, DOI 10.17487/RFC2119, , <https://www.rfc-editor.org/rfc/rfc2119>.
[RFC3339]
Klyne, G. and C. Newman, "Date and Time on the Internet: Timestamps", RFC 3339, DOI 10.17487/RFC3339, , <https://www.rfc-editor.org/rfc/rfc3339>.
[RFC8174]
Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174, , <https://www.rfc-editor.org/rfc/rfc8174>.
[RFC9635]
Richer, J., Ed. and F. Imbault, "Grant Negotiation and Authorization Protocol (GNAP)", RFC 9635, DOI 10.17487/RFC9635, , <https://www.rfc-editor.org/rfc/rfc9635>.
[RFC9767]
Richer, J., Ed. and F. Imbault, "Grant Negotiation and Authorization Protocol Resource Server Connections", RFC 9767, DOI 10.17487/RFC9767, , <https://www.rfc-editor.org/rfc/rfc9767>.

16.2. Informative References

[I-D.draft-mcguinness-mission-aauth]
McGuinness, K., "Mission Context Binding for AAuth", , <https://mcguinness.github.io/mission-bound-authorization/draft-mcguinness-mission-aauth.html>.
[I-D.draft-mcguinness-mission-architecture]
McGuinness, K., "An Architecture for Mission-Bound Authorization", , <https://mcguinness.github.io/mission-bound-authorization/draft-mcguinness-mission-architecture.html>.
[I-D.draft-mcguinness-mission-audit]
McGuinness, K., "Mission Audit Transparency", , <https://mcguinness.github.io/mission-bound-authorization/draft-mcguinness-mission-audit.html>.
[I-D.draft-mcguinness-mission-authority-server]
McGuinness, K., "Mission Authority Server", , <https://mcguinness.github.io/mission-bound-authorization/draft-mcguinness-mission-authority-server.html>.
[I-D.draft-mcguinness-mission-authzen]
McGuinness, K., "Mission-Bound Runtime Enforcement: AuthZEN Profile", , <https://mcguinness.github.io/mission-bound-authorization/draft-mcguinness-mission-authzen.html>.
[I-D.draft-mcguinness-mission-harness]
McGuinness, K., "Mission-Aware Agent Harnesses", , <https://mcguinness.github.io/mission-bound-authorization/draft-mcguinness-mission-harness.html>.
[I-D.draft-mcguinness-mission-mandate]
McGuinness, K., "Mission Mandate", , <https://mcguinness.github.io/mission-bound-authorization/draft-mcguinness-mission-mandate.html>.
[I-D.draft-mcguinness-mission-metering]
McGuinness, K., "Mission Consumption Metering", , <https://mcguinness.github.io/mission-bound-authorization/draft-mcguinness-mission-metering.html>.
[I-D.draft-mcguinness-mission-runtime]
McGuinness, K., "Mission-Bound Runtime Enforcement", , <https://mcguinness.github.io/mission-bound-authorization/draft-mcguinness-mission-runtime.html>.
[I-D.draft-mcguinness-mission-security-model]
McGuinness, K., "Mission Security Model", , <https://mcguinness.github.io/mission-bound-authorization/draft-mcguinness-mission-security-model.html>.
[I-D.draft-mcguinness-mission-shaping]
McGuinness, K., "Mission Intent Shaping", , <https://mcguinness.github.io/mission-bound-authorization/draft-mcguinness-mission-shaping.html>.
[I-D.draft-mcguinness-mission-uma]
McGuinness, K., "Mission-Bound Authorization for UMA 2.0", , <https://mcguinness.github.io/mission-bound-authorization/draft-mcguinness-mission-uma.html>.
[I-D.draft-mcguinness-oauth-mission-approval]
McGuinness, K., "Mission Deferred Approval for OAuth 2.0", , <https://mcguinness.github.io/mission-bound-authorization/draft-mcguinness-oauth-mission-approval.html>.
[I-D.draft-mcguinness-oauth-mission-approval-revision]
McGuinness, K., "Mission Approval Revision for OAuth 2.0", , <https://mcguinness.github.io/mission-bound-authorization/draft-mcguinness-oauth-mission-approval-revision.html>.
[I-D.draft-mcguinness-oauth-mission-attenuation]
McGuinness, K., "Mission Offline Attenuation for OAuth 2.0", , <https://mcguinness.github.io/mission-bound-authorization/draft-mcguinness-oauth-mission-attenuation.html>.
[I-D.draft-mcguinness-oauth-mission-child-delegation]
McGuinness, K., "Mission Child Delegation for OAuth 2.0", , <https://mcguinness.github.io/mission-bound-authorization/draft-mcguinness-oauth-mission-child-delegation.html>.
McGuinness, K., "Mission Consent Evidence for OAuth 2.0", , <https://mcguinness.github.io/mission-bound-authorization/draft-mcguinness-oauth-mission-consent-evidence.html>.
[I-D.draft-mcguinness-oauth-mission-cross-domain]
McGuinness, K., "Mission Cross-Domain Projection for OAuth 2.0", , <https://mcguinness.github.io/mission-bound-authorization/draft-mcguinness-oauth-mission-cross-domain.html>.
[I-D.draft-mcguinness-oauth-mission-progressive]
McGuinness, K., "Mission Progressive Authorization for OAuth 2.0", , <https://mcguinness.github.io/mission-bound-authorization/draft-mcguinness-oauth-mission-progressive.html>.
[I-D.draft-mcguinness-oauth-mission-signals]
McGuinness, K., "Mission Lifecycle Signals for OAuth 2.0", , <https://mcguinness.github.io/mission-bound-authorization/draft-mcguinness-oauth-mission-signals.html>.

Acknowledgments

This document is part of the Mission-Bound Authorization work. It binds the Mission model to the GNAP authorization server, and builds on the Mission Substrate Requirements, Mission Status and Lifecycle, and Mission-Bound Runtime Enforcement companions. GNAP's continuable grant, key-bound client instances, native pending state, and structured access rights anticipated the geometry agents now present; this binding supplies the governed object those mechanics were built to negotiate.

Author's Address

Karl McGuinness
Independent