Internet-Draft OAuth Mission Consent Evidence August 2026
McGuinness Expires 22 February 2027 [Page]
Workgroup:
Web Authorization Protocol
Internet-Draft:
draft-mcguinness-oauth-mission-consent-evidence-latest
Published:
Intended Status:
Standards Track
Expires:
Author:
K. McGuinness
Independent

Mission Consent Evidence for OAuth 2.0

Abstract

Mission-Bound Authorization for OAuth 2.0 commits the approved Mission Intent and Authority Set, but does not commit the exact consent disclosure shown to the Approver. This document defines an optional Consent Evidence profile. It specifies a structured consent disclosure object, a consent_rendering_hash integrity anchor, and a signed Consent Evidence object that records the structured disclosure the Authorization Server rendered or committed to rendering, which Approver it recorded as deciding, which Mission authority the disclosure corresponded to, and which notices or material risks it carried. Evidence is recorded for approved, declined, and narrowed (revision-required) decisions, so declines and narrowing negotiations are visible to audit, not only approvals. A rendering-assurance ladder lets a deployment raise assurance by degrees, from a recorded disclosure through deterministic re-rendering and attested rendering to a confirmation signed by the Approver's authenticator over the disclosure commitment. The profile lets an auditor reconstruct the recorded approval surface without making the disclosure itself an authority grant.

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

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 22 February 2027.

Table of Contents

1. Introduction

Mission-Bound Authorization for OAuth 2.0 [I-D.draft-mcguinness-oauth-mission] (the "issuance profile") binds a Mission to an approval event and commits two objects: the approved Mission Intent and the approved Authority Set. It deliberately notes a remaining gap: the exact consent disclosure rendered to the Approver is not itself committed.

This document narrows that gap. It defines a structured consent disclosure object and a Consent Evidence object. The disclosure object is what the Authorization Server renders or commits to rendering. The evidence object records the approval event, the rendering context, the Mission anchors, and an integrity envelope over the evidence.

This profile commits the structured disclosure that the Authorization Server says it rendered, and binds it to the same Mission anchors used for authority. What no server-side commitment can prove, that the pixels presented to the Approver matched the committed object, is the what-you-see-is-what-you-sign problem this profile names and bounds in Section 6. What this profile provides is a durable, integrity-protected record that ties a specific structured disclosure to a specific approval decision and Authority Set, so that divergence between the recorded disclosure and the enforced authority becomes detectable in audit.

How much a deployment can narrow the rendering gap is not all-or-nothing. This profile defines a ladder of rendering assurance (Section 6) whose rungs move the trust from an unbounded, unverifiable rendering layer toward the Approver's own authenticator signing the exact disclosure commitment, letting the deployment pick the assurance its threat model needs.

Conformance to this profile is the ladder's floor, Rung 0 (Section 6), plus the floor duties this profile attaches to it:

What conformance requires is that what was shown is committed and reconstructible; everything past that is a rung or a SHOULD, the broader material-notice discipline and delta rendering as recommendations and each rung above Rung 0 as a named optional claim (Section 10).

Consent Evidence does not grant authority. Authority remains the approved Mission and its Authority Set under [I-D.draft-mcguinness-oauth-mission]. Consent Evidence lets auditors verify that the recorded approval surface corresponded to the authority later enforced.

2. Scope

This document defines:

This document does not define user-interface layout, a legal consent standard, or any new OAuth grant. The translation floor constrains what a rendering expresses, not how it is laid out. It does not change the Authority Set or Mission lifecycle. Under the standalone Mission Authority Server binding ([I-D.draft-mcguinness-mission-authority-server]), the Mission Authority Server is the committing Mission Issuer and this profile composes with it unchanged; under its own binding, the AAuth Person Server is likewise the committing Mission Issuer ([I-D.draft-mcguinness-mission-aauth]).

2.1. Evidence Model

This profile separates three artifacts:

  1. the Mission Intent and Authority Set, which define what is being approved under [I-D.draft-mcguinness-oauth-mission];

  2. the Consent Disclosure object, which defines in structured form what the Authorization Server rendered or committed to rendering for the Approver; and

  3. the Consent Evidence object, which records the approval or decline event and integrity-protects the disclosure commitment.

Only the approved Mission grants authority. The disclosure and evidence objects prove the approval surface and are audit artifacts.

This profile renders and records the approved semantic Intent, never the inbound Mission Intent Submission envelope: raw Intent Submission Evidence artifacts presented at admission ([I-D.draft-mcguinness-oauth-mission]) are not embedded in the disclosure or the Consent Evidence object, and the verified facts they yield land on the Mission record's submission_evidence. Material verified provenance is nonetheless part of the approval surface: the disclosure commits it through submission_provenance_hash (Section 4), covered by consent_rendering_hash, so the recorded rendering proves which provenance supported the decision.

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.

This document uses JSON [RFC8259] for the disclosure and evidence objects. JCS [RFC8785] is used when computing consent_rendering_hash.

The terms Mission, Mission Intent, Authority Set, Mission Issuer, Approver, and approval event are used as defined in [I-D.draft-mcguinness-oauth-mission].

Consent Disclosure:

A structured object describing the approval surface rendered to the Approver.

Consent Evidence:

A durable, integrity-protected record of the consent disclosure and approval event.

6. Rendering Assurance

The commitment of Section 5 records what disclosure the Authorization Server says it rendered; it cannot by itself prove what a human perceived. This is the what-you-see-is-what-you-sign problem. This profile does not close it with a server-side commitment, which is impossible, but defines a ladder a deployment climbs as far as its threat model requires. Each rung shrinks the trusted rendering base; to claim a rung a deployment satisfies it and records the corresponding evidence. The rungs are cumulative: claiming a rung requires satisfying the rungs below it, so a Rung 3 confirmation is over a disclosure that is also deterministically renderable (Rung 1) and an auditor can re-render exactly what the confirmation signed.

Rung 0, Recorded disclosure:

The baseline of Section 5: the structured disclosure is committed and bound to the Mission anchors. Proves the AS recorded this disclosure for this authority; proves nothing about what was shown.

Rung 0 is the conforming floor of this profile (Section 10). Every rung above it is optional and defined in Appendix A, so the ladder above the floor is one block a deployment opts into: deterministic template rendering (Rung 1), an attested renderer (Rung 2), the Approver's own authenticator (Rung 3), and out-of-band execution-time confirmation (Rung 4). Each rung above Rung 0 is a named optional claim, and Rungs 2 through 4 are additionally experimental, each importing a trust infrastructure (platform or TEE attestation; transaction-confirming authenticators) this profile cannot supply.

No rung proves the Approver perceived or understood the disclosure; a compromised authenticator or trusted execution environment, or an Approver who confirms without reading, remains outside reach, as for any electronic-signature scheme. What the ladder provides is a verifiable, bounded reduction of the rendering trust base.

8. Binding to Mission Approval

At an approval event, a Consent-Evidence-capable Mission Issuer MUST:

  1. derive the Authority Set and compute intent_hash, authority_hash, and, where an authority proposal was submitted, proposal_hash under [I-D.draft-mcguinness-oauth-mission];

  2. construct the Consent Disclosure object from that exact Authority Set and Mission Intent;

  3. compute consent_rendering_hash;

  4. render the disclosure to the Approver;

  5. record Consent Evidence for the decision (approved, declined, or narrowed); and

  6. when approved, bind the Mission record to the consent_rendering_hash.

For expansion approvals, the disclosure requirements of Section 8.3 apply.

8.1. Declined Approval Events

Declined approval events are security-relevant. A deployment claiming this profile MUST record Consent Evidence when an Approver declines a Mission or expansion request. The evidence MAY omit sensitive free-form decline text. It MUST record the disclosure commitment, decision, Approver, time, and policy version when known.

Declined evidence MUST NOT create a Mission, Mission claim, token, or authority. It exists to prevent silent retry, coercion, and rendering confusion from being invisible to audit.

8.2. Revision-Required Events

A revision-required outcome, in which the review can approve only a narrowed version and invites a narrowing revision under the experimental approval-revision profile ([I-D.draft-mcguinness-oauth-mission-approval-revision]), is recorded as Consent Evidence with decision of narrowed. The evidence carries the reviewed disclosure's consent_rendering_hash and the refused_dimensions the review named.

Like a decline, narrowed evidence MUST NOT create a Mission, Mission claim, token, or authority: no Mission exists until an approval commits one.

When the revision chain resolves to an approval, the final approved evidence MAY carry predecessor_intent_hashes committing the chain of reviewed proposals that preceded it.

8.3. Expansion and Delta Disclosure

When the approval event is for Mission Expansion, the Consent Disclosure object MUST identify the predecessor Mission and SHOULD distinguish:

  • authority retained from the predecessor;

  • authority newly added;

  • authority removed or narrowed;

  • changes to Mission expiry; and

  • changes to delegation or child-Mission rights.

An expansion disclosure that renders only the final Authority Set without the delta fails to show the Approver what is being widened, which is what this recommendation exists to prevent; the disclosure it did render remains committed and reconstructible under the floor (Section 10).

9. Audit Reconstruction

A deployment claiming this profile MUST retain enough information for an authorized auditor to reconstruct:

Retention MUST last at least as long as the Mission's audit horizon, the term the issuance profile defines ([I-D.draft-mcguinness-oauth-mission]). Declined and narrowed events create no Mission (Section 8.1, Section 8.2) and so have no Mission audit horizon; a deployment MUST retain their evidence for a deployment-declared window.

Entries discharged under the status profile's completion machinery ([I-D.draft-mcguinness-oauth-mission-status]) disappear from status surfaces while authority_hash still commits them, so an auditor reconciling the recorded approval surface against later-enforced authority consults discharge state.

9.1. Minimization and Redaction

The portable Consent Evidence object MAY carry a durable reference to the full Consent Disclosure object rather than the object itself. A durable reference is an absolute HTTPS URI paired with the consent_rendering_hash the retrieved disclosure MUST verify against. The minimal retrieval profile is an authenticated HTTPS GET that returns the disclosure as application/mission-consent-disclosure+json; the authorization it requires is deployment-defined.

A verifier with authorization MUST be able to retrieve or reconstruct the disclosure for the retention period. It MUST verify the retrieved object against consent_rendering_hash. Non-retrievability within the retention window is an audit failure (Section 9) within deployment agreement, not an integrity failure of the evidence record (Section 7.1).

Free-form task text and approver comments SHOULD be redacted or stored by reference when not required for ordinary audit.

10. Conformance

The conforming floor is Rung 0 (Section 6): what was shown is committed, bound to the Mission anchors, signed, and reconstructible. A conforming Consent-Evidence-capable Mission Issuer MUST:

Beyond that floor, a conforming Mission Issuer:

Each rung above Rung 0 is a named optional claim (Appendix A), made only when its requirements are satisfied and its evidence recorded.

A conforming verifier of Consent Evidence MUST implement the checks in Section 7.1. It MUST treat failure to retrieve a referenced disclosure during the retention window as an audit failure.

11. Security Considerations

11.1. Rendering Confusion

The primary threat is rendering confusion: the Approver sees one thing while the Mission records another. This profile mitigates that by committing a structured disclosure object to the same Mission anchors used for authority, so a disclosure that understates the Authority Set is detectable in audit. It does not eliminate the threat: the limits of a server-side commitment, and the degrees by which the optional rungs reduce the rendering trust base, are stated with the ladder (Section 6, Appendix A). A deployment that needs assurance that the Approver's authenticator confirmed a specific disclosure commitment SHOULD evaluate Rung 3 for its high-risk classes.

11.2. Template Downgrade

An attacker could use an outdated or less explicit template. The Consent Disclosure object includes template_id and template_version; deployments SHOULD reject templates not approved for the action classes being authorized.

11.3. Evidence Does Not Grant Authority

Consent Evidence proves what was recorded as shown and decided. It MUST NOT be accepted as a token, grant, or substitute for the Mission's authority_hash.

11.4. Decline Suppression

An attacker could repeatedly reshape and resubmit a declined Mission to obtain approval through fatigue. Recording declined events lets deployments detect repeated attempts against the same task, requester, or Authority Set.

11.5. Interrogation as a Persuasion Surface

Disclosure Interrogation (Section 4.5) lets the Approver ask why; the same channel lets a compromised agent argue. An injected agent that authored a hostile goal can author the reassuring answers the goal provokes. The grounding rule of Section 4.5 is the mitigation: the consent surface's own voice speaks only from recorded material, relayed agent text is rendered inert and visibly the agent's, and the recorded interrogation entries expose a persuasion pattern to the same audit that Section 11.4 gives repeated resubmission.

11.6. Incomplete Material Notices

If material notices omit high-risk authority, the Approver's consent may not be meaningful. Deployments SHOULD test disclosure templates against Authority Set fixtures and reject templates that cannot render all material notice classes.

12. Privacy Considerations

Consent Evidence can contain sensitive task descriptions, business context, approver identity, subject identity, and high-risk authority details. Deployments SHOULD protect it at least as strongly as Mission records and runtime evidence. Where possible, portable records SHOULD carry hashes or references rather than full rendered text, while still allowing authorized audit reconstruction. Evidence removed under a legal basis is erased through the audit profile's erasure record ([I-D.draft-mcguinness-mission-audit]), which keeps the removal itself accountable.

A global sequence counter leaks approval volume: a holder of two evidence records can read the gap between their sequence values as the count of approvals the Mission Issuer processed in between. A deployment sensitive to that side channel SHOULD scope sequence per Mission or per audit scope rather than use a single global counter.

13. IANA Considerations

13.1. Media Type Registry

IANA is requested to register two media types per [RFC6838]: one for the Consent Evidence object and a distinct one for the Consent Disclosure object it may reference (Section 9.1). The Mission audit profile ([I-D.draft-mcguinness-mission-audit]) references the Consent Evidence media type.

14. References

14.1. Normative References

[BCP47]
Best Current Practice 47, <https://www.rfc-editor.org/info/bcp47>.
At the time of writing, this BCP comprises the following:
Phillips, A., Ed. and M. Davis, Ed., "Matching of Language Tags", BCP 47, RFC 4647, DOI 10.17487/RFC4647, , <https://www.rfc-editor.org/info/rfc4647>.
Phillips, A., Ed. and M. Davis, Ed., "Tags for Identifying Languages", BCP 47, RFC 5646, DOI 10.17487/RFC5646, , <https://www.rfc-editor.org/info/rfc5646>.
[I-D.draft-mcguinness-mission-approval-governance]
McGuinness, K., "Mission Approval Governance", , <https://mcguinness.github.io/mission-bound-authorization/draft-mcguinness-mission-approval-governance.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>.
[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>.
[RFC6234]
Eastlake 3rd, D. and T. Hansen, "US Secure Hash Algorithms (SHA and SHA-based HMAC and HKDF)", RFC 6234, DOI 10.17487/RFC6234, , <https://www.rfc-editor.org/rfc/rfc6234>.
[RFC6838]
Freed, N., Klensin, J., and T. Hansen, "Media Type Specifications and Registration Procedures", BCP 13, RFC 6838, DOI 10.17487/RFC6838, , <https://www.rfc-editor.org/rfc/rfc6838>.
[RFC7515]
Jones, M., Bradley, J., and N. Sakimura, "JSON Web Signature (JWS)", RFC 7515, DOI 10.17487/RFC7515, , <https://www.rfc-editor.org/rfc/rfc7515>.
[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>.
[RFC8259]
Bray, T., Ed., "The JavaScript Object Notation (JSON) Data Interchange Format", STD 90, RFC 8259, DOI 10.17487/RFC8259, , <https://www.rfc-editor.org/rfc/rfc8259>.
[RFC8785]
Rundgren, A., Jordan, B., and S. Erdtman, "JSON Canonicalization Scheme (JCS)", RFC 8785, DOI 10.17487/RFC8785, , <https://www.rfc-editor.org/rfc/rfc8785>.

14.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-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-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-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-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>.
[I-D.draft-mcguinness-oauth-mission-template]
McGuinness, K., "Mission Template for OAuth 2.0", , <https://mcguinness.github.io/mission-bound-authorization/draft-mcguinness-oauth-mission-template.html>.
[RFC8725]
Sheffer, Y., Hardt, D., and M. Jones, "JSON Web Token Best Current Practices", BCP 225, RFC 8725, DOI 10.17487/RFC8725, , <https://www.rfc-editor.org/rfc/rfc8725>.

Appendix A. Rendering-Assurance Rungs Above the Floor

This appendix defines the rungs above the conforming floor of Rung 0 (Section 6). Each is a named optional claim (Section 10). Rung 1 is optional and stable; Rungs 2 through 4 are additionally experimental, to adopt for evaluation, not as a stable interface, because each imports a trust infrastructure this profile does not supply: platform or trusted-execution-environment attestation for Rung 2, transaction-confirming authenticators for Rung 3. The cumulative rule of Section 6 applies: a rung is claimed only over a disclosure that also satisfies the rungs below it.

Rung 1, Deterministic rendering:

An auditor can re-render the intended form, so the open question narrows to whether the rendering layer faithfully executed a published template. A deployment claiming Rung 1 MUST:

  • render the disclosure as a deterministic function of the disclosure object, template_id, template_version, rendering_template_digest, and locale, so the same inputs produce the same rendered form within a presentation modality;

  • commit the template content bytes in rendering_template_digest (Section 4); and

  • keep the named template retrievable or reconstructable by an authorized auditor for the retention period (Section 9).

Rung 2, Attested rendering:

The Consent Evidence carries a rendering_attestation (Section 7): evidence that an attested, identified rendering component (a first-party AS-hosted consent surface, or a renderer attested by the platform or a trusted execution environment) produced the rendering. The trusted base shrinks from any rendering layer to an attested one.

Rung 3, Approver confirmation:

The Consent Evidence carries a rendering_confirmation (Section 7): a signature produced by the Approver's authenticator over the consent_rendering_hash at approval, binding the approval credential itself to the exact committed disclosure. What this proves is narrow but real: that the Approver's authenticator was invoked over that specific consent_rendering_hash, and that the confirmation could not be fabricated by the Authorization Server, because it is signed by a credential bound to the Approver. It does not by itself prove the authenticator displayed the disclosure, so it is what-you-see-is-what-you-sign only when the authenticator also renders a value derived from the disclosure. A deployment claiming this rung SHOULD apply it to a Mission whose Authority Set carries a high-risk material-notice class (Section 4.2).

Rung 4, Out-of-band confirmation:

For the most material actions, confirmation is obtained at execution time on a channel the rendering layer does not control, as the action-bound approval of the runtime layer ([I-D.draft-mcguinness-mission-runtime]); a rendering layer would then have to compromise two independent paths. That is a runtime-layer mechanism recorded as its own evidence; this profile records the approval-time rungs above.

At Rung 3 the claim that the Approver's authenticator confirmed a specific disclosure commitment is verifiable up to trust in that authenticator, rather than in an arbitrary rendering layer. The verifier obligations for these rungs are steps 7 and 8 of Section 7.1; their absence asserts no rung above the ones the record satisfies and is never an integrity failure.

Appendix B. Worked Disclosure and Test Vector

This non-normative vector lets an implementation verify its consent_rendering_hash computation (Section 5) byte for byte. The disclosure is the one the evidence example of Section 7 records. It renders the Authority Set of the issuance profile's test vectors ([I-D.draft-mcguinness-oauth-mission]): invoices.read and journal-entries.write bounded by a max_amount of 500.00 USD on https://erp.example.com, approved by alice (user_3p2q8mN1a0kV7tR); source_hashes carries that profile's computed intent_hash and authority_hash. This Mission submitted no authority proposal, so source_hashes carries no proposal_hash. The rendering_template_digest value stands for the deployment's template commitment and is illustrative.

The Consent Disclosure object:

{
  "disclosure_id": "disc_4pQ9z",
  "source_hashes": {
    "intent_hash":
      "sha-256:6mIFoCz79uCHNzKLfBpBwqFjoFXdpmpuc65486IqimQ",
    "authority_hash":
      "sha-256:vUCCfjGulit9u0qJ0Z6pQSNerZtXMqRlfJNCr4PzLro"
  },
  "template_id": "mission-consent-standard",
  "template_version": "2026-06",
  "rendering_template_digest":
    "sha-256:50S2DpJfcfNGlzi_vzZJNJbJKkknFX65rhWJWLiMyok",
  "locale": "en-US",
  "mission_summary": {
    "goal": "Reconcile Q3 invoices",
    "expires_at": "2026-12-31T23:59:59Z",
    "subject_display": "alice (user_3p2q8mN1a0kV7tR)",
    "approver_display": "alice (user_3p2q8mN1a0kV7tR)"
  },
  "authority_summary": [
    {
      "resource": "https://erp.example.com",
      "actions": ["invoices.read"]
    },
    {
      "resource": "https://erp.example.com",
      "actions": ["journal-entries.write"],
      "constraints": [
        {
          "constraint": "max_amount",
          "value": { "amount": "500.00", "currency": "USD" },
          "rendered":
          "Each journal entry is capped at 500.00 US dollars (USD)."
        }
      ]
    }
  ],
  "material_notices": [
    {
      "condition": "irreversible_action",
      "applies_to": {
        "resource": "https://erp.example.com",
        "action": "journal-entries.write"
      },
      "statement":
        "Posted journal entries are not automatically reversible."
    }
  ],
  "risk_summary": [
    {
      "dimension": "data_access",
      "statement":
        "The agent can read invoices held in the ERP system."
    },
    {
      "dimension": "spend",
      "statement":
        "The agent can post journal entries of up to 500 US dollars."
    },
    {
      "dimension": "irreversibility",
      "statement":
        "Posted journal entries alter the ledger of record."
    }
  ],
  "constraint_provenance": [
    {
      "applies_to": {
        "resource": "https://erp.example.com",
        "constraint": "max_amount"
      },
      "source": "subject"
    }
  ],
  "approver": {
    "iss": "https://idp.example.com",
    "sub": "user_3p2q8mN1a0kV7tR",
    "display": "alice"
  },
  "requesting_client": {
    "client_id": "s6BhdRkqt3",
    "display": "Invoice Reconciler Agent"
  },
  "display_context": {
    "channel": "web",
    "rendered_at": "2026-06-30T17:54:30Z"
  },
  "approver_actions": [
    {
      "action": "acknowledge_notice",
      "applies_to": {
        "resource": "https://erp.example.com",
        "action": "journal-entries.write"
      },
      "condition": "irreversible_action"
    }
  ]
}

The read entry carries no constraints, so its element renders none. The write entry warrants a material notice and an irreversibility risk dimension because posted journal entries are not automatically reversible; constraint_provenance attributes the max_amount bound to the Subject, who stated it in the task request. The notice is of a high-risk class, so approver_actions carries its per-notice acknowledgment (Section 4.2). The requesting_client names the agent that will wield the granted authority. The Approver is the Subject, so the top-level subject member is absent.

consent_rendering_hash is the prefixed SHA-256 over the JCS [RFC8785] canonical bytes of the integrity-anchor envelope with typ mission-consent-disclosure, iss https://as.example.com, and this disclosure object as value. The canonical-bytes block is the exact JCS output: a single line, UTF-8, no whitespace. It is shown here wrapped only for layout; remove the layout line breaks, adding no characters, to recover the canonical form. Note that JCS sorts object member names and preserves array order.

Canonical bytes of the envelope:

{"iss":"https://as.example.com","typ":"mission-consent-disclosure","
value":{"approver":{"display":"alice","iss":"https://idp.example.com
","sub":"user_3p2q8mN1a0kV7tR"},"approver_actions":[{"action":"ackno
wledge_notice","applies_to":{"action":"journal-entries.write","resou
rce":"https://erp.example.com"},"condition":"irreversible_action"}],
"authority_summary":[{"actions":["invoices.read"],"resource":"https:
//erp.example.com"},{"actions":["journal-entries.write"],"constraint
s":[{"constraint":"max_amount","rendered":"Each journal entry is cap
ped at 500.00 US dollars (USD).","value":{"amount":"500.00","currenc
y":"USD"}}],"resource":"https://erp.example.com"}],"constraint_prove
nance":[{"applies_to":{"constraint":"max_amount","resource":"https:/
/erp.example.com"},"source":"subject"}],"disclosure_id":"disc_4pQ9z"
,"display_context":{"channel":"web","rendered_at":"2026-06-30T17:54:
30Z"},"locale":"en-US","material_notices":[{"applies_to":{"action":"
journal-entries.write","resource":"https://erp.example.com"},"condit
ion":"irreversible_action","statement":"Posted journal entries are n
ot automatically reversible."}],"mission_summary":{"approver_display
":"alice (user_3p2q8mN1a0kV7tR)","expires_at":"2026-12-31T23:59:59Z"
,"goal":"Reconcile Q3 invoices","subject_display":"alice (user_3p2q8
mN1a0kV7tR)"},"rendering_template_digest":"sha-256:50S2DpJfcfNGlzi_v
zZJNJbJKkknFX65rhWJWLiMyok","requesting_client":{"client_id":"s6BhdR
kqt3","display":"Invoice Reconciler Agent"},"risk_summary":[{"dimens
ion":"data_access","statement":"The agent can read invoices held in
 the ERP system."},{"dimension":"spend","statement":"The agent can p
ost journal entries of up to 500 US dollars."},{"dimension":"irrever
sibility","statement":"Posted journal entries alter the ledger of re
cord."}],"source_hashes":{"authority_hash":"sha-256:vUCCfjGulit9u0qJ
0Z6pQSNerZtXMqRlfJNCr4PzLro","intent_hash":"sha-256:6mIFoCz79uCHNzKL
fBpBwqFjoFXdpmpuc65486IqimQ"},"template_id":"mission-consent-standar
d","template_version":"2026-06"}}
consent_rendering_hash =
  sha-256:y-XRrRqSKkeR6mjgXKqcM2DW8FMOwrjOqzZwjb1rNqY

An implementation that canonicalizes the same envelope, computes SHA-256, and encodes as sha-256: followed by base64url with no padding reproduces this value exactly. A divergence indicates a JCS or encoding difference to resolve before interoperating.

Acknowledgments

This document is part of the Mission-Bound Authorization for OAuth 2.0 set and binds the approval surface to the Mission authority record.

Author's Address

Karl McGuinness
Independent