<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE rfc [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">
]>
<!-- name="GENERATOR" content="github.com/mmarkdown/mmark Mmark Markdown Processor - mmark.nl" -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" submissionType="IETF" category="std" xml:lang="en" consensus="true" docName="draft-mw-oauth-actor-chain-02" obsoletes="" updates="" tocInclude="true" symRefs="true" sortRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.29.0 -->
  <front>
    <title abbrev="ACTOR-CHAIN-PROTOCOL">OAuth Actor Chain: Protocol and Interoperability</title>
    <seriesInfo name="Internet-Draft" value="draft-mw-oauth-actor-chain-02"/>
    <author initials="A." surname="Prasad" fullname="A Prasad">
      <organization/>
      <address>
        <postal>
          <street/>
        </postal>
        <email>ap1729@gmail.com</email>
      </address>
    </author>
    <author initials="R." surname="Krishnan" fullname="Ram Krishnan">
      <organization/>
      <address>
        <postal>
          <street/>
        </postal>
        <email>ramkri123@gmail.com</email>
      </address>
    </author>
    <author initials="D." surname="Lopez" fullname="Diego R. Lopez">
      <organization/>
      <address>
        <postal>
          <street/>
        </postal>
        <email>diego.r.lopez@telefonica.com</email>
      </address>
    </author>
    <author initials="S." surname="Addepalli" fullname="Srinivasa Addepalli">
      <organization/>
      <address>
        <postal>
          <street/>
        </postal>
        <email>srinivasa.addepalli@aryaka.com</email>
      </address>
    </author>
    <author initials="S." surname="Krishnan" fullname="Suresh Krishnan">
      <organization/>
      <address>
        <postal>
          <street/>
        </postal>
        <email>suresh.krishnan@gmail.com</email>
      </address>
    </author>
    <date year="2026" month="October" day="13"/>
    <area>Security</area>
    <workgroup>OAuth</workgroup>
    <keyword>actor chain</keyword>
    <keyword>oauth</keyword>
    <keyword>rfc8693</keyword>
    <keyword>token exchange</keyword>
    <keyword>workload identity</keyword>
    <keyword>delegation</keyword>
    <keyword>AI agents</keyword>
    <abstract>
      <t>This document defines the protocol and interoperability requirements for
OAuth Actor Chain. Six profiles combine Authorization Server declarations or
actor-signed evidence with Full, Subset, or Actor-Only disclosure. Verified
profiles create one actor proof and one AS acceptance at every actor step,
with optional current-actor, disclosed-actor, or full-path evidence delivered
inline or through introspection. This specification defines the wire formats, validation,
replay and retry behavior, cross-domain preservation, resource limits, and
IANA registration requests. A separate Informational overview provides
additional design discussion. This revision continues the existing OAuth Actor
Chain draft series, with Internet-Draft lineage beginning in SPICE in
February 2026.</t>
    </abstract>
  </front>
  <middle>
    <section anchor="introduction" numbered="true" toc="default">
      <name>Introduction</name>
      <t>Applications often delegate a request across several services before reaching
a protected resource. The resource may need evidence about earlier actors,
while disclosure policy limits which identities and relationships it may learn.
For example, a document API may require evidence from the initiating service
and its immediate connector without needing every intermediary's identity.</t>
      <t>OAuth 2.0 Token Exchange <xref target="RFC8693" format="default"/> supports exchanging credentials and
representing actor history in nested <tt>act</tt> claims. Earlier actors in that
history remain informational for access control. Actor Chain adds explicit
rules for constructing the history, controlling disclosure, and delivering
actor-signed evidence through a separate top-level extension. It retains the
Authorization Server's (AS's) responsibility for authorization and token issuance.</t>
      <section anchor="participants-and-workflow" numbered="true" toc="default">
        <name>Participants and Workflow</name>
        <t>Consider services A, B, and C acting for one workflow subject, with C calling
protected resource D:</t>
        <artwork type="text" name="" align="left" alt=""><![CDATA[A -> B -> C -> D
]]></artwork>
        <t>A obtains a token for B. After accepting A's call, B authenticates to an AS
and exchanges the received token for a token addressed to C. C similarly
obtains a token addressed to D. Each exchange requires authorization to act
on the inbound token; possession of that token alone does not grant exchange
permission or transfer its sender's private key.</t>
        <t>In this example, each service requesting a new authorization transition is an
actor. The AS
authenticates that actor, checks the inbound authority and outgoing target,
applies disclosure policy, and issues the next access token. The resource
validates its token and applies its own authorization and evidence policy.
The token subject identifies the party or context represented by the workflow;
it is distinct from the actor performing an individual transition.</t>
        <t>For Verified assurance, C signs a request binding its identity, workflow,
preceding acceptance, accepting AS, resource, and any requested scope. The AS
validates that request and signs an acceptance of its exact proof. C's proof,
the AS acceptance, and the issued access token have different roles: the proof
authenticates C's request, the acceptance records the AS's decision to accept
that step, and the access token conveys the authority granted for access to D.</t>
      </section>
      <section anchor="processing-model" numbered="true" toc="default">
        <name>Processing Model</name>
        <t>There are three transitions:</t>
        <table align="center">
          <thead>
            <tr>
              <th align="left">Transition</th>
              <th align="left">Meaning</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">root</td>
              <td align="left">Begins a workflow with its first authenticated actor.</td>
            </tr>
            <tr>
              <td align="left">extend</td>
              <td align="left">Appends an authenticated actor to accepted workflow state.</td>
            </tr>
            <tr>
              <td align="left">preserve</td>
              <td align="left">Transfers accepted state across AS domains without adding an actor step.</td>
            </tr>
          </tbody>
        </table>
        <t>Each Verified <tt>root</tt> or <tt>extend</tt> creates one actor proof and one AS acceptance.
A Verified token carries the latest acceptance in <tt>actc</tt>. Its exact bytes link
a later actor's proof to that predecessor. A <tt>preserve</tt> transition retains the
protected state and original signatures; an AS boundary is not itself actor
participation. Reusing an access token for another call does not create a new
Actor Chain transition.</t>
      </section>
      <section anchor="assurance-disclosure-and-evidence" numbered="true" toc="default">
        <name>Assurance, Disclosure, and Evidence</name>
        <t>A workflow selects one assurance/disclosure profile and keeps it fixed.
Declared assurance relies on the AS's signed assertion. Verified assurance
adds actor proofs and AS acceptances. Independently, Full disclosure shows the
accepted actor path, Subset shows an authorized subsequence, and Actor-Only
shows the current actor. For A, B, and C, those disclosures could be A/B/C,
A/C, and C. A/C does not establish adjacency or the absence of B.</t>
        <t>Evidence delivery is a further choice within Verified profiles. A token with
<tt>actc</tt> and no <tt>acte</tt> carries the AS acceptance without supplying actor proofs.
When <tt>acte</tt> is present, <tt>current</tt> supplies the latest proof and acceptance;
<tt>disclosed</tt> supplies one original pair per disclosed actor occurrence; and
<tt>path</tt> supplies a continuous root-to-current sequence with actor-view openings.
<tt>path</tt> requires Full disclosure. <tt>disclosed</tt> verifies selected signatures but
relies on issuer-attested membership and order across omitted actors.</t>
        <t>Resources advertise evidence requirements through authenticated metadata.
Evidence can travel inline or through authorized token introspection. Required
evidence must be available and compatible with disclosure policy. Its absence
cannot be treated as successful direct verification.</t>
        <t>Actor signatures authenticate protocol requests, not business approval or
successful execution. One verified path does not establish that no other branch
exists. An exchange-time signature also does not prove who presents the token
now; reliance on the immediate actor as live presenter requires a separately
validated sender constraint.</t>
      </section>
      <section anchor="reading-guide-and-lineage" numbered="true" toc="default">
        <name>Reading Guide and Lineage</name>
        <t>This specification defines the protocol model and conformance requirements
for Actor Chain. The Informational overview
<xref target="ACTOR-CHAIN-OVERVIEW" format="default"/> offers additional motivation and design discussion;
reading it first is optional. The sections below define the standards boundary,
profiles, wire artifacts, transition processing, validation, and failure rules,
followed by security considerations and worked examples. Examples and test
vectors are informative aids; the normative processing requirements govern.</t>
        <t>This is revision <tt>-02</tt> of the existing <tt>draft-mw-oauth-actor-chain</tt> series,
following <tt>-01</tt> dated 15 June 2026 <xref target="OAUTH-ACTOR-CHAIN-01" format="default"/>. The authors'
Actor Chain Internet-Draft lineage began with SPICE <tt>-00</tt> dated 25 February
2026 <xref target="SPICE-ACTOR-CHAIN-00" format="default"/>; Datatracker records the SPICE series as replaced
by the OAuth series. The separate overview complements this continuing
technical specification.</t>
      </section>
    </section>
    <section anchor="standards-boundary" numbered="true" toc="default">
      <name>Standards Boundary</name>
      <t>This document profiles OAuth 2.0 Token Exchange and does not change the base
meaning of <tt>sub</tt>, <tt>act</tt>, or <tt>may_act</tt>. When <tt>actp</tt> is absent, this document adds
no processing rules. Earlier actors in nested <tt>act</tt> remain informational for
access-control purposes as specified by RFC 8693.</t>
      <t>When <tt>actp</tt> selects a profile in this document:</t>
      <ul spacing="normal">
        <li>
          <t>the token-level <tt>sub</tt> remains the subject of the workflow;</t>
        </li>
        <li>
          <t><tt>act</tt> names the actors disclosed in that token; it does not change <tt>sub</tt>;</t>
        </li>
        <li>
          <t><tt>may_act</tt> retains its RFC 8693 meaning as a statement about who may act; it
does not record an Actor Chain transition;</t>
        </li>
        <li>
          <t><tt>acti</tt> identifies this sequence of actor transitions as one workflow; and</t>
        </li>
        <li>
          <t>in a Verified profile, <tt>actc</tt> carries the AS acceptance and optional <tt>acte</tt>
delivers actor-signed evidence to the recipient.</t>
        </li>
      </ul>
      <t>This specification does not define application roles, business policy,
transaction semantics, task execution, result correctness, complete branch
discovery, or a general delegation-policy language. It compares OAuth <tt>scope</tt>
as written; differently named scopes in different domains are not assumed to
mean the same thing.</t>
    </section>
    <section anchor="authorization-policy-model" numbered="true" toc="default">
      <name>Authorization Policy Model</name>
      <t>The AS applies issuance policy to its authoritative accepted workflow state.
The recipient applies normal OAuth authorization and its configured evidence
policy. RFC 8693 Section 4.1's rule for earlier nested <tt>act</tt> identities is
preserved: those identities alone remain informational. This profile defines
the top-level <tt>acte</tt> extension as an additional source of authenticated actor
records. Section <xref target="evidence-authorization" format="default"/> specifies its use.</t>
      <t>With <tt>disclosed</tt> coverage, the recipient verifies the actors disclosed to it.
It trusts the token issuer's attestation that the selected records belong to
this token's accepted path. It need not obtain or verify undisclosed actors;
different authorized recipients can receive and verify different subsets.
For example, a recipient requiring A and C can verify their disclosed records
without B's proof. A recipient requiring B must receive and verify B's evidence;
another recipient's check satisfies that requirement only under an explicit
local trust policy. Complete-path verification is an additional policy choice,
not a requirement of <tt>disclosed</tt> coverage.
Participation does not establish business approval, argument-level permission,
or execution results. Application policy determines which authenticated
records are relevant; this specification defines no role or approval language.</t>
    </section>
    <section anchor="terminology" numbered="true" toc="default">
      <name>Terminology</name>
      <t>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 <xref target="RFC2119" format="default"/> <xref target="RFC8174" format="default"/>
when, and only when, they appear in all capitals.</t>
      <t>This document uses OAuth terminology from <xref target="RFC6749" format="default"/> and <xref target="RFC8693" format="default"/>. It also
defines:</t>
      <ul spacing="normal">
        <li>
          <t><strong>ActorID</strong>: the issuer-qualified actor identifier <tt>{ "iss": ..., "sub":
... }</tt>.</t>
        </li>
        <li>
          <t><strong>Current actor</strong>: the actor authenticated by the AS for a <tt>root</tt> or <tt>extend</tt>
transition.</t>
        </li>
        <li>
          <t><strong>Presenting actor</strong>: the entity that presents the issued access token to
its recipient.</t>
        </li>
        <li>
          <t><strong>Actor-visible chain</strong>: the ordered ActorID sequence the current actor is
authorized to know at its transition. The actor commits to that sequence
without exposing it in the step proof.</t>
        </li>
        <li>
          <t><strong>Disclosed chain</strong>: the ordered ActorID sequence shown in a token's nested
<tt>act</tt> claim. Disclosure can be narrower than the actor-visible chain.</t>
        </li>
        <li>
          <t><strong>Acceptance</strong>: the AS-signed compact JWS, carried as <tt>actc</tt>, that accepts
one exact actor proof and links it to the preceding acceptance, if any.</t>
        </li>
        <li>
          <t><strong>Evidence coverage</strong>: <tt>current</tt> supplies the latest proof and acceptance;
<tt>disclosed</tt> supplies the original proof and acceptance for each disclosed
actor occurrence; <tt>path</tt> supplies the continuous root-to-current proofs,
acceptances, and actor-view openings.</t>
        </li>
        <li>
          <t><strong>Evidence delivery</strong>: <tt>inline</tt> carries evidence in the token;
<tt>introspection</tt> supplies it through authenticated token introspection.</t>
        </li>
        <li>
          <t><strong>Commitment-only</strong>: a Verified token carrying <tt>actc</tt> without <tt>acte</tt>.</t>
        </li>
        <li>
          <t><strong>Protected state</strong>: <tt>actp</tt>, <tt>acti</tt>, <tt>actc</tt>, and any carried <tt>acte</tt>. A
<tt>preserve</tt> transition transports these values without transcription.</t>
        </li>
      </ul>
    </section>
    <section anchor="profiles" numbered="true" toc="default">
      <name>Profiles: Assurance and Disclosure</name>
      <t>Each profile makes two separate choices: how an actor transition is supported
(<em>assurance</em>) and how much actor history a token reveals (<em>disclosure</em>).
Declared assurance relies on the issuing AS's assertion. Verified assurance
adds an actor proof and AS acceptance at each actor transition. Full disclosure
shows the whole actor path; Subset shows an authorized subset; Actor-Only shows
only the current actor. These choices yield six profiles:</t>
      <table align="center">
        <thead>
          <tr>
            <th align="left">Assurance</th>
            <th align="left">Full</th>
            <th align="left">Subset</th>
            <th align="left">Actor-Only</th>
          </tr>
        </thead>
        <tbody>
          <tr>
            <td align="left">Declared</td>
            <td align="left">declared-full</td>
            <td align="left">declared-subset</td>
            <td align="left">declared-actor-only</td>
          </tr>
          <tr>
            <td align="left">Verified</td>
            <td align="left">verified-full</td>
            <td align="left">verified-subset</td>
            <td align="left">verified-actor-only</td>
          </tr>
        </tbody>
      </table>
      <t>The evidence option is separate from the six profiles. In a Verified profile,
<tt>current</tt> permits direct verification of the latest actor proof. <tt>disclosed</tt>
permits direct verification of every actor occurrence in the token's <tt>act</tt>,
with issuer-attested membership in this token's accepted path. <tt>path</tt> permits
direct verification of every actor proof and original AS acceptance on one
root-to-current path, and is available only with Full disclosure in this
version.</t>
      <t>These artifacts prove only the checks specified here. Neither <tt>actc</tt> nor <tt>acte</tt>
proves that an actor performed a task, produced a correct result, remained
uncompromised, or that every branch or off-protocol actor was disclosed. Live
possession by the token presenter requires a separate sender constraint.</t>
    </section>
    <section anchor="conformance" numbered="true" toc="default">
      <name>Conformance</name>
      <t>An implementation MAY support any subset of the six profiles, but MUST publish
its supported capabilities as specified in Section
<xref target="as-metadata" format="default"/>. For each profile it accepts, the implementation
MUST apply the common rules and the rules for that profile's assurance and
disclosure choices.</t>
      <t>The request selects exactly one <tt>actor_chain_profile</tt>. The AS either issues a
token with the matching <tt>actp</tt> value or rejects the request. <tt>actp</tt> and the
workflow identifier <tt>acti</tt> remain unchanged throughout that workflow. A party
MUST NOT infer a profile from the shape of <tt>act</tt> or from <tt>acte</tt>.</t>
      <t>Unknown profile values, versions, transition kinds, evidence coverage values,
delivery values, or protected artifact types, and missing required members,
MUST fail closed. That means processing stops rather than guessing a default. JSON
objects used by this specification MUST reject duplicate members.</t>
    </section>
    <section anchor="data-model" numbered="true" toc="default">
      <name>Common Data Model</name>
      <t>Self-contained profiled access tokens MUST be signed JWTs <xref target="RFC7519" format="default"/> and MUST contain
<tt>iss</tt>, <tt>sub</tt>, <tt>aud</tt>, <tt>iat</tt>, <tt>exp</tt>, <tt>jti</tt>, <tt>actp</tt>, and <tt>acti</tt>. They carry <tt>act</tt>
as required by the selected disclosure mode. Verified tokens MUST additionally
carry <tt>actc</tt> and MAY carry <tt>acte</tt>.</t>
      <t>An ActorID is a JSON object containing exactly two non-empty string members:
<tt>iss</tt> and <tt>sub</tt>. In this object, <tt>sub</tt> identifies the actor; it is distinct
from the access token's top-level workflow subject. <tt>iss</tt> is an absolute issuer
URI. ActorID equality is exact equality of the pair. Newly issued nested <tt>act</tt>
nodes MUST carry both members.</t>
      <t><tt>VisibleChain(act)</tt> reads nested <tt>act</tt> from the innermost prior actor to the
outermost current actor. <tt>EncodeVisibleChain([A,B])</tt> is:</t>
      <artwork type="json" name="" align="left" alt=""><![CDATA[{
  "iss": "B.iss",
  "sub": "B.sub",
  "act": { "iss": "A.iss", "sub": "A.sub" }
}
]]></artwork>
      <t>The AS MUST mint <tt>acti</tt> at <tt>root</tt> using a CSPRNG with at least 122 bits of
entropy. It MUST remain stable and MUST NOT encode actor, profile, target, or
business information.</t>
      <t>Profiled access tokens SHOULD normally expire within one to ten minutes after
issuance. Implementations MUST validate <tt>iss</tt>, <tt>aud</tt>, <tt>exp</tt>, and <tt>jti</tt> according
to their governing OAuth and JWT specifications before Actor Chain processing.</t>
    </section>
    <section anchor="target-scope" numbered="true" toc="default">
      <name>Target And Scope Binding</name>
      <t>A Verified actor transition targets one protected resource, such as the
destination API. The proof's <tt>target_context</tt> has a required <tt>resource</tt> member
and may have a <tt>scope</tt> member:</t>
      <artwork type="json" name="" align="left" alt=""><![CDATA[{ "resource": "https://api.example/", "scope": "read" }
]]></artwork>
      <t><tt>resource</tt> is one non-empty string. It MUST equal the single RFC 8707
<xref target="RFC8707" format="default"/> <tt>resource</tt> value in the request and MUST be an HTTPS Resource
Identifier without a fragment as defined by RFC 9728 <xref target="RFC9728" format="default"/>. It MUST NOT
contain user information. A query component SHOULD be omitted unless the
deployment requires it. Actor Chain
transitions MUST NOT request more than one resource. Fan-out uses distinct
tokens and distinct <tt>request_id</tt> values.</t>
      <t>Identifiers covered by a proof must match exactly. This specification compares
Unicode code points after JSON unescaping, with no Unicode normalization.
Implementations MUST NOT case-fold a scheme or host, remove a default port,
add or remove a trailing slash, resolve dot segments, decode percent-encoding,
reorder a query, follow a redirect, or apply another URI normalization before comparing a signed
identifier. Parsing to enforce URI syntax is allowed; changing the string
before comparison is not. Producers SHOULD publish and sign one stable form.
A signed target is an identifier. It MUST NOT be dereferenced merely because
it appears in a valid proof. Exact string comparison avoids security-dependent
differences among URI libraries <xref target="RFC3986" format="default"/>.</t>
      <t><tt>accepting_issuer</tt> MUST be an RFC 8414 issuer identifier and MUST equal, under
the same exact comparison rule, both the authenticated AS metadata <tt>issuer</tt>
and the acceptance <tt>iss</tt>.</t>
      <t>The actor proof does not duplicate the access token's <tt>aud</tt>. RFC 8707 permits
an AS to use the <tt>resource</tt> value as the audience or map it to another audience
identifier. The AS MUST audience-restrict the token to the proof-bound resource
using its established mapping and MUST NOT retarget the proof. A recipient
validates token <tt>aud</tt> independently under JWT and its OAuth profile; a JWT
audience may be one string or an array, and every comparison is the exact,
case-sensitive comparison defined by RFC 7519 <xref target="RFC7519" format="default"/>. This separation
keeps an AS-local audience mapping from becoming portable actor-signed state.</t>
      <t>For a Verified <tt>root</tt> or <tt>extend</tt>, requested OAuth <tt>scope</tt> and
<tt>target_context.scope</tt> MUST either both be present or both be absent. When
present, each MUST satisfy the scope grammar in RFC 6749 Section 3.3
<xref target="RFC6749" format="default"/> and describe the same lexical set. The proof uses the canonical
form: reject duplicates, sort tokens by ascending ASCII value, and join them
with one U+0020 SPACE. Scope tokens are case-sensitive. Empty strings,
leading or trailing spaces, repeated separators, and non-scope-token
characters MUST be rejected.</t>
      <t>When both members are absent, the actor authorizes the empty OAuth scope
set. For these Verified transitions, the AS's predefined default under
RFC 6749 Section 3.3 MUST be that empty set. An AS that cannot apply this
default MUST reject an omitted-scope request with <tt>invalid_scope</tt>. The AS
MUST NOT apply a non-empty default scope or issue a token with
non-empty scope. An empty granted set omits token <tt>scope</tt>; a non-empty
granted set MUST be stated explicitly in the token. Required default scopes
must be known before signing and explicitly included in the proof and token
request. An AS that cannot issue under these rules MUST reject with
<tt>invalid_scope</tt>. These constraints apply only to Verified transitions;
Declared processing retains the governing OAuth scope rules.</t>
      <t>The AS either issues for the exact proof-bound resource or rejects; it does not
"narrow" one URI into another. It MAY narrow scope. Scope narrowing is set
inclusion over lexical scope tokens. This rule does not establish semantic
equivalence between differently named cross-domain scopes. Cross-domain scope
translation requires an explicitly authorized mapping, as specified in
Section <xref target="cross-domain" format="default"/>. An unknown mapping MUST be rejected.</t>
      <t>Each proof binds the outgoing target for that transition only. In <tt>A -&gt; B -&gt; C
-&gt; D</tt>, the successive resources can legitimately identify B, C, and D; those
URIs do not form an ordered set. Each accepting AS validates its transition's
request, proof, issued token, and authorization. D can directly compare the
final proof with D's authenticated RFC 9728 <tt>resource</tt> identifier. Without a
retained historical token, path evidence does not reconstruct the audience or
effective authority of that historical token.</t>
    </section>
    <section anchor="view-commitment" numbered="true" toc="default">
      <name>Actor-View Commitment</name>
      <t>The actor proof does not carry a clear growing actor path. It carries a salted
commitment to the exact actor-visible ActorID array. Let <tt>salt32</tt> be 32 random
octets freshly generated for the transition. The commitment is:</t>
      <artwork type="text" name="" align="left" alt=""><![CDATA[b64url(SHA-256(
  ASCII("urn:ietf:params:oauth:actor-chain:view:v1") || 0x00 ||
  salt32 || 0x00 || JCS(actor_view_array)))
]]></artwork>
      <t>JCS is the JSON Canonicalization Scheme <xref target="RFC8785" format="default"/>. <tt>b64url</tt> is unpadded
base64url as defined by <xref target="RFC7515" format="default"/>. SHA-256 is fixed for this commitment
version; there is no per-workflow hash negotiation.</t>
      <t>The actor supplies an opening containing <tt>salt</tt> and <tt>act</tt> to the accepting AS
in the <tt>actor_chain_view_opening</tt> request parameter. That parameter is the
base64url encoding of the UTF-8 JCS representation of:</t>
      <artwork type="json" name="" align="left" alt=""><![CDATA[{
  "salt": "<base64url 32 octets>",
  "act": [
    { "iss": "https://actors.example/a", "sub": "A" }
  ]
}
]]></artwork>
      <t>The opening contains exactly <tt>salt</tt> and <tt>act</tt>. <tt>salt</tt> MUST decode to exactly
32 octets. <tt>act</tt> MUST be a non-empty array of valid ActorIDs in actor-visible
order. The decoded parameter MUST equal its UTF-8 JCS representation.</t>
      <t>The AS MUST validate the opening against authenticated actor identity, inbound
state, append-only processing, disclosure policy, and the proof commitment. It
MUST NOT place the opening in <tt>current</tt> evidence.</t>
    </section>
    <section anchor="step-proof" numbered="true" toc="default">
      <name>Actor Step Proof</name>
      <t>Every Verified <tt>root</tt> and <tt>extend</tt> transition creates exactly one actor step
proof. It is a compact JWS whose protected header contains exactly <tt>alg</tt>,
<tt>kid</tt>, and <tt>typ</tt>, with <tt>typ=oauth-act-step+jwt</tt>. The following example uses
<tt>ES256</tt>; permitted algorithms are defined in Section <xref target="bindings" format="default"/>:</t>
      <artwork type="json" name="" align="left" alt=""><![CDATA[{ "alg": "ES256", "kid": "<key identifier>",
  "typ": "oauth-act-step+jwt" }
]]></artwork>
      <t>The payload has version <tt>v=2</tt>. A <tt>root</tt> payload contains exactly:</t>
      <artwork type="json" name="" align="left" alt=""><![CDATA[{
  "v": 2,
  "kind": "root",
  "actp": "verified-full",
  "acti": "<workflow identifier>",
  "actor": { "iss": "https://actors.example/a", "sub": "A" },
  "sub": "<workflow subject>",
  "accepting_issuer": "https://as1.example",
  "target_context": {
    "resource": "https://api.example/",
    "scope": "read"
  },
  "view_commitment": "<base64url SHA-256>",
  "request_id": "<request-unique identifier>",
  "iat": 1786827601
}
]]></artwork>
      <t>An <tt>extend</tt> payload contains the same members with <tt>kind=extend</tt> and one
additional member:</t>
      <artwork type="json" name="" align="left" alt=""><![CDATA["prev": "<b64url SHA-256 of exact preceding compact actc>"
]]></artwork>
      <t>The actor key MUST be independently authorized for the exact ActorID in
<tt>actor</tt>. A valid signature from a key associated with another actor MUST be
rejected. The <tt>actor</tt> MUST equal the authenticated current actor; <tt>actp</tt>,
<tt>acti</tt>, and <tt>sub</tt> MUST equal accepted workflow state; <tt>accepting_issuer</tt> MUST
identify the AS processing the transition; and <tt>iat</tt> MUST be an integer
NumericDate within the AS acceptance window measured against the AS clock. A
default maximum age of 60 seconds, plus a separately configured allowance for
future clock skew, is RECOMMENDED.</t>
      <t><tt>request_id</tt> MUST be a non-empty string of at most 128 UTF-8 octets. The actor
MUST assign a fresh value to every intended <tt>root</tt> or <tt>extend</tt> transition and
MUST NOT intentionally reuse it for a different proof. The probability of an
accidental duplicate in the same accepting-issuer, ActorID, and workflow
context MUST be negligible. At least 96 bits of pseudorandom data or a UUIDv4
value is sufficient, following the equivalent identifier guidance in
<xref target="RFC9449" format="default"/>.</t>
      <t>The proof binds authorization requested by the actor. It does not require the
AS to issue that authority. The AS MAY narrow the result but MUST NOT broaden
it.</t>
    </section>
    <section anchor="acceptance" numbered="true" toc="default">
      <name>Authorization Server Acceptance</name>
      <t>After accepting a Verified actor proof, the AS creates one compact JWS <tt>actc</tt>.
Its protected header contains exactly <tt>alg</tt>, <tt>kid</tt>, and
<tt>typ=oauth-actc+jwt</tt>. Its payload has version <tt>v=2</tt>.</t>
      <t>A root acceptance contains exactly:</t>
      <artwork type="json" name="" align="left" alt=""><![CDATA[{
  "v": 2,
  "kind": "root",
  "iss": "https://as1.example",
  "acti": "<workflow identifier>",
  "actp": "verified-full",
  "step_hash": "<b64url SHA-256 of exact proof compact JWS>",
  "accepted_at": 1786827651
}
]]></artwork>
      <t>An extend acceptance additionally contains:</t>
      <artwork type="json" name="" align="left" alt=""><![CDATA["prev": "<b64url SHA-256 of exact preceding compact actc>"
]]></artwork>
      <t>The AS signature key MUST be authorized for <tt>iss</tt> at <tt>accepted_at</tt>.
<tt>step_hash</tt> is computed over the ASCII octets of the exact proof compact JWS.
For <tt>extend</tt>, <tt>prev</tt> is computed over the ASCII octets of the exact prior
compact <tt>actc</tt>. <tt>kind</tt>, <tt>acti</tt>, <tt>actp</tt>, and <tt>prev</tt> MUST equal the proof values,
and <tt>iss</tt> MUST equal the proof's <tt>accepting_issuer</tt>.</t>
      <t><tt>accepted_at</tt> MUST be the AS time at acceptance. It MUST NOT precede proof
<tt>iat</tt> by more than permitted future clock skew or exceed proof <tt>iat</tt> by more
than the configured acceptance window. A later evidence verifier checks this
signed relationship; it does not apply the original short proof-freshness
window relative to its current clock.</t>
      <t>The exact compact <tt>actc</tt> is the current chain head. There is no separately
transported <tt>curr</tt>, negotiated <tt>halg</tt>, or repeated evidence head. Re-encoding
an <tt>actc</tt> changes the artifact and therefore changes successor linkage.</t>
    </section>
    <section anchor="evidence" numbered="true" toc="default">
      <name>Evidence Envelope</name>
      <t><tt>acte</tt> is OPTIONAL in a Verified access token. Absence is integrity protected
by the token signature and means commitment-only delivery. Presence selects
one coverage and one delivery mode.</t>
      <t>An inline current envelope is:</t>
      <artwork type="json" name="" align="left" alt=""><![CDATA[{
  "v": 1,
  "coverage": "current",
  "delivery": "inline",
  "steps": [
    { "proof": "<current proof>", "acceptance": "<current actc>" }
  ]
}
]]></artwork>
      <t>Every envelope contains exactly <tt>v</tt>, <tt>coverage</tt>, <tt>delivery</tt>, and, when
expanded, <tt>steps</tt>; an introspection descriptor omits <tt>steps</tt>. A <tt>current</tt> step
contains exactly <tt>proof</tt> and <tt>acceptance</tt>, both compact JWS strings. A <tt>path</tt>
step contains exactly those members plus <tt>opening</tt> as defined in Section
<xref target="view-commitment" format="default"/>. Extra or missing members and wrong JSON types
MUST be rejected.</t>
      <t><tt>current</tt> MUST contain exactly one step. It MUST NOT contain an actor-view
opening. The step acceptance MUST equal the token's <tt>actc</tt> as an exact string.
The proof ActorID MUST be authorized for disclosure and MUST equal the
outermost current ActorID in the token's <tt>act</tt>. A Subset token carrying
<tt>current</tt> evidence therefore MUST include that actor in <tt>act</tt>; hidden
predecessors remain hidden.</t>
      <t>An inline path envelope is:</t>
      <artwork type="json" name="" align="left" alt=""><![CDATA[{
  "v": 1,
  "coverage": "path",
  "delivery": "inline",
  "steps": [
    {
      "proof": "<proof A>",
      "acceptance": "<actc A>",
      "opening": {
        "salt": "<salt A>",
        "act": [{ "iss": "https://actors.example/a", "sub": "A" }]
      }
    },
    {
      "proof": "<proof B>",
      "acceptance": "<actc B>",
      "opening": {
        "salt": "<salt B>",
        "act": [
          { "iss": "https://actors.example/a", "sub": "A" },
          { "iss": "https://actors.example/b", "sub": "B" }
        ]
      }
    }
  ]
}
]]></artwork>
      <t><tt>path</tt> MUST contain the continuous root-to-current sequence in order. Every
step MUST contain an opening, each proof and acceptance MUST verify, each
<tt>prev</tt> MUST hash the exact preceding acceptance, and the final acceptance MUST
equal token <tt>actc</tt>. The final opened actor-view array MUST equal the complete
<tt>VisibleChain(act)</tt> in the token. This version permits <tt>path</tt> only with
<tt>verified-full</tt>. Subset and Actor-Only recipients can receive <tt>current</tt>
evidence without hidden predecessors; they MUST NOT receive <tt>path</tt> under this
version. They can also receive <tt>disclosed</tt> evidence as defined below.</t>
      <section anchor="disclosed-evidence" numbered="true" toc="default">
        <name>Disclosed Actor Evidence</name>
        <t>An inline envelope for disclosed A and C is:</t>
        <artwork type="json" name="" align="left" alt=""><![CDATA[{
  "v": 2,
  "coverage": "disclosed",
  "delivery": "inline",
  "steps": [
    { "proof": "<proof A>", "acceptance": "<actc A>" },
    { "proof": "<proof C>", "acceptance": "<actc C>" }
  ]
}
]]></artwork>
        <t>Envelope version 1 permits only <tt>current</tt> and <tt>path</tt>. Envelope version 2
permits only <tt>disclosed</tt>; it does not change actor proof or acceptance version
2. A recipient MUST reject any other version/coverage combination. Support
for one combination MUST NOT imply support for another.</t>
        <t><tt>disclosed</tt> is available with any Verified profile. The token MUST include
<tt>act</tt>, and its outermost ActorID MUST be the current accepted actor. <tt>steps</tt>
MUST contain exactly one original proof/acceptance pair for each occurrence
in <tt>VisibleChain(act)</tt>, in that order. Each entry contains exactly <tt>proof</tt>
and <tt>acceptance</tt>, both compact JWS strings. Actor-view openings, hidden-actor
entries, and extra entry members MUST NOT be included. The final acceptance
MUST equal token <tt>actc</tt> exactly. Repeated ActorIDs represent separate actor
occurrences; duplicate acceptance artifacts MUST be rejected.</t>
        <t>By issuing an inline token with this envelope, the AS attests that every
selected record is an occurrence on the accepted predecessor path ending at
that exact <tt>actc</tt>, in the disclosed order. For introspection delivery, the
issuer makes the same attestation through its authorized response for the
exact token. Equality of <tt>acti</tt> alone is insufficient for AS selection.</t>
        <t>Before delivery, the issuing AS MUST establish membership and ordering from
authoritative accepted path state, authenticated preservation state from a
trusted source AS, or validated retained predecessor records. It MUST validate
each selected original proof/acceptance binding and match it to the disclosed
occurrence. Records from a sibling branch or another workflow MUST NOT be
substituted. If the AS cannot establish the association, retain the required
records, or satisfy disclosure policy over their complete contents, it MUST
reject required <tt>disclosed</tt> delivery. It MUST NOT fabricate, rewrite, or
redact an original signed record.</t>
        <t>The token signature protects the inline occurrence-to-record mapping. For
introspection, the recipient MUST use the authenticated issuer's authorized
endpoint and require the expanded evidence for that exact token. The recipient
verifies selected original signatures and acceptances; it trusts the issuer's
path-membership assertion. Gaps do not imply adjacency, missing signatures do
not imply absence, and hidden actor verification is not required. A policy
requiring independent full-path membership instead requires <tt>path</tt> with Full
disclosure. Section <xref target="disclosed-validation" format="default"/> defines recipient
validation.</t>
      </section>
      <section anchor="evidence-introspection" numbered="true" toc="default">
        <name>Introspection Delivery</name>
        <t>For introspection delivery, token <tt>acte</tt> contains only the version, coverage,
and delivery members. A <tt>current</tt> example is:</t>
        <artwork type="json" name="" align="left" alt=""><![CDATA[{ "v": 1, "coverage": "current", "delivery": "introspection" }
]]></artwork>
        <t>The authorized RFC 7662 <xref target="RFC7662" format="default"/> response for that exact token contains
<tt>active=true</tt> and an <tt>acte</tt> member containing the expanded envelope with
<tt>v</tt>, <tt>coverage</tt>, <tt>delivery</tt>, and <tt>steps</tt>.
<tt>steps</tt> uses the same schema and validation algorithm as inline delivery. An
inactive response, unauthorized caller, unavailable endpoint, mismatched
coverage, malformed evidence, or incomplete path fails the requirement.</t>
        <t>For disclosed introspection delivery, the token envelope contains exactly
<tt>v=2</tt>, <tt>coverage=disclosed</tt>, and <tt>delivery=introspection</tt>, without <tt>steps</tt>.
The active response supplies the corresponding expanded envelope using the
same selected-record schema, limits, and validation rules. Delivery does not
change the assurance model.</t>
      </section>
    </section>
    <section anchor="state-machine" numbered="true" toc="default">
      <name>Transition State Machine</name>
      <t>For Verified profiles, implementations MUST process exactly the following
transitions. Declared profiles retain the corresponding workflow transitions
without actor proofs or acceptances, as specified in Section
<xref target="declared-processing" format="default"/>.</t>
      <table align="center">
        <thead>
          <tr>
            <th align="left">Transition</th>
            <th align="left">Predecessor</th>
            <th align="left">Actor proof</th>
            <th align="left">New actc</th>
            <th align="left">State result</th>
          </tr>
        </thead>
        <tbody>
          <tr>
            <td align="left">root</td>
            <td align="left">bootstrap context</td>
            <td align="left">required</td>
            <td align="left">required</td>
            <td align="left">starts acti</td>
          </tr>
          <tr>
            <td align="left">extend</td>
            <td align="left">validated profiled token</td>
            <td align="left">required</td>
            <td align="left">required</td>
            <td align="left">appends current actor</td>
          </tr>
          <tr>
            <td align="left">preserve</td>
            <td align="left">validated protected state</td>
            <td align="left">forbidden</td>
            <td align="left">forbidden</td>
            <td align="left">exact protected state retained</td>
          </tr>
        </tbody>
      </table>
      <t>For <tt>root</tt>, the AS authenticates the actor, allocates <tt>acti</tt> and <tt>sub</tt>,
authorizes a target bound in a short-lived bootstrap context, validates the
root proof and opening, atomically reserves the replay key, durably finalizes
the exact <tt>actc</tt>, applies disclosure policy, and issues the token.</t>
      <t>For <tt>extend</tt>, the AS validates the inbound token and current <tt>actc</tt>, verifies
that the authenticated actor was an intended recipient of the inbound token,
validates the extend proof and opening, checks exact predecessor linkage and
authority narrowing, atomically reserves the replay key, appends the actor,
durably finalizes the exact new <tt>actc</tt>, applies disclosure and evidence
requirements, and issues the successor token.</t>
      <t>For <tt>preserve</tt>, the AS validates the inbound cross-domain grant, creates no
actor step, preserves protected Actor Chain state exactly, applies only
authorized identity/target translations, and issues a local token or rejects.
A preserve operation MUST NOT be represented as actor participation.</t>
    </section>
    <section anchor="exchange" numbered="true" toc="default">
      <name>Bootstrap And Token Exchange</name>
      <section anchor="verified-bootstrap" numbered="true" toc="default">
        <name>Verified Bootstrap</name>
        <t>The initial actor sends an HTTPS <tt>POST</tt> to the authenticated metadata's
<tt>actor_chain_bootstrap_endpoint</tt>. The UTF-8 request body uses
<tt>application/x-www-form-urlencoded</tt> as in RFC 6749 Appendix B <xref target="RFC6749" format="default"/>.
It contains one <tt>actor_chain_profile</tt>, one <tt>resource</tt>, and optional <tt>scope</tt>.
Repeated parameters MUST be rejected. The actor MUST authenticate using a
client-authentication method authorized by the AS for its token endpoint;
this endpoint does not introduce another actor-authentication mechanism.</t>
        <t>The AS authenticates the actor, authorizes the profile and target, allocates
<tt>acti</tt> and the workflow <tt>sub</tt>, and creates a short-lived opaque context. A
successful response uses HTTP <tt>200</tt> and <tt>application/json</tt>, with
<tt>Cache-Control: no-store</tt> and <tt>Pragma: no-cache</tt>. It contains the opaque
<tt>actor_chain_bootstrap_context</tt> string and the required
<tt>actor_chain_bootstrap_binding</tt> object. For example:</t>
        <artwork type="json" name="" align="left" alt=""><![CDATA[{
  "actor_chain_bootstrap_context": "<opaque redemption context>",
  "actor_chain_bootstrap_binding": {
    "actor": { "iss": "https://actors.example/a", "sub": "A" },
    "acti": "<workflow identifier>",
    "actp": "verified-full",
    "sub": "<workflow subject>",
    "accepting_issuer": "https://as1.example",
    "target_context": {
      "resource": "https://api.example/", "scope": "read"
    },
    "expires_in": 60
  }
}
]]></artwork>
        <t>The binding object contains exactly the members shown; <tt>target_context.scope</tt>
is optional and has the syntax defined in Section <xref target="target-scope" format="default"/>.
The context string and all identifier strings MUST be non-empty. <tt>actor</tt> is
the authenticated ActorID; <tt>actp</tt> is the requested profile;
<tt>accepting_issuer</tt> equals the authenticated metadata issuer; <tt>target_context</tt>
contains the exact resource and maximum authorized lexical scope set. For a
Verified bootstrap, that maximum MUST be a lexical subset of the bootstrap
request's scope; omitted bootstrap scope denotes the empty set.
<tt>expires_in</tt> is a positive integer lifetime in seconds from response generation;
a lifetime of at most 60 seconds is RECOMMENDED. The AS retains authoritative
expiry and binds the opaque context to every returned value and the
successful authentication. The actor MUST validate the returned identity,
profile, issuer and target before signing. Unknown top-level response members
are ignored; missing or malformed required members cause failure.</t>
        <t>The actor creates a <tt>root</tt> proof using those signable bindings and an opening
whose <tt>act</tt> array contains only its own ActorID. It requests an access token
using <tt>grant_type=client_credentials</tt>, the selected <tt>actor_chain_profile</tt>,
<tt>actor_chain_bootstrap_context</tt>, <tt>actor_chain_step_proof</tt>,
<tt>actor_chain_view_opening</tt>, one <tt>resource</tt>, and any explicitly signed <tt>scope</tt>.
It authenticates as the same actor. The proof and request resource MUST equal
the bootstrap resource exactly; requested scope MAY narrow the context's
maximum scope but MUST NOT exceed it. Omitted scope follows Section
<xref target="target-scope" format="default"/>.</t>
        <t>The AS MUST bind the request, proof, opening and context to the same actor,
profile, workflow, subject and accepting issuer, enforce the authorized target
and scope, and require first redemption before context expiry. Exact committed
retries follow Section <xref target="replay" format="default"/>, including its rules for a
consumed or expired one-time context. The bootstrap response supplies no access
token and creates no actor acceptance by itself.</t>
        <t>Authentication failures follow the applicable RFC 6749 client-authentication
error rules. Other bootstrap errors use an OAuth JSON error response and
HTTP <tt>400</tt>: <tt>invalid_request</tt> for malformed parameters or unsupported profiles,
<tt>invalid_scope</tt> for unacceptable scope, and <tt>invalid_target</tt> as defined in
RFC 8693 <xref target="RFC8693" format="default"/> for an unacceptable resource. Temporary inability to
provide authoritative state uses HTTP <tt>503</tt> as in Section <xref target="errors" format="default"/>.
Error details MUST respect disclosure policy.</t>
      </section>
      <section anchor="verified-extension" numbered="true" toc="default">
        <name>Verified Extension</name>
        <t>An actor extends a workflow by submitting at least:</t>
        <ul spacing="normal">
          <li>
            <t><tt>grant_type=urn:ietf:params:oauth:grant-type:token-exchange</tt>;</t>
          </li>
          <li>
            <t>the inbound access token as <tt>subject_token</tt>;</t>
          </li>
          <li>
            <t><tt>subject_token_type=urn:ietf:params:oauth:token-type:access_token</tt>;</t>
          </li>
          <li>
            <t>the immutable <tt>actor_chain_profile</tt>;</t>
          </li>
          <li>
            <t><tt>actor_chain_step_proof</tt>;</t>
          </li>
          <li>
            <t><tt>actor_chain_view_opening</tt>; and</t>
          </li>
          <li>
            <t>the applicable OAuth targeting and scope parameters.</t>
          </li>
        </ul>
        <t>The AS MUST perform the <tt>extend</tt> algorithm in Section
<xref target="state-machine" format="default"/>. RFC 8693
<tt>actor_token</tt>, <tt>actor_token_type</tt>, and <tt>may_act</tt> MAY contribute authorization
inputs according to their governing specifications and local policy, but MUST
NOT change Actor Chain identity, continuity, disclosure, or evidence rules.</t>
      </section>
      <section anchor="declared-processing" numbered="true" toc="default">
        <name>Declared Processing</name>
        <t>Declared profiles use the same bootstrap, target, <tt>acti</tt>, <tt>sub</tt>, disclosure,
and token-validation model, without <tt>actor_chain_step_proof</tt>,
<tt>actor_chain_view_opening</tt>, <tt>actc</tt>, or <tt>acte</tt>. The AS authenticates the current
actor, appends that actor to authoritative workflow state, applies disclosure
policy, and signs the successor token. Declared root issuance uses the same
authenticated bootstrap response and context redemption, but omits the proof
and opening. Declared tokens MUST NOT contain <tt>actc</tt> or <tt>acte</tt>. A recipient
MUST describe such state as AS-declared, not actor-verified.</t>
      </section>
    </section>
    <section anchor="disclosure" numbered="true" toc="default">
      <name>Disclosure Processing</name>
      <t>The AS is the disclosure policy decision and enforcement point. No claim,
identifier, error, evidence envelope, or auxiliary encoding may reveal more
actor-chain information than the selected profile permits.</t>
      <ul spacing="normal">
        <li>
          <t><strong>Full:</strong> <tt>act</tt> is REQUIRED and MUST equal the complete accepted actor path.</t>
        </li>
        <li>
          <t><strong>Subset:</strong> <tt>act</tt> MAY be omitted. If present, it MUST be an ordered
subsequence of the accepted actor-visible chain authorized for that
recipient. A non-contiguous subset such as <tt>[A,C]</tt> does not assert that A
directly preceded C. When <tt>current</tt> or <tt>disclosed</tt> evidence is present, <tt>act</tt> is REQUIRED
and MUST include the directly proved current actor.</t>
        </li>
        <li>
          <t><strong>Actor-Only:</strong> <tt>act</tt> is REQUIRED and MUST contain exactly the current actor.
No prior actor may be disclosed in the token or <tt>current</tt> evidence.
<tt>disclosed</tt> evidence MUST likewise contain only that current actor.</t>
        </li>
      </ul>
      <t>The current actor validates that returned disclosure does not exceed what it
was authorized to know. A recipient authorizes using only the actors actually
disclosed to it. Omission does not assert absence.</t>
      <t>The actor-view commitment prevents a transported current proof from exposing
the clear chain the actor knew. It does not conceal the current actor, target,
scope, accepting AS, workflow identifier, or timing carried in that proof.</t>
      <t>For <tt>disclosed</tt> delivery, the AS MUST apply recipient disclosure policy to
all contents of every selected signed record, including historical targets,
subject identifiers, issuers, times, and predecessor digests. Omitting an
ActorID from <tt>act</tt> does not ensure that a historical target hides the same
service. If a required record conflicts with privacy policy, issuance fails;
the AS MUST NOT silently omit that record or downgrade required coverage.</t>
    </section>
    <section anchor="resource-metadata" numbered="true" toc="default">
      <name>Protected Resource Evidence Requirements</name>
      <t>A protected resource advertises its Actor Chain evidence floor through OAuth
2.0 Protected Resource Metadata <xref target="RFC9728" format="default"/>. The provisional extension is:</t>
      <artwork type="json" name="" align="left" alt=""><![CDATA[{
  "resource": "https://api.example/",
  "authorization_servers": ["https://as.example"],
  "actor_chain_evidence_required": {
    "v": 1,
    "coverage": "current",
    "delivery": ["inline", "introspection"]
  },
  "dpop_bound_access_tokens_required": true
}
]]></artwork>
      <t>Absence of <tt>actor_chain_evidence_required</tt> means commitment-only Verified
tokens are acceptable from the perspective of this specification. Presence
requires the exact coverage and one listed delivery mode. A client preference
does not weaken this authenticated resource requirement.</t>
      <t>The <tt>v</tt> and <tt>coverage</tt> pair MUST be one defined in Section
<xref target="evidence" format="default"/>. A resource requiring the original signatures of all
disclosed actor occurrences advertises <tt>v=2</tt> and <tt>coverage=disclosed</tt>, with
its permitted delivery modes. Actor identity requirements remain authenticated
application policy; this metadata does not expose hidden actors or define a
general policy language. A recipient MUST reject missing locally required
actors or evidence. Verification by another recipient does not replace a
local requirement unless explicit local policy authorizes that trust.</t>
      <t>When a resource receives no token or an insufficient token, it MAY use the RFC
9728 <tt>WWW-Authenticate</tt> <tt>resource_metadata</tt> parameter to direct the client to
its metadata. An evidence-specific diagnostic MUST NOT become an
unauthenticated alternative source of policy and MUST NOT reveal hidden actors.</t>
      <t>A resource that bases authorization on the immediate actor being the live
presenter MUST also require sender-constrained presentation that binds the
issued token to a key controlled by that authenticated actor. DPoP <xref target="RFC9449" format="default"/>
is the concrete interoperable realization defined here: the AS binds the
current actor and proof-of-possession key during issuance, the token carries
<tt>cnf.jkt</tt>, and the resource validates the DPoP proof, access-token hash, and JWK
thumbprint <xref target="RFC7638" format="default"/>. Another standardized sender-constraining mechanism MAY
be used by agreement only when it provides an unambiguous token-to-key binding,
the AS binds that key to the same authenticated current actor, and the resource
validates possession on presentation. Client authentication or a protected
transport channel alone does not establish this property.</t>
    </section>
    <section anchor="as-metadata" numbered="true" toc="default">
      <name>Authorization Server Metadata</name>
      <t>An AS publishes the following RFC 8414 <xref target="RFC8414" format="default"/> metadata:</t>
      <artwork type="json" name="" align="left" alt=""><![CDATA[{
  "actor_chain_bootstrap_endpoint":
    "https://as.example/actor-chain/bootstrap",
  "actor_chain_capabilities": {
    "profiles": [
      "declared-full", "declared-subset", "declared-actor-only",
      "verified-full", "verified-subset", "verified-actor-only"
    ],
    "proof_versions": [
      2
    ],
    "commitment_versions": [
      2
    ],
    "evidence_versions": [
      1, 2
    ],
    "coverage": ["current", "path", "disclosed"],
    "delivery": ["inline", "introspection"],
    "limits": { "max_depth": 10, "max_inline_bytes": 32768 }
  },
  "identity_chaining_requested_token_types_supported": [
    "urn:ietf:params:oauth:token-type:actor-chain-preserve"
  ]
}
]]></artwork>
      <t><tt>actor_chain_bootstrap_endpoint</tt> is the URL of the endpoint defined in Section
<xref target="verified-bootstrap" format="default"/>. An AS supporting Actor Chain root
issuance, including Declared profiles, MUST advertise this endpoint. The
<tt>actor_chain_capabilities</tt> value is a JSON object whose members advertise the
supported profiles, artifact versions, evidence coverage and delivery modes,
and issuance limits shown above. An implementation MUST ignore unknown members
of that object unless another specification defines otherwise.</t>
      <t>Clients MUST verify the metadata <tt>issuer</tt> and MUST NOT assume an omitted
capability. The <tt>limits</tt> object is informational about advertised issuance
limits; every participant still enforces its own configured acceptance limits.</t>
      <t>An AS advertising <tt>disclosed</tt> MUST advertise evidence version 2. Version 1
support covers only advertised <tt>current</tt> and/or <tt>path</tt>; version 2 support
covers only <tt>disclosed</tt>. Clients MUST select the exact supported version and
coverage required by authenticated resource policy. A legacy version 1
implementation rejects version 2 rather than accepting reduced evidence.</t>
    </section>
    <section anchor="validation" numbered="true" toc="default">
      <name>Validation</name>
      <section anchor="common-token-validation" numbered="true" toc="default">
        <name>Common Token Validation</name>
        <t>Before Actor Chain processing, a recipient, actor, or AS MUST validate token
syntax, signature, issuer, audience, expiry, and applicable sender constraint.
It then validates <tt>actp</tt>, <tt>acti</tt>, required claims, disclosure shape, and local
resource limits. An access token signature alone does not validate a nested
proof or <tt>actc</tt>.</t>
        <t>For a Verified token, the participant MUST validate <tt>actc</tt> as a compact JWS
with the closed acceptance header and payload schema, using a key authorized
for its trusted <tt>iss</tt> at <tt>accepted_at</tt>. It MUST require acceptance <tt>acti</tt> and
<tt>actp</tt> to equal the token values, enforce the <tt>root</tt>/<tt>extend</tt> rules for <tt>prev</tt>,
and reject an <tt>accepted_at</tt> later than token <tt>iat</tt> beyond permitted clock skew.
The acceptance issuer need not equal the token issuer after preservation.
Without the actor proof, this check authenticates only the AS assertion; it
does not validate <tt>step_hash</tt>, predecessor continuity or the actor signature.
Declared tokens MUST NOT carry <tt>actc</tt> or <tt>acte</tt>.</t>
      </section>
      <section anchor="current-evidence-validation" numbered="true" toc="default">
        <name>Current Evidence Validation</name>
        <t>To validate <tt>current</tt>, a recipient MUST:</t>
        <ol spacing="normal" type="1"><li>
            <t>validate the access token and authenticated resource requirement;</t>
          </li>
          <li>
            <t>obtain the expanded evidence inline or from authorized RFC 7662
introspection of that exact token;</t>
          </li>
          <li>
            <t>require exactly one step and no opening;</t>
          </li>
          <li>
            <t>require exact equality of the step acceptance and token <tt>actc</tt>;</t>
          </li>
          <li>
            <t>take the expected ActorID from the validated token <tt>act</tt>, then validate the
proof signature using a key independently authorized for that exact ActorID
at <tt>iat</tt>;</t>
          </li>
          <li>
            <t>require the proof ActorID to equal the outermost current ActorID disclosed
in the validated token <tt>act</tt>;</t>
          </li>
          <li>
            <t>validate the acceptance signature using a key authorized for the
actor-signed <tt>accepting_issuer</tt> at <tt>accepted_at</tt>;</t>
          </li>
          <li>
            <t>require matching <tt>v</tt>, <tt>kind</tt>, <tt>acti</tt>, <tt>actp</tt>, <tt>prev</tt>, accepting issuer,
permitted <tt>iat</tt> to <tt>accepted_at</tt> relationship, and
exact <tt>step_hash</tt>;</t>
          </li>
          <li>
            <t>require proof and acceptance <tt>acti</tt> and <tt>actp</tt> to equal the token values;
require proof <tt>sub</tt> to equal token <tt>sub</tt> within one accepting-AS subject namespace, or
validate an explicitly authorized cross-domain subject mapping when aliases
differ. Preservation does not require the original acceptance issuer to
equal the issuer of the current access token;</t>
          </li>
          <li>
            <t>require <tt>target_context.resource</tt> to equal the authenticated RFC 9728
resource identifier and require token scope to be a lexical subset of proof
scope; token audience was independently validated in step 1; and</t>
          </li>
          <li>
            <t>validate sender-constrained presentation when authorization relies on the
immediate actor.</t>
          </li>
        </ol>
        <t>The result directly proves only the current actor. For <tt>extend</tt>, matching <tt>prev</tt> shows actor and AS agreement on a predecessor digest; <tt>current</tt> does not carry or verify that predecessor.</t>
      </section>
      <section anchor="path-evidence-validation" numbered="true" toc="default">
        <name>Path Evidence Validation</name>
        <t>To validate <tt>path</tt>, a recipient performs common token validation, obtains the
expanded evidence for that exact token, and then MUST:</t>
        <ol spacing="normal" type="1"><li>
            <t>require <tt>actp=verified-full</tt> and exactly one step per occurrence in the
token's non-empty <tt>VisibleChain(act)</tt>;</t>
          </li>
          <li>
            <t>require the first step to be <tt>root</tt> with no <tt>prev</tt> and its opening's
<tt>act</tt> array to contain exactly one entry, the root proof's ActorID;</t>
          </li>
          <li>
            <t>require every later step to be <tt>extend</tt> and each proof and acceptance
<tt>prev</tt> to equal SHA-256 of the exact preceding compact acceptance;</t>
          </li>
          <li>
            <t>validate every proof and acceptance using the signature, schema, and
proof/acceptance consistency checks in current validation. Match each
proof's ActorID to the corresponding <tt>VisibleChain(act)</tt> occurrence and use
that ActorID for its event-time key authorization. Historical steps are
not compared to the outermost current actor;</t>
          </li>
          <li>
            <t>validate every actor-view commitment against its opening. Each opening's
<tt>act</tt> array after the root MUST equal the preceding opening's <tt>act</tt> array
followed by exactly that step's authenticated proof ActorID;</t>
          </li>
          <li>
            <t>require the final opened array to equal the token's complete
<tt>VisibleChain(act)</tt>;</t>
          </li>
          <li>
            <t>require every proof and acceptance to carry the token's <tt>acti</tt> and <tt>actp</tt>;
require <tt>sub</tt> continuity within one accepting-AS subject namespace and an
explicitly authorized cross-domain mapping when aliases differ, including between the
final proof and the token. Such mappings are AS-mediated, not directly
actor-proven;</t>
          </li>
          <li>
            <t>validate every target context, apply the resource and scope comparison in
current validation to the final step, and do not compare different hops'
resource identifiers as if they had subset semantics;</t>
          </li>
          <li>
            <t>require the final acceptance to equal token <tt>actc</tt> exactly; and</t>
          </li>
          <li>
            <t>validate sender-constrained presentation when authorization relies on the
immediate actor.</t>
          </li>
        </ol>
        <t>Path validation proves one disclosed root-to-current accepted path. It does not
prove that no sibling path exists.</t>
      </section>
      <section anchor="disclosed-validation" numbered="true" toc="default">
        <name>Disclosed Evidence Validation</name>
        <t>To validate <tt>disclosed</tt>, a recipient MUST:</t>
        <ol spacing="normal" type="1"><li>
            <t>perform common token validation and validate the authenticated evidence
requirement, including the trusted issuer and version/coverage combination;</t>
          </li>
          <li>
            <t>obtain the exact expanded <tt>v=2</tt>, <tt>coverage=disclosed</tt> envelope inline or
from authorized introspection of that exact token;</t>
          </li>
          <li>
            <t>require a Verified profile, a non-empty <tt>act</tt>, exactly one pair per
<tt>VisibleChain(act)</tt> occurrence, no openings or extra entry members, and
all configured byte, step, signature, issuer, and key-lookup limits;</t>
          </li>
          <li>
            <t>match each proof's ActorID to the corresponding disclosed occurrence and
validate its signature with a key independently authorized for that exact
ActorID at the signed <tt>iat</tt>;</t>
          </li>
          <li>
            <t>validate each original acceptance signature with a key authorized for its
actor-signed <tt>accepting_issuer</tt> at <tt>accepted_at</tt>; check the proof and
acceptance schemas, event-time relationship, exact <tt>step_hash</tt>, and matching
<tt>kind</tt>, <tt>acti</tt>, <tt>actp</tt>, <tt>prev</tt>, and accepting issuer;</t>
          </li>
          <li>
            <t>require every selected proof and acceptance to carry the token's <tt>acti</tt>
and <tt>actp</tt>; require proof <tt>sub</tt> continuity within one accepting-AS subject
namespace and an explicitly authorized cross-domain subject mapping when
aliases differ, including between the final proof and token <tt>sub</tt>. Such
mappings are AS-mediated, not directly actor-proven;</t>
          </li>
          <li>
            <t>reject repeated acceptance artifacts and more than one selected root;
if a root is present, require it to be the first selected record. A selected
entry's predecessor need not equal the preceding disclosed acceptance:
omitted occurrences can create a gap. The recipient MUST NOT infer
adjacency or require hidden actor records;</t>
          </li>
          <li>
            <t>validate each historical target and scope's syntax without comparing
different hops' targets to the current resource. Apply current-evidence
target and scope comparisons to the final step, require its ActorID to equal
the outermost current <tt>act</tt> ActorID, and require its acceptance to equal
token <tt>actc</tt> exactly;</t>
          </li>
          <li>
            <t>accept selected-record membership and order only as the authenticated
issuer's attestation for this token and head. A valid selected signature
alone MUST NOT be treated as independent proof of path membership; and</t>
          </li>
          <li>
            <t>apply local authorization and evidence policy, and validate sender-bound
presentation when relying on the immediate actor as the live presenter.</t>
          </li>
        </ol>
        <t>Successful validation authenticates every disclosed actor's original signed
request and AS acceptance. It does not validate undisclosed actor signatures,
the complete hidden predecessor chain, original actor-view openings, absence
of sibling branches, or business approvals. Each authorized recipient may
receive a different subset and independently validate that subset.</t>
      </section>
      <section anchor="evidence-authorization" numbered="true" toc="default">
        <name>Authorization Using Disclosed Evidence</name>
        <t>A recipient recognizing this profile MAY apply configured actor conditions
to records authenticated through the top-level <tt>acte</tt> extension. It MUST
complete the relevant evidence algorithm and normal OAuth subject, audience,
scope, lifetime, and sender checks before using such records. Historical
nested <tt>act</tt> identities without the required authenticated evidence MUST NOT
be promoted to actor-verified authorization inputs. For <tt>disclosed</tt>, local
policy MUST explicitly permit issuer-attested path membership. A policy
requiring independently checked complete membership requires <tt>path</tt> and Full
disclosure instead.</t>
        <t>The recipient MUST NOT derive permission from an undisclosed actor, infer that
an omitted actor was absent, or accept a missing locally required actor merely
because another recipient may have verified it. Actor signatures authenticate
the signed protocol request; they do not grant OAuth scope, assert application
roles, or constitute approval of a business artifact. Issuance and application
policy remain responsible for those decisions. These rules define use of the
new top-level evidence extension; they do not change the informational meaning
of earlier nested <tt>act</tt> under RFC 8693.</t>
      </section>
      <section anchor="returned-token-validation" numbered="true" toc="default">
        <name>Returned-Token Validation</name>
        <t>The current actor MUST validate that the AS returned the requested <tt>actp</tt>,
preserved <tt>acti</tt> and <tt>sub</tt>, applied the selected disclosure rules, issued for
the exact proof-bound resource without broadening scope, and returned the
expected <tt>actc</tt>. If the
resource requires evidence, the actor SHOULD confirm that the returned <tt>acte</tt>
posture can satisfy that requirement before presenting the token.</t>
      </section>
    </section>
    <section anchor="cross-domain" numbered="true" toc="default">
      <name>Cross-Domain Preservation</name>
      <t>Cross-domain preservation uses OAuth Identity and Authorization Chaining
Across Domains <xref target="I-D.ietf-oauth-identity-chaining" format="default"/> rather than a parallel Actor
Chain exchange flag.</t>
      <t>The source-domain AS performs RFC 8693 Token Exchange targeted to the
destination AS and requests the provisional token type:</t>
      <artwork type="text" name="" align="left" alt=""><![CDATA[urn:ietf:params:oauth:token-type:actor-chain-preserve
]]></artwork>
      <t>The resulting JWT authorization grant is used at the destination AS as defined
by <xref target="RFC7523" format="default"/> and the Identity Chaining specification. Its ordinary JWT claims
include <tt>iss</tt>, <tt>sub</tt>, <tt>aud</tt>, <tt>iat</tt>, <tt>exp</tt>, and <tt>jti</tt>. Its Actor Chain protected
state includes exact <tt>actp</tt> and <tt>acti</tt>, plus <tt>actc</tt> and any carried <tt>acte</tt> in
Verified profiles. Declared grants MUST NOT carry <tt>actc</tt> or <tt>acte</tt>. An
introspection descriptor MUST remain unchanged; it is not expanded inside the
grant. Evidence custody needed to satisfy that descriptor MUST be established
through authorized source introspection or a separately authenticated AS-to-AS
mechanism. This specification does not define a separate custody-transfer
encoding. If the destination AS cannot obtain and serve the required evidence
for its issued token, it MUST reject preservation.</t>
      <t>Disclosure remains profile-controlled during preservation. Full and
Actor-Only <tt>act</tt> values MUST be preserved exactly. A Subset <tt>act</tt> MAY be
preserved or further narrowed to an ordered subsequence but MUST NOT be
broadened. An omitted <tt>act</tt> MUST NOT be reconstructed from hidden state.</t>
      <t>When <tt>current</tt>, <tt>disclosed</tt>, or <tt>path</tt> evidence is carried or referenced, the
corresponding <tt>act</tt> MUST be preserved exactly so that coverage and occurrence
bindings remain valid. A Subset <tt>act</tt> may be narrowed during <tt>preserve</tt> only
when no <tt>acte</tt> is carried or referenced. A later ordinary
<tt>extend</tt> can apply a different authorized Subset disclosure; <tt>preserve</tt> MUST
NOT silently filter the protected evidence or rewrite its signed records.</t>
      <t>Identity Chaining permits claims transcription. This Actor Chain token type is
a narrow profile of that behavior: the source and destination AS MUST NOT add,
remove, alter, or normalize the protected state. <tt>actp</tt>, <tt>acti</tt>, and any
carried <tt>actc</tt> require exact value equality, and every compact proof or acceptance string in
<tt>acte</tt> MUST be preserved byte-for-byte. Re-serializing the enclosing JSON does
not change those values. Ordinary identity and authorization claims MAY be
transcribed only as the enclosing protocol and local policy allow. The
destination AS MUST reject if it cannot validate and preserve the protected
state or cannot satisfy the authenticated destination resource's evidence
requirement.</t>
      <t>A preserve transition creates no proof and no acceptance. A later actor under
the destination AS performs a normal <tt>extend</tt>; its proof hashes the exact
foreign <tt>actc</tt>, and the destination AS creates one new local <tt>actc</tt>. Path
evidence therefore retains original signer provenance:</t>
      <artwork type="text" name="" align="left" alt=""><![CDATA[proof_A / actc_A  signed by A / AS1
proof_B / actc_B  signed by B / AS2
proof_C / actc_C  signed by C / AS3
]]></artwork>
      <t>An AS cannot synthesize missing historical path evidence after the relevant
proofs or openings have been discarded. If a later resource may require path
coverage, the required evidence must be retained and preserved across every
boundary. Failure is preferable to silent downgrade or privacy-violating
reconstruction.</t>
      <t>The same custody requirement applies to selected originals needed for
<tt>disclosed</tt>. An AS-to-AS exchange must establish accepted-path membership
from authenticated preserved state or retained predecessor records before a
destination AS attests a new selection. No recipient is required to receive
hidden state for this purpose. Lack of authoritative association or authorized
evidence custody causes rejection when selected evidence is required.</t>
      <t>Subject, audience, resource, or scope translation is a separate trust
boundary. Audience mappings are AS-local and are not copied into actor proofs.
A destination AS MAY use an authorized and auditable subject, target, or scope
mapping, but MUST NOT describe the mapping as actor-proven semantic
equivalence. Unknown mappings are rejected. An authorized mapping does not
relax recipient evidence validation. When direct evidence is required, the
preserved final proof MUST still satisfy the destination resource's exact
resource and lexical-scope comparisons. A mapping that cannot satisfy those
comparisons requires a fresh authorized <tt>extend</tt> and actor proof; otherwise
preservation MUST be rejected.</t>
      <t>Preservation never rewrites a historical proof's <tt>resource</tt> or <tt>scope</tt>. A
later actor may make a normal <tt>extend</tt> transition only by signing a fresh proof
over that transition's exact local resource and scope. That proof can establish
<tt>current</tt> coverage for the new actor and local values; it does not make
earlier actors' signatures attest to those local values. If the destination AS cannot authorize the transition, it
MUST reject. For a later ordinary <tt>extend</tt>, the AS MAY issue commitment-only assurance
when historical evidence is unavailable only if both the authenticated resource
requirement and local policy permit that posture; otherwise it MUST reject.
This option does not permit a <tt>preserve</tt> transition to remove or alter carried
protected <tt>acte</tt>. Inability to preserve required evidence causes rejection. Resource URIs at different hops are not required to
be equal or lexically nested.</t>
    </section>
    <section anchor="replay" numbered="true" toc="default">
      <name>Replay, Retry, And Fan-Out</name>
      <t>The accepting AS MUST enforce input-size limits and authenticate the current
requester before consulting replay state. Before reserving a previously absent
key, it MUST also complete signature, predecessor, target, authority, opening,
freshness, and other semantic checks. It then enforces atomic uniqueness of:</t>
      <artwork type="text" name="" align="left" alt=""><![CDATA[(accepting_issuer, actor.iss, actor.sub, acti, request_id)
]]></artwork>
      <t>Malformed, unauthenticated, unauthorized, or otherwise invalid input MUST NOT
consume this key. A previously absent key can be accepted only while the proof
is fresh. The AS MUST create a durable pending record binding the key to the
exact proof, or its SHA-256 <tt>step_hash</tt>, using one linearizable replay-state
operation.</t>
      <t>The AS then creates <tt>actc</tt> and atomically finalizes the record with that exact
compact artifact before returning success. A computed but uncommitted <tt>actc</tt>
MUST NOT be returned. A different proof at the same key MUST be rejected even
while the winner is pending. Identical concurrent requests MUST converge on at
most one committed <tt>actc</tt>; other workers return that artifact after commit or
fail without returning success. Crash takeover MUST fence stale workers so
they cannot finalize or emit a different result.</t>
      <t>An exact retry matched by a retained committed record is idempotent and reuses
the exact stored <tt>actc</tt>; it does not create a new acceptance. The AS MAY rely
on the committed record for an originally valid one-time bootstrap context or
grant that the first request consumed. It SHOULD return the original success
response. If it instead issues a new token carrying the same Actor Chain state,
the token MUST NOT have broader authority, evidence, or an authorization
horizon later than the original response. The AS MUST still authenticate the
current request and apply current token-issuance, target, sender-constraint,
disclosure, evidence, and authorization policy. Failure of a current check
rejects the request without changing the committed record. Because no new
acceptance occurs, the original proof need not remain fresh at retry time.</t>
      <t>Replay state MUST be durable and linearizable across the AS deployment. After
success has been returned, failover MUST NOT expose state older than that
commit. A node that cannot consult or durably update authoritative replay state
during partition or failover MUST NOT return success.</t>
      <t>The AS MUST retain the key, proof-match value, exact <tt>actc</tt>, and the response
state needed to enforce the preceding retry limits through the later of the
proof acceptance interval, including clock-skew allowance, and the
deployment's maximum supported exact-retry delay measured from first
acceptance. Retention MUST NOT slide on retry. The supported retry delay SHOULD
be at least the proof acceptance window plus permitted clock skew. After this
state expires, idempotent retry is no longer guaranteed and ordinary proof
freshness still applies. Implementations MAY store fixed-length cryptographic
hashes of replay identifiers to bound storage and reduce raw identifier
exposure.</t>
      <t>Distinct <tt>request_id</tt> values MAY create authorized fan-out from one
predecessor. The accepting issuer scopes the replay domain: each AS enforces
the rule for actor transitions it accepts, while <tt>preserve</tt> creates no actor
proof and no Actor Chain transition replay record. Replay handling for the
enclosing grant remains governed by its applicable specifications. This
document does not define branch merging,
sibling enumeration, or proof of branch uniqueness.</t>
    </section>
    <section anchor="errors" numbered="true" toc="default">
      <name>Error And Challenge Handling</name>
      <t>Token endpoint errors use OAuth <xref target="RFC6749" format="default"/> and RFC 8693 <xref target="RFC8693" format="default"/>
error values. This table classifies Actor Chain failures; ordinary OAuth
failures retain the errors defined by their governing specifications.</t>
      <table align="center">
        <thead>
          <tr>
            <th align="left">Error</th>
            <th align="left">Actor Chain condition</th>
          </tr>
        </thead>
        <tbody>
          <tr>
            <td align="left">invalid_request</td>
            <td align="left">malformed Actor Chain parameter or object, unsupported version or type, duplicate JSON member, forbidden profile/transition combination, or configured pre-parsing size limit exceeded</td>
          </tr>
          <tr>
            <td align="left">invalid_target</td>
            <td align="left">unacceptable resource, unavailable target mapping, or inability to satisfy that resource's authenticated evidence or sender-constraint requirement</td>
          </tr>
          <tr>
            <td align="left">invalid_scope</td>
            <td align="left">requested scope is invalid, unknown, malformed, or not a lexical subset of the accepted actor-authorized scope</td>
          </tr>
          <tr>
            <td align="left">invalid_grant</td>
            <td align="left">subject or actor token, bootstrap context, proof, opening, acceptance, predecessor, conflicting replay-key use, disclosure, preserve binding, or actor/sender key validation failure</td>
          </tr>
        </tbody>
      </table>
      <t>Loss of authoritative replay state is not evidence that a grant is invalid.
If the AS cannot consult or durably update that state, or cannot determine
whether an identical pending request committed within its bounded wait, it
MUST return HTTP <tt>503</tt> (Service Unavailable) <xref target="RFC9110" format="default"/> and MUST NOT return
success or <tt>invalid_grant</tt>. It SHOULD include <tt>Retry-After</tt>. The external
response MUST NOT reveal whether the replay key is absent, pending, or
committed. No Actor Chain-specific OAuth error value is defined for this
condition.</t>
      <t>After such a <tt>503</tt>, the requester SHOULD retry the exact token request after
the indicated delay. The compact proof and its signed <tt>request_id</tt> MUST remain
unchanged. A new <tt>request_id</tt> requires a fresh actor proof and represents a
distinct transition that can create authorized fan-out; it MUST NOT be used
merely to recover an uncertain result. If the first request committed, the
exact retry returns the retained success as specified in Section
<xref target="replay" format="default"/>. If it did not commit, ordinary proof freshness still
applies.</t>
      <t>A protected resource uses the applicable token authentication scheme and the
RFC 9728 <tt>resource_metadata</tt> challenge parameter to point to its authoritative
metadata. A request without a token uses HTTP <tt>401</tt> and omits an OAuth error as
required by RFC 6750 <xref target="RFC6750" format="default"/>. A presented token whose Actor Chain evidence
is absent, weaker than required, malformed, or invalid uses the generic
<tt>invalid_token</tt> error and HTTP <tt>401</tt>; the challenge SHOULD include
<tt>resource_metadata</tt> and SHOULD omit <tt>error_description</tt>. Ordinary OAuth scope
insufficiency remains <tt>insufficient_scope</tt> with HTTP <tt>403</tt>; Actor Chain
evidence posture MUST NOT be mislabeled as scope.</t>
      <t>For example:</t>
      <artwork type="text" name="" align="left" alt=""><![CDATA[HTTP/1.1 401 Unauthorized
WWW-Authenticate: Bearer error="invalid_token",
  resource_metadata="https://r.example/m"
]]></artwork>
      <t>If the resource cannot validate required evidence because an introspection,
key/status, or authenticated-metadata dependency is temporarily unavailable,
it MUST fail closed with HTTP <tt>503</tt>, SHOULD include <tt>Retry-After</tt>, MUST NOT
label the token <tt>invalid_token</tt>, and MUST NOT downgrade the evidence
requirement. The presenter SHOULD retry the same token after the indicated
delay.</t>
      <t>An insufficient-evidence challenge can lead the presenter to initiate a fresh
exchange. The AS does not mutate or upgrade the rejected token; it issues a
new token only after revalidating authority, evidence availability, disclosure
authorization, and resource limits.</t>
      <t>Error bodies and logs MUST NOT reveal hidden actors, openings, proofs, keys, or
policy details beyond the requesting party's authorized disclosure. They also
MUST NOT reveal which hidden step failed, whether historical evidence exists,
or whether replay state was absent, pending, or committed.</t>
    </section>
    <section anchor="limits" numbered="true" toc="default">
      <name>Resource Limits</name>
      <t>Implementations MUST enforce configured byte limits before deep parsing,
cryptographic work, decompression, or external retrieval. They MUST also bound
chain depth, evidence steps, protected-header bytes, signatures, distinct
issuers, key lookups, redirects, introspection response bytes, and network
time.</t>
      <t>The following defaults are RECOMMENDED starting points, not universal
transport guarantees:</t>
      <table align="center">
        <thead>
          <tr>
            <th align="left">Limit</th>
            <th align="right">Default</th>
          </tr>
        </thead>
        <tbody>
          <tr>
            <td align="left">Actor path depth</td>
            <td align="right">10</td>
          </tr>
          <tr>
            <td align="left">One compact Actor Chain JWT/JWS</td>
            <td align="right">32768 bytes</td>
          </tr>
          <tr>
            <td align="left">Inline Actor Chain access token</td>
            <td align="right">32768 bytes</td>
          </tr>
          <tr>
            <td align="left">Evidence steps</td>
            <td align="right">10</td>
          </tr>
          <tr>
            <td align="left">Nested proof and acceptance signatures</td>
            <td align="right">20</td>
          </tr>
          <tr>
            <td align="left">Distinct nested signing authorities</td>
            <td align="right">20</td>
          </tr>
          <tr>
            <td align="left">Nested evidence key selections</td>
            <td align="right">20</td>
          </tr>
          <tr>
            <td align="left">One decoded protected header</td>
            <td align="right">1024 bytes</td>
          </tr>
          <tr>
            <td align="left">request_id</td>
            <td align="right">128 UTF-8 octets</td>
          </tr>
          <tr>
            <td align="left">Expanded introspection acte object</td>
            <td align="right">32768 bytes</td>
          </tr>
        </tbody>
      </table>
      <t>Local policy MAY use lower limits. Exceeding a limit fails profile processing.
Signature and key-selection limits count nested actor proofs and AS
acceptances; ordinary token and sender-constraint validation are separate
OAuth work. Depth 10 therefore requires 20 nested verifications plus the token
signature. Twenty authorities allow every nested signer to differ without
increasing that work budget.</t>
      <t>The 32768-byte ceiling applies both to inline tokens and expanded introspection
<tt>acte</tt>; the entire HTTP message is independently bounded. One validation
attempt MUST NOT make more than one Actor Chain introspection request. Signed
targets are never dereferenced. Key and metadata retrieval use authenticated or
preconfigured endpoints, bounded issuer caches, local redirect and timeout
policy, and the fail-closed behavior in Section <xref target="errors" format="default"/>.</t>
      <t>The measured depth-10 Full-path fixture is 23673 bytes inline and 16303 bytes
expanded. These sizes are illustrative; actual sizes depend on identifiers,
scopes and encoding and MUST satisfy configured limits. <tt>actc</tt> and <tt>current</tt> overhead remain
approximately constant for fixed identifier and scope sizes. Full disclosure
and the number of path signatures grow linearly with depth. Because each
path opening repeats the growing actor-view array, aggregate opening size
and processing grow quadratically.</t>
      <t>Disclosed evidence work grows with the number of disclosed occurrences, not
with hidden steps. The existing limits apply to it unchanged. The quoted
measurements describe the preceding Full-path fixture, not a measurement of
this newly specified coverage mode.</t>
    </section>
    <section anchor="bindings" numbered="true" toc="default">
      <name>JWT, JWS, And Introspection Binding</name>
      <t>JWT access tokens SHOULD use <tt>typ=at+jwt</tt>. Actor proofs use
<tt>typ=oauth-act-step+jwt</tt>; AS acceptances use <tt>typ=oauth-actc+jwt</tt>; preserve
grants use <tt>typ=oauth-act-preserve+jwt</tt>.</t>
      <t>For Actor Chain proof, acceptance, and preserve JWS objects, the protected
header contains exactly <tt>alg</tt>, <tt>kid</tt>, and <tt>typ</tt>. Implementations of this
specification MUST implement <tt>ES256</tt> <xref target="RFC7518" format="default"/>. Producers MUST use <tt>ES256</tt>
unless support for another algorithm has been established for every intended
verifier through authenticated metadata, configuration, or prior agreement.
Any additional algorithm MUST be a registered, fully specified asymmetric
signature algorithm <xref target="RFC9864" format="default"/> that is allowed by current verifier policy.
The deprecated polymorphic <tt>EdDSA</tt> identifier, <tt>alg=none</tt>, and symmetric
algorithms MUST NOT be accepted. This version's interoperability vectors use
<tt>ES256</tt>.</t>
      <t>Before processing a signature, the verifier MUST fix the allowed algorithm set
for that <tt>typ</tt>; an attacker-controlled <tt>alg</tt> value cannot enlarge it. Each
trusted key record MUST bind the key to exactly one algorithm, signer identity,
and permitted Actor Chain artifact type. The JWS <tt>alg</tt>, key type, curve or
parameters, and any JWK <tt>alg</tt>, <tt>use</tt>, or <tt>key_ops</tt> restrictions MUST agree.
Implementations MUST use mutually exclusive validation rules for each <tt>typ</tt> as
required by <xref target="RFC8725" format="default"/>.</t>
      <t><tt>kid</tt> is a lookup hint within an issuer-qualified trust namespace, not a global
identity or trust assertion. A verifier resolves the tuple of expected signer,
<tt>kid</tt>, <tt>alg</tt>, <tt>typ</tt>, and applicable event time and MUST reject no match or an
ambiguous match. A key's presence in a JWKS alone does not authorize an ActorID
or AS to sign that artifact type. Signers MUST NOT reuse a <tt>kid</tt> for another
key or signer within the period in which an artifact under the prior key can be
accepted. The closed header excludes attacker-selected key URLs. Network key
resolution MUST use only preconfigured or authenticated issuer metadata and
MUST be bounded and cached by issuer; a verifier MUST NOT dereference an
untrusted issuer or header value.</t>
      <t>The closed protected-header set is intentional for proof and acceptance
version 2. An additional protected header, including <tt>crit</tt>, requires a future
version or an update to this specification; it MUST NOT be silently accepted by
a version 2 parser. This rule prevents unreviewed key-selection or processing
semantics from entering the signed-artifact contract.</t>
      <t>Proof and acceptance payloads use ordinary UTF-8 JSON. Their linkage hashes
the exact compact JWS strings and therefore does not require whole-payload JCS.
JCS is used for actor-view commitments and the serialized opening request
parameter. JWK thumbprints use the member-selection and serialization rules
of <xref target="RFC7638" format="default"/>. Parsers MUST reject duplicate members, malformed UTF-8,
base64url padding, unknown payload members, wrong JSON types, non-integer
NumericDate values, and unsupported versions before semantic acceptance.</t>
      <t>An RFC 7662 introspection endpoint returning Actor Chain evidence MUST:</t>
      <ul spacing="normal">
        <li>
          <t>authenticate and authorize the caller for the resource and requested
evidence;</t>
        </li>
        <li>
          <t>process the exact presented token;</t>
        </li>
        <li>
          <t>return only evidence the caller is permitted to learn;</t>
        </li>
        <li>
          <t>return <tt>active=false</tt> without evidence when the token is inactive or the
authenticated caller is not authorized to learn state about that token;</t>
        </li>
        <li>
          <t>apply the same limits and validation rules as inline evidence; and</t>
        </li>
        <li>
          <t>prevent cached evidence from outliving applicable token, revocation, privacy,
or key-status constraints.</t>
        </li>
      </ul>
      <t>Invalid caller credentials or insufficient endpoint privileges use the
applicable RFC 7662 authentication error, rather than an <tt>active=false</tt>
response. An authorized query for a token the caller is not permitted to
inspect returns <tt>active=false</tt> without evidence.</t>
      <t>Availability and latency of introspection are deployment properties. A
resource requiring introspection delivery fails closed when it cannot obtain a
valid response.</t>
    </section>
    <section anchor="security-considerations" numbered="true" toc="default">
      <name>Security Considerations</name>
      <section anchor="assurance-boundaries" numbered="true" toc="default">
        <name>Assurance Boundaries</name>
        <t>A valid <tt>actc</tt> authenticates the AS's assertion that it accepted the referenced
actor proof and, for an <tt>extend</tt> transition, predecessor. Without the proof,
it does not provide direct actor verification. <tt>current</tt> provides
direct verification of the latest proof. <tt>path</tt> provides direct verification
of all disclosed proofs and original AS acceptances on one path.</t>
        <t><tt>disclosed</tt> authenticates the original signatures and acceptances of the
disclosed occurrences, while trusting the issuer's selected-record membership
and order. A malicious issuer can misstate that association, including by
substituting valid records from another branch with the same <tt>acti</tt>. The
recipient's scope, target, current-head, subject, and original-signature checks
still apply, but do not independently prove historical membership across gaps.
This accepted trust boundary is distinct from forgery of an actor signature.</t>
        <t>With an uncompromised actor key and an independently authorized ActorID
binding, validation of the actor signature and exact proof-to-acceptance
linkage prevents an AS from fabricating that actor's signed request. This
does not independently establish path membership across omitted steps. An
AS can still mint other tokens, misapply policy, collude with an actor, or lie
about facts outside the signed proof.</t>
      </section>
      <section anchor="key-history-and-compromise" numbered="true" toc="default">
        <name>Key History And Compromise</name>
        <t>Rotation does not change an existing proof, acceptance, or predecessor hash,
and different steps MAY use different allowed algorithms. Direct verification
still requires issuer-qualified key authorization at the signed event time.
For as long as an artifact can be accepted, the signer or deployment MUST make
available the exact public key and its signer binding, single allowed
algorithm, artifact use, validity interval, status chronology, trust anchor,
and metadata version. Removing a rotated key from the current JWKS, or retaining
only its <tt>kid</tt>, is insufficient. If this historical context is unavailable and
direct evidence is required, validation fails closed.</t>
        <t>On suspected compromise, the signer MUST stop using the key and verifiers MUST
apply a consistent locally established cutoff. <tt>iat</tt> and <tt>accepted_at</tt> are
signed assertions, not trusted proof that an artifact predates compromise: a
compromised key can backdate a new artifact. A deployment needing that stronger
claim requires an independently trustworthy timestamp or acceptance record.
Absent such evidence, policy may reject every artifact under the compromised
key. Event-time algorithm policy may support audit interpretation, but it MUST
NOT override a current prohibition on an unsafe algorithm.</t>
      </section>
      <section anchor="evidence-custody-and-disappearance" numbered="true" toc="default">
        <name>Evidence Custody And Disappearance</name>
        <t>Inline evidence can survive later refusal, outage, record loss, or
organizational disappearance if an authorized party retains the token and key
history. Introspection reduces request size and disclosure but introduces a
live service dependency. A digest cannot reconstruct a lost proof.</t>
        <t>Deployments promising post-expiry verification MUST retain or export exact
evidence and historical trust context, preferably across independent failure
domains. They MUST NOT describe commitment continuity alone as durable direct
actor verification.</t>
      </section>
      <section anchor="target-scope-and-mix-up" numbered="true" toc="default">
        <name>Target, Scope, And Mix-Up</name>
        <t>The actor proof, AS acceptance, issued token, and protected-resource identity
form one target-consistency boundary. Implementations fail closed on accepting
AS substitution, exact-resource mismatch, audience failure, scope widening,
predecessor substitution, profile change, or final-acceptance mismatch. URI
aliases that happen to locate the same service are not equal identifiers for
this purpose. Target strings in proofs are untrusted data for network-access
purposes and MUST NOT drive metadata or content retrieval.</t>
        <t>Resource identifiers can reveal service, tenant, path, or query information to
every party receiving direct evidence. Deployments SHOULD use the least
specific stable identifier that still prevents cross-resource or cross-tenant
confusion and SHOULD avoid query components carrying user, session, or business
data.</t>
      </section>
      <section anchor="sender-constraint" numbered="true" toc="default">
        <name>Sender Constraint</name>
        <t>Actor evidence says which actor signed an authorization transition. It does not
show that the entity now presenting the token controls that actor's live key.
Recipients relying on the immediate actor as the live presenter require
sender-constrained presentation and validate the binding independently.</t>
      </section>
      <section anchor="replay-state-and-availability" numbered="true" toc="default">
        <name>Replay State And Availability</name>
        <t>Replay atomicity is a safety property across the whole accepting-AS
deployment, not a best-effort cache check. If two partitions independently
accept the same replay key, they can create divergent validly signed <tt>actc</tt>
artifacts. The fail-closed rule therefore trades token-endpoint availability
for unambiguous acceptance during loss of authoritative state. Fencing and
durable commit prevent a crashed or stale worker from releasing a second
result after takeover. These controls do not prove absence of sibling branches
created with different request identifiers.</t>
      </section>
      <section anchor="parser-and-resource-exhaustion" numbered="true" toc="default">
        <name>Parser And Resource Exhaustion</name>
        <t>Path evidence allows attacker-controlled collections of signatures, issuers,
and lookup identifiers. Strict parsing, pre-crypto byte limits, bounded work,
and rejection of unsupported structures are security requirements, not merely
performance optimizations.</t>
      </section>
      <section anchor="residual-non-claims" numbered="true" toc="default">
        <name>Residual Non-Claims</name>
        <t>Actor Chain does not prove application execution, payload safety, human intent,
legal non-repudiation, correctness of authorization policy, absence of hidden
branches, or absence of off-protocol activity. Recipients still perform normal
OAuth authorization and application validation.</t>
      </section>
    </section>
    <section anchor="privacy" numbered="true" toc="default">
      <name>Privacy Considerations</name>
      <t>Full path evidence reveals actors, organizations, order, targets, timing, and
stable workflow correlation. It is therefore optional and restricted to Full
disclosure in this version. A resource and AS SHOULD select the minimum
evidence satisfying the resource's authenticated requirement.</t>
      <t><tt>current</tt> evidence contains no actor-view opening and is compatible with
Subset and Actor-Only disclosure. It still reveals the current actor, accepting
AS, workflow identifier, target, scope, and time. <tt>acti</tt> MUST be opaque and
workflow-local. Actor and subject identifiers SHOULD be pairwise or
pseudonymous where possible.</t>
      <t>The AS observes the authenticated actor and opening even when the recipient
does not. Evidence stores, replay records, and introspection services therefore
concentrate sensitive relationship and correlation data. Operators MUST
enforce purpose-limited access, encryption, retention limits, disclosure
logging, and audience filtering. Replay records SHOULD be removed when their
required retention ends. Replication for availability MUST NOT silently
broaden disclosure.</t>
      <t>A Subset sequence is an ordered subsequence, not proof of adjacency or complete
history. Recipients MUST treat omitted actors as unknown. Selective-disclosure
or encrypted overlays MAY be used by agreement but MUST preserve the base
profile's semantics and must not weaken validation <xref target="RFC9901" format="default"/>.</t>
      <t><tt>disclosed</tt> omits actor-view openings but can reveal historical targets, AS
identities, subject aliases, times, and linkable digests. It promises only the
disclosure permitted by the complete-record policy check, not anonymity of
every omitted service. Existing plain JWS records cannot be selectively
redacted. A future SD-JWT proof profile would need its own artifact and hashing
contract; this version reuses original compact JWS records unchanged.</t>
    </section>
    <section anchor="iana" numbered="true" toc="default">
      <name>IANA Considerations</name>
      <t>This document requests the registrations below. The Change Controller for all
of them is the IETF.</t>
      <section anchor="json-web-token-claims-registry" numbered="true" toc="default">
        <name>JSON Web Token Claims Registry</name>
        <t>IANA is requested to register the following claims in the "JSON Web Token
Claims" registry established by <xref target="RFC7519" format="default"/>.</t>
        <table align="center">
          <thead>
            <tr>
              <th align="left">Claim Name</th>
              <th align="left">Claim Description</th>
              <th align="left">Change Controller</th>
              <th align="left">Reference</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">actp</td>
              <td align="left">Actor Chain profile identifier</td>
              <td align="left">IETF</td>
              <td align="left">Section <xref target="profiles" format="default"/></td>
            </tr>
            <tr>
              <td align="left">acti</td>
              <td align="left">Actor Chain workflow identifier</td>
              <td align="left">IETF</td>
              <td align="left">Section <xref target="data-model" format="default"/></td>
            </tr>
            <tr>
              <td align="left">actc</td>
              <td align="left">Current AS-signed Actor Chain acceptance</td>
              <td align="left">IETF</td>
              <td align="left">Section <xref target="acceptance" format="default"/></td>
            </tr>
            <tr>
              <td align="left">acte</td>
              <td align="left">Actor Chain evidence envelope</td>
              <td align="left">IETF</td>
              <td align="left">Section <xref target="evidence" format="default"/></td>
            </tr>
          </tbody>
        </table>
      </section>
      <section anchor="oauth-parameters-registry" numbered="true" toc="default">
        <name>OAuth Parameters Registry</name>
        <t>IANA is requested to register the following parameters in the "OAuth
Parameters" registry established by <xref target="RFC6749" format="default"/>.</t>
        <table align="center">
          <thead>
            <tr>
              <th align="left">Name</th>
              <th align="left">Parameter Usage Location</th>
              <th align="left">Change Controller</th>
              <th align="left">Reference</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">actor_chain_profile</td>
              <td align="left">Actor Chain bootstrap request, token request</td>
              <td align="left">IETF</td>
              <td align="left">Section <xref target="exchange" format="default"/></td>
            </tr>
            <tr>
              <td align="left">actor_chain_bootstrap_context</td>
              <td align="left">Actor Chain bootstrap response, token request</td>
              <td align="left">IETF</td>
              <td align="left">Section <xref target="verified-bootstrap" format="default"/></td>
            </tr>
            <tr>
              <td align="left">actor_chain_bootstrap_binding</td>
              <td align="left">Actor Chain bootstrap response</td>
              <td align="left">IETF</td>
              <td align="left">Section <xref target="verified-bootstrap" format="default"/></td>
            </tr>
            <tr>
              <td align="left">actor_chain_step_proof</td>
              <td align="left">token request</td>
              <td align="left">IETF</td>
              <td align="left">Section <xref target="exchange" format="default"/></td>
            </tr>
            <tr>
              <td align="left">actor_chain_view_opening</td>
              <td align="left">token request</td>
              <td align="left">IETF</td>
              <td align="left">Sections <xref target="view-commitment" format="default"/> and <xref target="exchange" format="default"/></td>
            </tr>
          </tbody>
        </table>
      </section>
      <section anchor="oauth-authorization-server-metadata-registry" numbered="true" toc="default">
        <name>OAuth Authorization Server Metadata Registry</name>
        <t>IANA is requested to register the following metadata parameters in the "OAuth
Authorization Server Metadata" registry established by <xref target="RFC8414" format="default"/>.</t>
        <t>For <tt>actor_chain_bootstrap_endpoint</tt>:</t>
        <ul spacing="normal">
          <li>
            <t>Metadata Name: <tt>actor_chain_bootstrap_endpoint</tt></t>
          </li>
          <li>
            <t>Metadata Description: URL of the authorization server's Actor Chain
bootstrap endpoint</t>
          </li>
          <li>
            <t>Change Controller: IETF</t>
          </li>
          <li>
            <t>Specification Document(s): Section <xref target="as-metadata" format="default"/> of this
document</t>
          </li>
        </ul>
        <t>For <tt>actor_chain_capabilities</tt>:</t>
        <ul spacing="normal">
          <li>
            <t>Metadata Name: <tt>actor_chain_capabilities</tt></t>
          </li>
          <li>
            <t>Metadata Description: JSON object describing the authorization server's
supported Actor Chain profiles, artifact versions, evidence modes, and
issuance limits</t>
          </li>
          <li>
            <t>Change Controller: IETF</t>
          </li>
          <li>
            <t>Specification Document(s): Section <xref target="as-metadata" format="default"/> of this
document</t>
          </li>
        </ul>
        <t>The Identity Chaining specification, rather than this document, registers
<tt>identity_chaining_requested_token_types_supported</tt>.</t>
      </section>
      <section anchor="oauth-protected-resource-metadata-registry" numbered="true" toc="default">
        <name>OAuth Protected Resource Metadata Registry</name>
        <t>IANA is requested to register the following metadata parameter in the "OAuth
Protected Resource Metadata" registry established by <xref target="RFC9728" format="default"/>.</t>
        <ul spacing="normal">
          <li>
            <t>Metadata Name: <tt>actor_chain_evidence_required</tt></t>
          </li>
          <li>
            <t>Metadata Description: JSON object describing the Actor Chain evidence
coverage and delivery modes required by the protected resource</t>
          </li>
          <li>
            <t>Change Controller: IETF</t>
          </li>
          <li>
            <t>Specification Document(s): Section <xref target="resource-metadata" format="default"/> of this
document</t>
          </li>
        </ul>
      </section>
      <section anchor="oauth-token-introspection-response-registry" numbered="true" toc="default">
        <name>OAuth Token Introspection Response Registry</name>
        <t>IANA is requested to register the following members in the "OAuth Token
Introspection Response" registry established by <xref target="RFC7662" format="default"/>. These names have
the same semantics whether carried in a JWT access token or returned by an
authorized introspection response.</t>
        <table align="center">
          <thead>
            <tr>
              <th align="left">Name</th>
              <th align="left">Description</th>
              <th align="left">Change Controller</th>
              <th align="left">Reference</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">actp</td>
              <td align="left">Actor Chain profile identifier</td>
              <td align="left">IETF</td>
              <td align="left">Section <xref target="profiles" format="default"/></td>
            </tr>
            <tr>
              <td align="left">acti</td>
              <td align="left">Actor Chain workflow identifier</td>
              <td align="left">IETF</td>
              <td align="left">Section <xref target="data-model" format="default"/></td>
            </tr>
            <tr>
              <td align="left">actc</td>
              <td align="left">Current AS-signed Actor Chain acceptance</td>
              <td align="left">IETF</td>
              <td align="left">Section <xref target="acceptance" format="default"/></td>
            </tr>
            <tr>
              <td align="left">acte</td>
              <td align="left">Actor Chain evidence envelope</td>
              <td align="left">IETF</td>
              <td align="left">Sections <xref target="evidence" format="default"/> and <xref target="bindings" format="default"/></td>
            </tr>
          </tbody>
        </table>
      </section>
      <section anchor="oauth-uri-registry" numbered="true" toc="default">
        <name>OAuth URI Registry</name>
        <t>IANA is requested to register the following value in the "OAuth URI" registry
established by <xref target="RFC6755" format="default"/>:</t>
        <ul spacing="normal">
          <li>
            <t>URN: <tt>urn:ietf:params:oauth:token-type:actor-chain-preserve</tt></t>
          </li>
          <li>
            <t>Common Name: Actor Chain Preserve Token Type</t>
          </li>
          <li>
            <t>Change Controller: IETF</t>
          </li>
          <li>
            <t>Specification Document(s): Section <xref target="cross-domain" format="default"/> of this
document</t>
          </li>
        </ul>
      </section>
      <section anchor="media-types-registry" numbered="true" toc="default">
        <name>Media Types Registry</name>
        <t>The following registrations use the standards tree and the template defined by
<xref target="RFC6838" format="default"/>. The subtype, without the <tt>application/</tt> prefix, is also the
required <tt>typ</tt> value defined in Section <xref target="bindings" format="default"/>.</t>
        <t><strong>Media type: <tt>application/oauth-act-step+jwt</tt></strong></t>
        <ul spacing="normal">
          <li>
            <t>Type name: application</t>
          </li>
          <li>
            <t>Subtype name: oauth-act-step+jwt</t>
          </li>
          <li>
            <t>Required parameters: N/A</t>
          </li>
          <li>
            <t>Optional parameters: N/A</t>
          </li>
          <li>
            <t>Encoding considerations: binary; an Actor Chain step proof is a JWS Compact
Serialization consisting of base64url-encoded protected header, payload,
and signature segments separated by period (<tt>.</tt>) characters</t>
          </li>
          <li>
            <t>Security considerations: Section <xref target="security-considerations" format="default"/></t>
          </li>
          <li>
            <t>Interoperability considerations: N/A</t>
          </li>
          <li>
            <t>Published specification: Section <xref target="step-proof" format="default"/> of this document</t>
          </li>
          <li>
            <t>Applications that use this media type: applications producing or validating
Actor Chain step proofs</t>
          </li>
          <li>
            <t>Fragment identifier considerations: N/A</t>
          </li>
          <li>
            <t>Additional information:
</t>
            <ul spacing="normal">
              <li>
                <t>Deprecated alias names for this type: N/A</t>
              </li>
              <li>
                <t>Magic number(s): N/A</t>
              </li>
              <li>
                <t>File extension(s): N/A</t>
              </li>
              <li>
                <t>Macintosh file type code(s): N/A</t>
              </li>
            </ul>
          </li>
          <li>
            <t>Person &amp; email address to contact for further information: A. Prasad,
ap1729@gmail.com</t>
          </li>
          <li>
            <t>Intended usage: COMMON</t>
          </li>
          <li>
            <t>Restrictions on usage: N/A</t>
          </li>
          <li>
            <t>Author: A. Prasad, R. Krishnan, D. R. Lopez, and S. Addepalli</t>
          </li>
          <li>
            <t>Change controller: IETF</t>
          </li>
          <li>
            <t>Provisional registration? (standards tree only): No</t>
          </li>
        </ul>
        <t><strong>Media type: <tt>application/oauth-actc+jwt</tt></strong></t>
        <ul spacing="normal">
          <li>
            <t>Type name: application</t>
          </li>
          <li>
            <t>Subtype name: oauth-actc+jwt</t>
          </li>
          <li>
            <t>Required parameters: N/A</t>
          </li>
          <li>
            <t>Optional parameters: N/A</t>
          </li>
          <li>
            <t>Encoding considerations: binary; an Actor Chain acceptance is a JWS Compact
Serialization consisting of base64url-encoded protected header, payload,
and signature segments separated by period (<tt>.</tt>) characters</t>
          </li>
          <li>
            <t>Security considerations: Section <xref target="security-considerations" format="default"/></t>
          </li>
          <li>
            <t>Interoperability considerations: N/A</t>
          </li>
          <li>
            <t>Published specification: Section <xref target="acceptance" format="default"/> of this document</t>
          </li>
          <li>
            <t>Applications that use this media type: applications producing or validating
Actor Chain authorization server acceptances</t>
          </li>
          <li>
            <t>Fragment identifier considerations: N/A</t>
          </li>
          <li>
            <t>Additional information:
</t>
            <ul spacing="normal">
              <li>
                <t>Deprecated alias names for this type: N/A</t>
              </li>
              <li>
                <t>Magic number(s): N/A</t>
              </li>
              <li>
                <t>File extension(s): N/A</t>
              </li>
              <li>
                <t>Macintosh file type code(s): N/A</t>
              </li>
            </ul>
          </li>
          <li>
            <t>Person &amp; email address to contact for further information: A. Prasad,
ap1729@gmail.com</t>
          </li>
          <li>
            <t>Intended usage: COMMON</t>
          </li>
          <li>
            <t>Restrictions on usage: N/A</t>
          </li>
          <li>
            <t>Author: A. Prasad, R. Krishnan, D. R. Lopez, and S. Addepalli</t>
          </li>
          <li>
            <t>Change controller: IETF</t>
          </li>
          <li>
            <t>Provisional registration? (standards tree only): No</t>
          </li>
        </ul>
        <t><strong>Media type: <tt>application/oauth-act-preserve+jwt</tt></strong></t>
        <ul spacing="normal">
          <li>
            <t>Type name: application</t>
          </li>
          <li>
            <t>Subtype name: oauth-act-preserve+jwt</t>
          </li>
          <li>
            <t>Required parameters: N/A</t>
          </li>
          <li>
            <t>Optional parameters: N/A</t>
          </li>
          <li>
            <t>Encoding considerations: binary; an Actor Chain preserve grant is a JWS
Compact Serialization consisting of base64url-encoded protected header,
payload, and signature segments separated by period (<tt>.</tt>) characters</t>
          </li>
          <li>
            <t>Security considerations: Section <xref target="security-considerations" format="default"/></t>
          </li>
          <li>
            <t>Interoperability considerations: N/A</t>
          </li>
          <li>
            <t>Published specification: Section <xref target="cross-domain" format="default"/> of this document</t>
          </li>
          <li>
            <t>Applications that use this media type: applications producing or validating
Actor Chain preserve grants</t>
          </li>
          <li>
            <t>Fragment identifier considerations: N/A</t>
          </li>
          <li>
            <t>Additional information:
</t>
            <ul spacing="normal">
              <li>
                <t>Deprecated alias names for this type: N/A</t>
              </li>
              <li>
                <t>Magic number(s): N/A</t>
              </li>
              <li>
                <t>File extension(s): N/A</t>
              </li>
              <li>
                <t>Macintosh file type code(s): N/A</t>
              </li>
            </ul>
          </li>
          <li>
            <t>Person &amp; email address to contact for further information: A. Prasad,
ap1729@gmail.com</t>
          </li>
          <li>
            <t>Intended usage: COMMON</t>
          </li>
          <li>
            <t>Restrictions on usage: N/A</t>
          </li>
          <li>
            <t>Author: A. Prasad, R. Krishnan, D. R. Lopez, and S. Addepalli</t>
          </li>
          <li>
            <t>Change controller: IETF</t>
          </li>
          <li>
            <t>Provisional registration? (standards tree only): No</t>
          </li>
        </ul>
      </section>
    </section>
    <section anchor="examples" numbered="true" toc="default">
      <name>Worked Token Examples</name>
      <t>Assume <tt>A -&gt; B -&gt; C -&gt; D</tt>, where C is the live presenter to protected resource
D. The JSON below consists of excerpts and illustrative placeholders, not
complete deployable tokens. Required claims omitted from an excerpt remain
required by the data model; cryptographic artifacts and openings are shown
symbolically.</t>
      <section anchor="commitment-only-actor-only" numbered="true" toc="default">
        <name>Commitment-Only Actor-Only</name>
        <artwork type="json" name="" align="left" alt=""><![CDATA[{
  "iss": "https://as3.example",
  "sub": "workflow-subject-alias",
  "aud": ["https://d.example"],
  "scope": "payments.read payments.submit",
  "actp": "verified-actor-only",
  "acti": "workflow-7",
  "act": { "iss": "https://actors.example/c", "sub": "C" },
  "actc": "<actc_C>",
  "cnf": { "jkt": "<C presenter-key thumbprint>" }
}
]]></artwork>
        <t>D validates AS3's token and <tt>actc</tt> but does not directly validate proof C.
This is the smallest Verified posture and discloses no predecessor.</t>
      </section>
      <section anchor="current-actor-evidence" numbered="true" toc="default">
        <name>Current Actor Evidence</name>
        <artwork type="json" name="" align="left" alt=""><![CDATA[{
  "actp": "verified-actor-only",
  "acti": "workflow-7",
  "act": { "iss": "https://actors.example/c", "sub": "C" },
  "actc": "<actc_C>",
  "acte": {
    "v": 1,
    "coverage": "current",
    "delivery": "inline",
    "steps": [
      { "proof": "<proof_C>", "acceptance": "<actc_C>" }
    ]
  },
  "cnf": { "jkt": "<C presenter-key thumbprint>" }
}
]]></artwork>
        <t>D validates C's signature, AS3's acceptance, the target and scope bound by C,
and C's live DPoP presentation. The proof contains a commitment to C's
actor-visible history but no opening, so B remains hidden.</t>
      </section>
      <section anchor="full-path-across-three-authorization-servers" numbered="true" toc="default">
        <name>Full Path Across Three Authorization Servers</name>
        <artwork type="json" name="" align="left" alt=""><![CDATA[{
  "actp": "verified-full",
  "acti": "workflow-7",
  "actc": "<actc_C>",
  "acte": {
    "v": 1,
    "coverage": "path",
    "delivery": "inline",
    "steps": [
      { "proof": "<proof_A>", "acceptance": "<actc_A>",
        "opening": "<opening_A>" },
      { "proof": "<proof_B>", "acceptance": "<actc_B>",
        "opening": "<opening_B>" },
      { "proof": "<proof_C>", "acceptance": "<actc_C>",
        "opening": "<opening_C>" }
    ]
  }
}
]]></artwork>
        <t>AS1 signed <tt>actc_A</tt>, AS2 preserved it and later signed <tt>actc_B</tt>, and AS3
preserved that state and later signed <tt>actc_C</tt>. D validates every original
signature and exact predecessor hash. No AS is allowed to rewrite another
signer's artifact during preservation.</t>
      </section>
      <section anchor="introspection-delivery" numbered="true" toc="default">
        <name>Introspection Delivery</name>
        <t>The access token's <tt>acte</tt> member contains only the following descriptor:</t>
        <artwork type="json" name="" align="left" alt=""><![CDATA["acte": { "v": 1, "coverage": "current",
          "delivery": "introspection" }
]]></artwork>
        <t>D submits that exact token to the authorized introspection endpoint. A valid
active response returns the same current step that inline delivery would have
carried. If the endpoint is unavailable and D requires this delivery, D
rejects; it does not silently accept commitment-only assurance.</t>
      </section>
      <section anchor="subset-with-disclosed-actor-evidence" numbered="true" toc="default">
        <name>Subset With Disclosed Actor Evidence</name>
        <t>For D, <tt>act</tt> discloses A and C while B is omitted. This token excerpt omits
the normal issuer, subject, audience, scope, lifetime, identifier, and sender
binding fields; a usable token includes them as required above.</t>
        <artwork type="json" name="" align="left" alt=""><![CDATA[{
  "actp": "verified-subset",
  "acti": "workflow-7",
  "act": {
    "iss": "https://actors.example/c",
    "sub": "C",
    "act": { "iss": "https://actors.example/a", "sub": "A" }
  },
  "actc": "<actc_C>",
  "acte": {
    "v": 2,
    "coverage": "disclosed",
    "delivery": "inline",
    "steps": [
      { "proof": "<proof_A>", "acceptance": "<actc_A>" },
      { "proof": "<proof_C>", "acceptance": "<actc_C>" }
    ]
  }
}
]]></artwork>
        <t>D verifies A's and C's original signatures and acceptances, validates C's
current target and head, and trusts the issuer's assertion that the selected
records belong to this accepted path. It does not request B's proof. Another
authorized recipient can receive B/C, A/B/C, or another permitted subset
including the current actor C, and
apply its own evidence policy. A's historical target may identify B's service;
the AS must check whether that disclosure is permitted before sending A's
unaltered signed record.</t>
        <t>A resource needing this contract advertises an evidence requirement with
<tt>v=2</tt>, <tt>coverage=disclosed</tt>, and its permitted <tt>delivery</tt> array. An AS that
supports only version 1 cannot satisfy it and must reject the requested
issuance. A recipient cannot silently accept current-only evidence instead.</t>
      </section>
    </section>
    <section anchor="deployment" numbered="true" toc="default">
      <name>Deployment Choices</name>
      <t>The resource starts with the narrowest assurance question it actually needs:</t>
      <table align="center">
        <thead>
          <tr>
            <th align="left">Resource question</th>
            <th align="left">Evidence posture</th>
          </tr>
        </thead>
        <tbody>
          <tr>
            <td align="left">Is a trusted AS assertion sufficient?</td>
            <td align="left">commitment-only</td>
          </tr>
          <tr>
            <td align="left">Did this current actor sign the transition, and is it the live presenter?</td>
            <td align="left">current plus sender constraint</td>
          </tr>
          <tr>
            <td align="left">Did each disclosed actor sign its accepted request, trusting issuer path membership?</td>
            <td align="left">disclosed, any Verified profile</td>
          </tr>
          <tr>
            <td align="left">Did every disclosed actor sign, and did each AS accept, this path?</td>
            <td align="left">path, Verified Full</td>
          </tr>
        </tbody>
      </table>
      <t>Inline delivery favors availability and independent retention but increases
token and logging exposure. Introspection favors smaller requests and
centralized authorization but adds live dependency and cache policy. Neither
delivery changes what the signatures prove.</t>
      <t>One application domain's <tt>manager</tt>, <tt>approver</tt>, or <tt>operator</tt> concept may not
mean the same thing in another domain. Such policy remains with the application
and its authorization systems. Actor Chain standardizes only mechanically
comparable OAuth scope tokens and protocol state.</t>
    </section>
    <section anchor="rationale" numbered="true" toc="default">
      <name>Design Rationale</name>
      <section anchor="why-proofs-are-created-at-every-verified-hop" numbered="true" toc="default">
        <name>Why Proofs Are Created At Every Verified Hop</name>
        <t>The proof is the only artifact signed by the actor. Creating it at every
Verified transition lets a verifier authenticate the actor's signed request
when it receives the proof and has an uncompromised actor key with an
independently authorized ActorID binding. Selected path membership remains
subject to the issuer-trust boundary described in Section
<xref target="security-considerations" format="default"/>.</t>
      </section>
      <section anchor="why-every-token-does-not-carry-every-proof" numbered="true" toc="default">
        <name>Why Every Token Does Not Carry Every Proof</name>
        <t>Actor-signed evidence was already carried in the authors' original SPICE
draft <xref target="SPICE-ACTOR-CHAIN-00" format="default"/>, Sections 4.3.2 and 7.1. This revision restores
that capability through optional <tt>acte</tt> delivery. AS attestation may suffice
for recipient policy; direct actor verification additionally requires
independently trusted actor-key bindings and incurs verification costs.</t>
        <t>The number of proofs, acceptances, signatures, and key lookups grows linearly
with path depth. The repeated actor-view arrays in path openings add
quadratic growth in transported bytes and opening processing. Those costs
are justified for some
resources but not all. Separating mandatory creation from optional delivery
retains the stronger property without forcing its privacy and availability
model globally.</t>
      </section>
      <section anchor="why-exact-compact-artifacts-are-hashed" numbered="true" toc="default">
        <name>Why Exact Compact Artifacts Are Hashed</name>
        <t>Hashing the exact prior <tt>actc</tt> and current proof eliminates a second chain-head
field, per-workflow hash negotiation, and broad canonicalization. A byte change
is visible and cannot be mistaken for the accepted artifact.</t>
      </section>
      <section anchor="why-actor-only-remains-separate-from-subset" numbered="true" toc="default">
        <name>Why Actor-Only Remains Separate From Subset</name>
        <t>Actor-Only is a machine-readable maximum-disclosure promise. A Subset result
that happens to contain one actor does not make the same promise and may expose
different subsets to other authorized recipients.</t>
      </section>
      <section anchor="why-path-is-full-disclosure-only" numbered="true" toc="default">
        <name>Why Path Is Full-Disclosure Only</name>
        <t>Every path proof needs an opening to validate how the actor-visible chain grew.
Transporting those openings reveals the path. Restricting path to Verified Full
keeps the base rule explainable and prevents a non-contiguous subset from being
misread as an adjacent verified chain. <tt>disclosed</tt> supplies selected original
signatures without openings and relies on issuer-attested membership. A
recipient does not need to verify hidden actors to use that model. Independent
membership across hidden links would require a separately defined mechanism.</t>
      </section>
      <section anchor="why-preserve-is-not-an-actor-hop" numbered="true" toc="default">
        <name>Why Preserve Is Not An Actor Hop</name>
        <t>An AS-to-AS format or namespace transition does not mean another application
actor performed work. Treating preservation as a hop would inflate and
misdescribe the actor path.</t>
      </section>
    </section>
    <section anchor="executable-validation" numbered="true" toc="default">
      <name>Executable Test Vectors And Independent Validation</name>
      <t>To reduce byte-level ambiguity and improve interoperability confidence, this
specification includes structured examples and explicit failure rules. The
authors retain local test vectors for the preceding current/path contract and
a focused selected-evidence fixture for this revision. Those materials are
not incorporated as external dependencies of this document. This revision's
new coverage mode still requires independent implementation and interoperability
review; preceding test results do not establish those properties for it.</t>
      <t>These materials are informative. They do not replace the normative
requirements, independent implementation review, or security analysis. They
provide examples for checking exact-artifact hashing, canonicalization,
linkage, disclosure, rejection, limits, replay, and errors. Implementation
languages used by the package are not part of the protocol contract.</t>
    </section>
    <section anchor="checklist" numbered="true" toc="default">
      <name>Implementation Checklist</name>
      <t>An implementation claiming conformance should be able to answer yes to each
applicable item:</t>
      <ul spacing="normal">
        <li>
          <t>Is profile selection explicit and immutable for <tt>acti</tt>?</t>
        </li>
        <li>
          <t>Are actor and AS keys authorized for the exact issuer-qualified identity and
event time?</t>
        </li>
        <li>
          <t>Are duplicate JSON members, unknown fields, wrong types, and unsupported
versions rejected?</t>
        </li>
        <li>
          <t>Does <tt>extend</tt> hash the exact prior compact <tt>actc</tt>?</t>
        </li>
        <li>
          <t>Is the final resource exactly equal, and is lexical scope equal or narrowed?</t>
        </li>
        <li>
          <t>Does <tt>current</tt> omit every actor-view opening?</t>
        </li>
        <li>
          <t>Does <tt>disclosed</tt> match every disclosed occurrence in order, omit openings,
verify all selected signatures, and require exact final-head equality?</t>
        </li>
        <li>
          <t>Does the issuer establish selected membership from authoritative accepted
state, enforce complete-record privacy, and avoid substitution from branches?</t>
        </li>
        <li>
          <t>Is <tt>path</tt> continuous, Full-disclosure, bounded, and final-head-equal?</t>
        </li>
        <li>
          <t>Does required evidence fail closed on absence or introspection failure?</t>
        </li>
        <li>
          <t>Is reliance on the immediate actor as the live presenter sender constrained?</t>
        </li>
        <li>
          <t>Do exact retries reuse one committed <tt>actc</tt> while current issuance policy
still applies?</t>
        </li>
        <li>
          <t>Are replay records durable and linearizable, with stale workers fenced and
unavailable partitions failing closed?</t>
        </li>
        <li>
          <t>Does cross-domain handling preserve protected state values and compact
artifacts without transcription?</t>
        </li>
        <li>
          <t>Are byte, depth, signature, issuer, key-lookup, and network limits applied
before attacker-amplified work?</t>
        </li>
        <li>
          <t>Are evidence custody, historical key context, and privacy retention aligned
with every audit claim made to relying parties?</t>
        </li>
      </ul>
    </section>
    <section anchor="future" numbered="true" toc="default">
      <name>Future Work</name>
      <t>Receiver acknowledgments, terminal result receipts, arbitrary suffix or
independently verified selective path membership, branch transparency,
evidence export after token expiry,
and additional discovery or interoperability profiles for sender-constraining
mechanisms are candidates for companion work. They are not required to
implement this base protocol.</t>
    </section>
    <section anchor="rfc8693-comparison" numbered="true" toc="default">
      <name>Relationship To RFC 8693</name>
      <t>This section is informative.</t>
      <table align="center">
        <thead>
          <tr>
            <th align="left">RFC 8693</th>
            <th align="left">This document when actp is present</th>
          </tr>
        </thead>
        <tbody>
          <tr>
            <td align="left">Nested act is a convention</td>
            <td align="left">Disclosure shape and interpretation are profile-defined</td>
          </tr>
          <tr>
            <td align="left">No workflow correlation</td>
            <td align="left">acti is stable across transitions</td>
          </tr>
          <tr>
            <td align="left">No append-only algorithm</td>
            <td align="left">root, extend, and preserve are explicit</td>
          </tr>
          <tr>
            <td align="left">Issuer assertion only</td>
            <td align="left">Verified profiles add actor proofs and AS acceptances</td>
          </tr>
          <tr>
            <td align="left">No evidence requirement discovery</td>
            <td align="left">RFC 9728 metadata selects optional direct evidence</td>
          </tr>
        </tbody>
      </table>
    </section>
    <section anchor="related-work" numbered="true" toc="default">
      <name>Relationship to Other Work</name>
      <t>This section is informative.</t>
      <t>Holder-issued chains support delegation without an AS exchange at every step
<xref target="DELEGATE-SD-JWT" format="default"/>. Actor Chain retains AS issuance policy and varies evidence
delivery by resource requirements. These are deployment tradeoffs. SD-JWT
provides selective disclosure of signed fields <xref target="RFC9901" format="default"/>; this version's
selected original JWS evidence does not define a new field-redaction format.</t>
      <section anchor="sd-jwt-composition" numbered="true" toc="default">
        <name>SD-JWT Composition</name>
        <t>This section is informative. SD-JWT <xref target="RFC9901" format="default"/> is a candidate encoding layer
for a future Actor Chain profile, not an implemented alternative wire format
in this specification. Its verified payload could supply profiled token
claims, while unchanged <tt>actc</tt> and selected original JWS records retain their
Actor Chain meanings. A separate actor-signed SD-JWT proof profile could allow
historical field disclosure, but would need explicit proof typing, validation,
and acceptance-hash rules.</t>
        <t>Such a profile needs to define required non-disclosable validity claims,
presentation serialization, negotiation, actor-occurrence/evidence matching,
and key binding alongside OAuth sender constraints. SD-JWT key binding does
not automatically replace this specification's DPoP contract. Hiding a middle
node in nested <tt>act</tt> does not automatically produce a valid non-contiguous
Actor Chain subsequence. Holder-selected disclosures must satisfy the
recipient's authenticated evidence floor and the AS's disclosure authorization.
SD-JWT proves integrity of revealed signed fields; it does not itself assign
Actor Chain transition, path-membership, or business-authorization semantics.</t>
      </section>
    </section>
    <section anchor="agent-workload-integration" numbered="true" toc="default">
      <name>Agent and Workload Integration</name>
      <t>This section is informative. Actor Chain operates at authorization transitions;
it does not change MCP tool messages, A2A task semantics, or Kubernetes RBAC.
The example is A, an orchestrator, calling B, an A2A planner; B calling C, an
MCP connector; and C calling D, a Kubernetes-hosted API.</t>
      <table align="center">
        <thead>
          <tr>
            <th align="left">Hop</th>
            <th align="left">Authorization integration</th>
          </tr>
        </thead>
        <tbody>
          <tr>
            <td align="left">A to B</td>
            <td align="left">Obtain a token for B; transmit it using B's advertised A2A security scheme.</td>
          </tr>
          <tr>
            <td align="left">B to C</td>
            <td align="left">Exchange B's inbound token at an authorized AS for a token issued for C's MCP resource.</td>
          </tr>
          <tr>
            <td align="left">C to D</td>
            <td align="left">Authenticate C and exchange its inbound token for D's resource and authorized scope. D or its enforcement gateway verifies the required evidence.</td>
          </tr>
        </tbody>
      </table>
      <t>MCP HTTP authorization specifies Bearer presentation and authenticated
resource discovery <xref target="MCP-AUTH" format="default"/>. A conforming deployment retains resource-specific
tokens instead of forwarding C's inbound MCP token to D. Actor Chain requires
support at the AS, exchange client, and resource verifier; ordinary OAuth
middleware does not implement these extensions automatically. Local MCP
stdio does not use the HTTP authorization flow.</t>
      <t>DPoP-bound access tokens use the DPoP authentication scheme. A Bearer-only
MCP transport therefore does not implement this specification's concrete DPoP
presentation merely by adding a proof header. An explicitly agreed RFC 8705
certificate-bound deployment <xref target="RFC8705" format="default"/> can retain Bearer presentation when
the AS associates the certificate key with the authenticated current actor
and the resource verifies its token binding and TLS possession. This is an
application of the existing sender-constraint alternative, not a new
interoperability profile. If metadata requires DPoP, mTLS is not a fallback.
A TLS-terminating gateway needs a trusted certificate-validation boundary;
a forwarded certificate header alone does not establish possession.</t>
      <t>A2A advertises security schemes and obtains credentials outside task messages
<xref target="A2A-SPEC" format="default"/>. Its task or context identifier is not <tt>acti</tt>. Polling, streaming,
and token refresh do not automatically create actor steps. Step-up authority
needs fresh authorization; it does not enlarge previously signed scope.</t>
      <t>Kubernetes projected service-account tokens can authenticate workloads under
an explicit trust and audience policy <xref target="K8S-SA" format="default"/>. They are issuer-signed
credentials, not actor step signatures or token-to-key bindings. Verified
actors additionally use authorized signing keys with retained event-time
bindings. Shared service identities do not imply distinct pod attribution.
A signing proxy is attributed according to its authenticated identity; its
signature does not become an unmodified application's own signature.</t>
      <t>Before signing, clients select the exact resource identifier from authenticated
metadata. Resource-verifier adapters apply the exact signed-resource comparison
even when ordinary URL or audience middleware normalizes equivalent spellings.</t>
      <t>An inbound DPoP binding belongs to the actor that presented the token to the
receiving service. Receiving that token does not transfer the sender's private
key. The AS needs an explicitly authorized recipient-exchange policy that
preserves applicable subject-token checks and authenticates the new actor.
Token possession, client authentication, and a new step signature do not prove
possession of the original sender's key. This is a deployment prerequisite to
the example; AS-specific behavior needs integration testing before claiming
end-to-end interoperability.</t>
      <t>The Kubernetes API server and its RBAC policy are not implicitly extended by
Actor Chain. Deployment requires explicit application or gateway validation;
workload identity and ordinary cluster auditing do not implement these rules.</t>
    </section>
  </middle>
  <back>
    <references>
      <name>References</name>
      <references>
        <name>Normative References</name>
        <reference anchor="RFC8785" target="https://www.rfc-editor.org/info/rfc8785" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8785.xml">
          <front>
            <title>JSON Canonicalization Scheme (JCS)</title>
            <author fullname="A. Rundgren" initials="A." surname="Rundgren"/>
            <author fullname="B. Jordan" initials="B." surname="Jordan"/>
            <author fullname="S. Erdtman" initials="S." surname="Erdtman"/>
            <date month="June" year="2020"/>
            <abstract>
              <t>Cryptographic operations like hashing and signing need the data to be expressed in an invariant format so that the operations are reliably repeatable. One way to address this is to create a canonical representation of the data. Canonicalization also permits data to be exchanged in its original form on the "wire" while cryptographic operations performed on the canonicalized counterpart of the data in the producer and consumer endpoints generate consistent results.</t>
              <t>This document describes the JSON Canonicalization Scheme (JCS). This specification defines how to create a canonical representation of JSON data by building on the strict serialization methods for JSON primitives defined by ECMAScript, constraining JSON data to the Internet JSON (I-JSON) subset, and by using deterministic property sorting.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8785"/>
          <seriesInfo name="DOI" value="10.17487/RFC8785"/>
        </reference>
        <reference anchor="RFC8174" target="https://www.rfc-editor.org/info/rfc8174" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8174.xml">
          <front>
            <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
            <author fullname="B. Leiba" initials="B." surname="Leiba"/>
            <date month="May" year="2017"/>
            <abstract>
              <t>RFC 2119 specifies common key words that may be used in protocol specifications. This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the defined special meanings.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="8174"/>
          <seriesInfo name="DOI" value="10.17487/RFC8174"/>
        </reference>
        <reference anchor="RFC3986" target="https://www.rfc-editor.org/info/rfc3986" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.3986.xml">
          <front>
            <title>Uniform Resource Identifier (URI): Generic Syntax</title>
            <author fullname="T. Berners-Lee" initials="T." surname="Berners-Lee"/>
            <author fullname="R. Fielding" initials="R." surname="Fielding"/>
            <author fullname="L. Masinter" initials="L." surname="Masinter"/>
            <date month="January" year="2005"/>
            <abstract>
              <t>A Uniform Resource Identifier (URI) is a compact sequence of characters that identifies an abstract or physical resource. This specification defines the generic URI syntax and a process for resolving URI references that might be in relative form, along with guidelines and security considerations for the use of URIs on the Internet. The URI syntax defines a grammar that is a superset of all valid URIs, allowing an implementation to parse the common components of a URI reference without knowing the scheme-specific requirements of every possible identifier. This specification does not define a generative grammar for URIs; that task is performed by the individual specifications of each URI scheme. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="66"/>
          <seriesInfo name="RFC" value="3986"/>
          <seriesInfo name="DOI" value="10.17487/RFC3986"/>
        </reference>
        <reference anchor="RFC7523" target="https://www.rfc-editor.org/info/rfc7523" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.7523.xml">
          <front>
            <title>JSON Web Token (JWT) Profile for OAuth 2.0 Client Authentication and Authorization Grants</title>
            <author fullname="M. Jones" initials="M." surname="Jones"/>
            <author fullname="B. Campbell" initials="B." surname="Campbell"/>
            <author fullname="C. Mortimore" initials="C." surname="Mortimore"/>
            <date month="May" year="2015"/>
            <abstract>
              <t>This specification defines the use of a JSON Web Token (JWT) Bearer Token as a means for requesting an OAuth 2.0 access token as well as for client authentication.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7523"/>
          <seriesInfo name="DOI" value="10.17487/RFC7523"/>
        </reference>
        <reference anchor="RFC6838" target="https://www.rfc-editor.org/info/rfc6838" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.6838.xml">
          <front>
            <title>Media Type Specifications and Registration Procedures</title>
            <author fullname="N. Freed" initials="N." surname="Freed"/>
            <author fullname="J. Klensin" initials="J." surname="Klensin"/>
            <author fullname="T. Hansen" initials="T." surname="Hansen"/>
            <date month="January" year="2013"/>
            <abstract>
              <t>This document defines procedures for the specification and registration of media types for use in HTTP, MIME, and other Internet protocols. This memo documents an Internet Best Current Practice.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="13"/>
          <seriesInfo name="RFC" value="6838"/>
          <seriesInfo name="DOI" value="10.17487/RFC6838"/>
        </reference>
        <reference anchor="RFC6749" target="https://www.rfc-editor.org/info/rfc6749" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.6749.xml">
          <front>
            <title>The OAuth 2.0 Authorization Framework</title>
            <author fullname="D. Hardt" initials="D." role="editor" surname="Hardt"/>
            <date month="October" year="2012"/>
            <abstract>
              <t>The OAuth 2.0 authorization framework enables a third-party application to obtain limited access to an HTTP service, either on behalf of a resource owner by orchestrating an approval interaction between the resource owner and the HTTP service, or by allowing the third-party application to obtain access on its own behalf. This specification replaces and obsoletes the OAuth 1.0 protocol described in RFC 5849. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6749"/>
          <seriesInfo name="DOI" value="10.17487/RFC6749"/>
        </reference>
        <reference anchor="RFC7518" target="https://www.rfc-editor.org/info/rfc7518" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.7518.xml">
          <front>
            <title>JSON Web Algorithms (JWA)</title>
            <author fullname="M. Jones" initials="M." surname="Jones"/>
            <date month="May" year="2015"/>
            <abstract>
              <t>This specification registers cryptographic algorithms and identifiers to be used with the JSON Web Signature (JWS), JSON Web Encryption (JWE), and JSON Web Key (JWK) specifications. It defines several IANA registries for these identifiers.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7518"/>
          <seriesInfo name="DOI" value="10.17487/RFC7518"/>
        </reference>
        <reference anchor="RFC8693" target="https://www.rfc-editor.org/info/rfc8693" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8693.xml">
          <front>
            <title>OAuth 2.0 Token Exchange</title>
            <author fullname="M. Jones" initials="M." surname="Jones"/>
            <author fullname="A. Nadalin" initials="A." surname="Nadalin"/>
            <author fullname="B. Campbell" initials="B." role="editor" surname="Campbell"/>
            <author fullname="J. Bradley" initials="J." surname="Bradley"/>
            <author fullname="C. Mortimore" initials="C." surname="Mortimore"/>
            <date month="January" year="2020"/>
            <abstract>
              <t>This specification defines a protocol for an HTTP- and JSON-based Security Token Service (STS) by defining how to request and obtain security tokens from OAuth 2.0 authorization servers, including security tokens employing impersonation and delegation.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8693"/>
          <seriesInfo name="DOI" value="10.17487/RFC8693"/>
        </reference>
        <reference anchor="RFC9110" target="https://www.rfc-editor.org/info/rfc9110" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.9110.xml">
          <front>
            <title>HTTP Semantics</title>
            <author fullname="R. Fielding" initials="R." role="editor" surname="Fielding"/>
            <author fullname="M. Nottingham" initials="M." role="editor" surname="Nottingham"/>
            <author fullname="J. Reschke" initials="J." role="editor" surname="Reschke"/>
            <date month="June" year="2022"/>
            <abstract>
              <t>The Hypertext Transfer Protocol (HTTP) is a stateless application-level protocol for distributed, collaborative, hypertext information systems. This document describes the overall architecture of HTTP, establishes common terminology, and defines aspects of the protocol that are shared by all versions. In this definition are core protocol elements, extensibility mechanisms, and the "http" and "https" Uniform Resource Identifier (URI) schemes.</t>
              <t>This document updates RFC 3864 and obsoletes RFCs 2818, 7231, 7232, 7233, 7235, 7538, 7615, 7694, and portions of 7230.</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="97"/>
          <seriesInfo name="RFC" value="9110"/>
          <seriesInfo name="DOI" value="10.17487/RFC9110"/>
        </reference>
        <reference anchor="RFC2119" target="https://www.rfc-editor.org/info/rfc2119" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.2119.xml">
          <front>
            <title>Key words for use in RFCs to Indicate Requirement Levels</title>
            <author fullname="S. Bradner" initials="S." surname="Bradner"/>
            <date month="March" year="1997"/>
            <abstract>
              <t>In many standards track documents several words are used to signify the requirements in the specification. These words are often capitalized. This document defines these words as they should be interpreted in IETF documents. This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="2119"/>
          <seriesInfo name="DOI" value="10.17487/RFC2119"/>
        </reference>
        <reference anchor="RFC8414" target="https://www.rfc-editor.org/info/rfc8414" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8414.xml">
          <front>
            <title>OAuth 2.0 Authorization Server Metadata</title>
            <author fullname="M. Jones" initials="M." surname="Jones"/>
            <author fullname="N. Sakimura" initials="N." surname="Sakimura"/>
            <author fullname="J. Bradley" initials="J." surname="Bradley"/>
            <date month="June" year="2018"/>
            <abstract>
              <t>This specification defines a metadata format that an OAuth 2.0 client can use to obtain the information needed to interact with an OAuth 2.0 authorization server, including its endpoint locations and authorization server capabilities.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8414"/>
          <seriesInfo name="DOI" value="10.17487/RFC8414"/>
        </reference>
        <reference anchor="RFC9864" target="https://www.rfc-editor.org/info/rfc9864" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.9864.xml">
          <front>
            <title>Fully-Specified Algorithms for JSON Object Signing and Encryption (JOSE) and CBOR Object Signing and Encryption (COSE)</title>
            <author fullname="M.B. Jones" initials="M.B." surname="Jones"/>
            <author fullname="O. Steele" initials="O." surname="Steele"/>
            <date month="October" year="2025"/>
            <abstract>
              <t>This specification refers to cryptographic algorithm identifiers that fully specify the cryptographic operations to be performed, including any curve, key derivation function (KDF), and hash functions, as being "fully specified". It refers to cryptographic algorithm identifiers that require additional information beyond the algorithm identifier to determine the cryptographic operations to be performed as being "polymorphic". This specification creates fully-specified algorithm identifiers for registered JSON Object Signing and Encryption (JOSE) and CBOR Object Signing and Encryption (COSE) polymorphic algorithm identifiers, enabling applications to use only fully-specified algorithm identifiers. It deprecates those polymorphic algorithm identifiers.</t>
              <t>This specification updates RFCs 7518, 8037, and 9053. It deprecates polymorphic algorithms defined by RFCs 8037 and 9053 and provides fully-specified replacements for them. It adds to the instructions to designated experts in RFCs 7518 and 9053.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9864"/>
          <seriesInfo name="DOI" value="10.17487/RFC9864"/>
        </reference>
        <reference anchor="RFC9449" target="https://www.rfc-editor.org/info/rfc9449" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.9449.xml">
          <front>
            <title>OAuth 2.0 Demonstrating Proof of Possession (DPoP)</title>
            <author fullname="D. Fett" initials="D." surname="Fett"/>
            <author fullname="B. Campbell" initials="B." surname="Campbell"/>
            <author fullname="J. Bradley" initials="J." surname="Bradley"/>
            <author fullname="T. Lodderstedt" initials="T." surname="Lodderstedt"/>
            <author fullname="M. Jones" initials="M." surname="Jones"/>
            <author fullname="D. Waite" initials="D." surname="Waite"/>
            <date month="September" year="2023"/>
            <abstract>
              <t>This document describes a mechanism for sender-constraining OAuth 2.0 tokens via a proof-of-possession mechanism on the application level. This mechanism allows for the detection of replay attacks with access and refresh tokens.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9449"/>
          <seriesInfo name="DOI" value="10.17487/RFC9449"/>
        </reference>
        <reference anchor="RFC7662" target="https://www.rfc-editor.org/info/rfc7662" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.7662.xml">
          <front>
            <title>OAuth 2.0 Token Introspection</title>
            <author fullname="J. Richer" initials="J." role="editor" surname="Richer"/>
            <date month="October" year="2015"/>
            <abstract>
              <t>This specification defines a method for a protected resource to query an OAuth 2.0 authorization server to determine the active state of an OAuth 2.0 token and to determine meta-information about this token. OAuth 2.0 deployments can use this method to convey information about the authorization context of the token from the authorization server to the protected resource.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7662"/>
          <seriesInfo name="DOI" value="10.17487/RFC7662"/>
        </reference>
        <reference anchor="I-D.ietf-oauth-identity-chaining" target="https://datatracker.ietf.org/doc/html/draft-ietf-oauth-identity-chaining-17" xml:base="https://bib.ietf.org/public/rfc/bibxml-ids/reference.I-D.ietf-oauth-identity-chaining.xml">
          <front>
            <title>OAuth Identity and Authorization Chaining Across Domains</title>
            <author fullname="Arndt Schwenkschuster" initials="A." surname="Schwenkschuster">
              <organization>Defakto Security</organization>
            </author>
            <author fullname="Pieter Kasselman" initials="P." surname="Kasselman">
              <organization>Defakto Security</organization>
            </author>
            <author fullname="Kelley Burgin" initials="K." surname="Burgin">
              <organization>MITRE</organization>
            </author>
            <author fullname="Michael J. Jenkins" initials="M. J." surname="Jenkins">
              <organization>NSA-CCSS</organization>
            </author>
            <author fullname="Brian Campbell" initials="B." surname="Campbell">
              <organization>Ping Identity</organization>
            </author>
            <author fullname="Aaron Parecki" initials="A." surname="Parecki">
              <organization>Okta</organization>
            </author>
            <date day="19" month="July" year="2026"/>
            <abstract>
              <t>This specification describes a mechanism for preserving identity and authorization information across trust domains that use the OAuth 2.0 Framework. A JSON Web Token (JWT) authorization grant, obtained through an intra-domain OAuth 2.0 Token Exchange, facilitates the cross-domain acquisition of an access token. The relevant identity and authorization information is chained throughout the flow by being conveyed in the respective artifacts exchanged at each step of the process. Chaining across multiple domains is achieved by using the same protocol every time a trust domain boundary is crossed.</t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-oauth-identity-chaining-17"/>
        </reference>
        <reference anchor="RFC6755" target="https://www.rfc-editor.org/info/rfc6755" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.6755.xml">
          <front>
            <title>An IETF URN Sub-Namespace for OAuth</title>
            <author fullname="B. Campbell" initials="B." surname="Campbell"/>
            <author fullname="H. Tschofenig" initials="H." surname="Tschofenig"/>
            <date month="October" year="2012"/>
            <abstract>
              <t>This document establishes an IETF URN Sub-namespace for use with OAuth-related specifications. This document is not an Internet Standards Track specification; it is published for informational purposes.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6755"/>
          <seriesInfo name="DOI" value="10.17487/RFC6755"/>
        </reference>
        <reference anchor="RFC7519" target="https://www.rfc-editor.org/info/rfc7519" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.7519.xml">
          <front>
            <title>JSON Web Token (JWT)</title>
            <author fullname="M. Jones" initials="M." surname="Jones"/>
            <author fullname="J. Bradley" initials="J." surname="Bradley"/>
            <author fullname="N. Sakimura" initials="N." surname="Sakimura"/>
            <date month="May" year="2015"/>
            <abstract>
              <t>JSON Web Token (JWT) is a compact, URL-safe means of representing claims to be transferred between two parties. The claims in a JWT are encoded as a JSON object that is used as the payload of a JSON Web Signature (JWS) structure or as the plaintext of a JSON Web Encryption (JWE) structure, enabling the claims to be digitally signed or integrity protected with a Message Authentication Code (MAC) and/or encrypted.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7519"/>
          <seriesInfo name="DOI" value="10.17487/RFC7519"/>
        </reference>
        <reference anchor="RFC8707" target="https://www.rfc-editor.org/info/rfc8707" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8707.xml">
          <front>
            <title>Resource Indicators for OAuth 2.0</title>
            <author fullname="B. Campbell" initials="B." surname="Campbell"/>
            <author fullname="J. Bradley" initials="J." surname="Bradley"/>
            <author fullname="H. Tschofenig" initials="H." surname="Tschofenig"/>
            <date month="February" year="2020"/>
            <abstract>
              <t>This document specifies an extension to the OAuth 2.0 Authorization Framework defining request parameters that enable a client to explicitly signal to an authorization server about the identity of the protected resource(s) to which it is requesting access.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8707"/>
          <seriesInfo name="DOI" value="10.17487/RFC8707"/>
        </reference>
        <reference anchor="RFC8725" target="https://www.rfc-editor.org/info/rfc8725" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8725.xml">
          <front>
            <title>JSON Web Token Best Current Practices</title>
            <author fullname="Y. Sheffer" initials="Y." surname="Sheffer"/>
            <author fullname="D. Hardt" initials="D." surname="Hardt"/>
            <author fullname="M. Jones" initials="M." surname="Jones"/>
            <date month="February" year="2020"/>
            <abstract>
              <t>JSON Web Tokens, also known as JWTs, are URL-safe JSON-based security tokens that contain a set of claims that can be signed and/or encrypted. JWTs are being widely used and deployed as a simple security token format in numerous protocols and applications, both in the area of digital identity and in other application areas. This Best Current Practices document updates RFC 7519 to provide actionable guidance leading to secure implementation and deployment of JWTs.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="225"/>
          <seriesInfo name="RFC" value="8725"/>
          <seriesInfo name="DOI" value="10.17487/RFC8725"/>
        </reference>
        <reference anchor="RFC9728" target="https://www.rfc-editor.org/info/rfc9728" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.9728.xml">
          <front>
            <title>OAuth 2.0 Protected Resource Metadata</title>
            <author fullname="M.B. Jones" initials="M.B." surname="Jones"/>
            <author fullname="P. Hunt" initials="P." surname="Hunt"/>
            <author fullname="A. Parecki" initials="A." surname="Parecki"/>
            <date month="April" year="2025"/>
            <abstract>
              <t>This specification defines a metadata format that an OAuth 2.0 client or authorization server can use to obtain the information needed to interact with an OAuth 2.0 protected resource.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9728"/>
          <seriesInfo name="DOI" value="10.17487/RFC9728"/>
        </reference>
        <reference anchor="RFC7515" target="https://www.rfc-editor.org/info/rfc7515" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.7515.xml">
          <front>
            <title>JSON Web Signature (JWS)</title>
            <author fullname="M. Jones" initials="M." surname="Jones"/>
            <author fullname="J. Bradley" initials="J." surname="Bradley"/>
            <author fullname="N. Sakimura" initials="N." surname="Sakimura"/>
            <date month="May" year="2015"/>
            <abstract>
              <t>JSON Web Signature (JWS) represents content secured with digital signatures or Message Authentication Codes (MACs) using JSON-based data structures. Cryptographic algorithms and identifiers for use with this specification are described in the separate JSON Web Algorithms (JWA) specification and an IANA registry defined by that specification. Related encryption capabilities are described in the separate JSON Web Encryption (JWE) specification.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7515"/>
          <seriesInfo name="DOI" value="10.17487/RFC7515"/>
        </reference>
        <reference anchor="RFC7638" target="https://www.rfc-editor.org/info/rfc7638" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.7638.xml">
          <front>
            <title>JSON Web Key (JWK) Thumbprint</title>
            <author fullname="M. Jones" initials="M." surname="Jones"/>
            <author fullname="N. Sakimura" initials="N." surname="Sakimura"/>
            <date month="September" year="2015"/>
            <abstract>
              <t>This specification defines a method for computing a hash value over a JSON Web Key (JWK). It defines which fields in a JWK are used in the hash computation, the method of creating a canonical form for those fields, and how to convert the resulting Unicode string into a byte sequence to be hashed. The resulting hash value can be used for identifying or selecting the key represented by the JWK that is the subject of the thumbprint.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7638"/>
          <seriesInfo name="DOI" value="10.17487/RFC7638"/>
        </reference>
        <reference anchor="RFC6750" target="https://www.rfc-editor.org/info/rfc6750" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.6750.xml">
          <front>
            <title>The OAuth 2.0 Authorization Framework: Bearer Token Usage</title>
            <author fullname="M. Jones" initials="M." surname="Jones"/>
            <author fullname="D. Hardt" initials="D." surname="Hardt"/>
            <date month="October" year="2012"/>
            <abstract>
              <t>This specification describes how to use bearer tokens in HTTP requests to access OAuth 2.0 protected resources. Any party in possession of a bearer token (a "bearer") can use it to get access to the associated resources (without demonstrating possession of a cryptographic key). To prevent misuse, bearer tokens need to be protected from disclosure in storage and in transport. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6750"/>
          <seriesInfo name="DOI" value="10.17487/RFC6750"/>
        </reference>
      </references>
      <references>
        <name>Informative References</name>
        <reference anchor="DELEGATE-SD-JWT" target="https://www.ietf.org/archive/id/draft-gco-oauth-delegate-sd-jwt-00.html">
          <front>
            <title>Delegate SD-JWT</title>
            <author fullname="Gareth Oliver" initials="G." surname="Oliver"/>
            <date year="2026" month="April" day="21"/>
          </front>
        </reference>
        <reference anchor="A2A-SPEC" target="https://a2a-protocol.org/v1.0.0/specification/">
          <front>
            <title>Agent2Agent Protocol Specification, version 1.0.0</title>
            <author>
              <organization>A2A Project</organization>
            </author>
            <date/>
          </front>
        </reference>
        <reference anchor="MCP-AUTH" target="https://modelcontextprotocol.io/specification/2026-07-28/basic/authorization">
          <front>
            <title>Model Context Protocol Authorization, revision 2026-07-28</title>
            <author>
              <organization>Model Context Protocol</organization>
            </author>
            <date/>
          </front>
        </reference>
        <reference anchor="K8S-SA" target="https://kubernetes.io/docs/concepts/security/service-accounts/">
          <front>
            <title>Kubernetes Service Accounts</title>
            <author>
              <organization>Kubernetes</organization>
            </author>
            <date/>
          </front>
        </reference>
        <reference anchor="OAUTH-ACTOR-CHAIN-01" target="https://datatracker.ietf.org/doc/draft-mw-oauth-actor-chain/01/">
          <front>
            <title>Cryptographically Verifiable Actor Chains for OAuth 2.0 Token Exchange</title>
            <author fullname="A Prasad" initials="A." surname="Prasad"/>
            <author fullname="Ram Krishnan" initials="R." surname="Krishnan"/>
            <author fullname="Diego R. Lopez" initials="D." surname="Lopez"/>
            <author fullname="Srinivasa Addepalli" initials="S." surname="Addepalli"/>
            <date year="2026" month="June" day="15"/>
          </front>
        </reference>
        <reference anchor="RFC8705" target="https://www.rfc-editor.org/rfc/rfc8705">
          <front>
            <title>OAuth 2.0 Mutual-TLS Client Authentication and Certificate-Bound Access Tokens</title>
            <author initials="B." surname="Campbell"/>
            <author initials="J." surname="Bradley"/>
            <author initials="N." surname="Sakimura"/>
            <author initials="T." surname="Lodderstedt"/>
            <date year="2020" month="February"/>
          </front>
        </reference>
        <reference anchor="RFC9901" target="https://www.rfc-editor.org/info/rfc9901" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.9901.xml">
          <front>
            <title>Selective Disclosure for JSON Web Tokens</title>
            <author fullname="D. Fett" initials="D." surname="Fett"/>
            <author fullname="K. Yasuda" initials="K." surname="Yasuda"/>
            <author fullname="B. Campbell" initials="B." surname="Campbell"/>
            <date month="November" year="2025"/>
            <abstract>
              <t>This specification defines a mechanism for the selective disclosure
of individual elements of a JSON data structure used as the payload
of a JSON Web Signature (JWS). The primary use case is the selective
disclosure of JSON Web Token (JWT) claims.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9901"/>
          <seriesInfo name="DOI" value="10.17487/RFC9901"/>
        </reference>
        <reference anchor="ACTOR-CHAIN-OVERVIEW" target="https://datatracker.ietf.org/doc/draft-mw-oauth-actor-chain-overview/">
          <front>
            <title>OAuth Actor Chain: Overview and Design</title>
            <author fullname="A Prasad" initials="A." surname="Prasad"/>
            <author fullname="Ram Krishnan" initials="R." surname="Krishnan"/>
            <author fullname="Diego R. Lopez" initials="D." surname="Lopez"/>
            <author fullname="Srinivasa Addepalli" initials="S." surname="Addepalli"/>
            <date year="2026" month="October" day="4"/>
          </front>
        </reference>
        <reference anchor="SPICE-ACTOR-CHAIN-00" target="https://datatracker.ietf.org/doc/draft-mw-spice-actor-chain/00/">
          <front>
            <title>Cryptographically Verifiable Actor Chain for OAuth 2.0 Token Exchange</title>
            <author fullname="A Prasad" initials="A." surname="Prasad"/>
            <author fullname="Ram Krishnan" initials="R." surname="Krishnan"/>
            <author fullname="Diego R. Lopez" initials="D." surname="Lopez"/>
            <author fullname="Srinivasa Addepalli" initials="S." surname="Addepalli"/>
            <date year="2026" month="February" day="25"/>
          </front>
        </reference>
      </references>
    </references>
  </back>
</rfc>
