<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE rfc [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">
]>
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
<!-- generated by https://github.com/cabo/kramdown-rfc version 1.7.30 (Ruby 3.2.3) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-aap-oauth-profile-01" category="std" consensus="true" submissionType="IETF" version="3">
  <!-- xml2rfc v2v3 conversion 3.31.0 -->
  <front>
    <title abbrev="AAP for OAuth 2.0">Agent Authorization Profile (AAP) for OAuth 2.0</title>
    <seriesInfo name="Internet-Draft" value="draft-aap-oauth-profile-01"/>
    <author fullname="Angel Cruz">
      <organization>Independent</organization>
      <address>
        <email>bullgram@gmail.com</email>
      </address>
    </author>
    <date year="2026" month="February" day="07"/>
    <area>Security</area>
    <workgroup>OAuth Working Group</workgroup>
    <keyword>OAuth</keyword>
    <keyword>JWT</keyword>
    <keyword>AI Agents</keyword>
    <keyword>Authorization</keyword>
    <keyword>Machine-to-Machine</keyword>
    <abstract>
      <?line 62?>

<t>This document defines the Agent Authorization Profile (AAP), an authorization profile for OAuth 2.0 and JWT designed for autonomous AI agents. AAP extends existing standards with structured claims and validation rules so that systems can reason about agent identity, task context, operational constraints, delegation chains, and human oversight requirements. It does not introduce a new protocol; it specifies how to use OAuth 2.0, JWT, Token Exchange, and proof-of-possession mechanisms in agent-to-API (M2M) scenarios with context-aware, auditable authorization.</t>
    </abstract>
  </front>
  <middle>
    <?line 66?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>The Agent Authorization Profile (AAP) is an authorization profile built on OAuth 2.0 <xref target="RFC6749"/> and JWT <xref target="RFC7519"/>, designed to support secure, auditable, and context-aware authorization for autonomous AI agents. AAP extends existing standards with structured claims and validation rules that allow systems to reason about agent identity, task context, operational constraints, delegation chains, and human oversight requirements.</t>
      <section anchor="problem-statement">
        <name>Problem Statement</name>
        <t>Traditional OAuth-based systems were designed primarily for user-to-application-to-API interactions. Autonomous AI agents introduce different characteristics: actions can be autonomous and high frequency; human approval may not be present at execution time; risk depends on task context; and execution may be delegated across multiple tools or agents. Existing scope-based models are not expressive enough to represent these requirements safely and transparently.</t>
      </section>
      <section anchor="goals">
        <name>Goals</name>
        <ul spacing="normal">
          <li>
            <t>Provide explicit and verifiable identity for AI agents.</t>
          </li>
          <li>
            <t>Support capability-based authorization with enforceable constraints.</t>
          </li>
          <li>
            <t>Bind access tokens to specific tasks and declared purposes.</t>
          </li>
          <li>
            <t>Enable auditable delegation across agents and tools.</t>
          </li>
          <li>
            <t>Support the expression of human oversight requirements.</t>
          </li>
          <li>
            <t>Remain compatible with OAuth 2.0, JWT, Token Exchange, and proof-of-possession mechanisms.</t>
          </li>
        </ul>
      </section>
      <section anchor="non-goals">
        <name>Non-Goals</name>
        <ul spacing="normal">
          <li>
            <t>Defining internal AI model behavior.</t>
          </li>
          <li>
            <t>Judging the correctness or ethics of agent decisions.</t>
          </li>
          <li>
            <t>Replacing organizational security or compliance frameworks.</t>
          </li>
          <li>
            <t>Standardizing log storage formats or SIEM integrations.</t>
          </li>
        </ul>
      </section>
    </section>
    <section anchor="terminology">
      <name>Terminology</name>
      <table>
        <thead>
          <tr>
            <th align="left">Term</th>
            <th align="left">Definition</th>
          </tr>
        </thead>
        <tbody>
          <tr>
            <td align="left">
              <strong>Agent</strong></td>
            <td align="left">Autonomous software entity (e.g. LLM, bot) that acts as an OAuth client and performs actions on behalf of an operator.</td>
          </tr>
          <tr>
            <td align="left">
              <strong>Authorization Server (AS)</strong></td>
            <td align="left">Server that issues access tokens in accordance with OAuth 2.0 and applies AAP policies.</td>
          </tr>
          <tr>
            <td align="left">
              <strong>Capability</strong></td>
            <td align="left">Permitted action (e.g. <tt>action</tt>) together with its restrictions (<tt>constraints</tt>).</td>
          </tr>
          <tr>
            <td align="left">
              <strong>Delegation</strong></td>
            <td align="left">Transfer of a subset of privileges to another entity (tool or sub-agent) via token exchange or other mechanism.</td>
          </tr>
          <tr>
            <td align="left">
              <strong>Operator</strong></td>
            <td align="left">Organization or human role that registers and authorizes the agent.</td>
          </tr>
          <tr>
            <td align="left">
              <strong>Proof-of-possession (PoP)</strong></td>
            <td align="left">Mechanism by which the client demonstrates possession of a key (e.g. DPoP, mTLS) when using the token.</td>
          </tr>
          <tr>
            <td align="left">
              <strong>Resource Server (RS)</strong></td>
            <td align="left">Server that protects resources and validates AAP tokens before allowing access.</td>
          </tr>
          <tr>
            <td align="left">
              <strong>Task</strong></td>
            <td align="left">Unit of work to which the token is bound (identifier, purpose, sensitivity, etc.).</td>
          </tr>
        </tbody>
      </table>
      <t><strong>AAP token:</strong> An access token issued by an Authorization Server that conforms to this profile and contains AAP claims (e.g. <tt>agent</tt>, <tt>task</tt>, <tt>capabilities</tt>).</t>
      <t><strong>Claim:</strong> A name/value pair in a JWT <xref target="RFC7519"/> payload. AAP defines additional claim names and structures for agent identity, task binding, capabilities, oversight, delegation, context, and audit.</t>
    </section>
    <section anchor="conventions-used-in-this-document">
      <name>Conventions Used in This Document</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"/> <xref target="RFC8174"/> when, and only when, they appear in all capitals, as shown here. For conformance: "MUST" and "SHALL" indicate mandatory requirements; "SHOULD" and "RECOMMENDED" indicate recommended but not mandatory behavior; "MAY" and "OPTIONAL" indicate optional behavior.</t>
    </section>
    <section anchor="overview-and-relationship-to-existing-standards">
      <name>Overview and Relationship to Existing Standards</name>
      <t>AAP operates within a standard OAuth architecture consisting of an Authorization Server (AS), Resource Servers (RS), and clients. In AAP, the client is an autonomous AI agent. Token issuance follows OAuth 2.0; typically the Client Credentials Grant <xref target="RFC6749"/> Section 4.4 is used for agent-to-API (M2M) flows. Client (agent) authentication MAY use standard client authentication (client secret, mTLS, etc.) or assertions (e.g. JWT-based client authentication) as per the deployment profile. When the agent is a workload identified by SPIFFE <xref target="SPIFFE"/>, the AS MAY accept SVIDs or derived tokens as part of client authentication; AAP does not define a new flow but MAY integrate with SPIFFE. Tokens issued by the AS include additional structured claims that Resource Servers MUST evaluate before allowing operations.</t>
      <t>AAP does not introduce a new identity or protocol scheme; it reuses existing standards and adds a layer of claims and validation rules.</t>
      <ul spacing="normal">
        <li>
          <t><strong>OAuth 2.0</strong> -- AAP uses the standard OAuth flow (AS, RS, client); the client is the agent; tokens are JWTs with additional AAP claims.</t>
        </li>
        <li>
          <t><strong>OpenID Connect</strong> -- Agent identity MAY be based on OIDC <tt>sub</tt> and <tt>iss</tt>; AAP adds agent-, task-, and capability-specific claims.</t>
        </li>
        <li>
          <t><strong>mTLS <xref target="RFC8705"/></strong> -- RECOMMENDED for proof-of-possession and for agent authentication toward the AS and RS.</t>
        </li>
        <li>
          <t><strong>DPoP <xref target="RFC9449"/></strong> -- Alternative to mTLS for proof-of-possession; RECOMMENDED when mTLS is not feasible.</t>
        </li>
        <li>
          <t><strong>SPIFFE</strong> -- OPTIONAL; the agent identifier (e.g. in <tt>agent</tt>) MAY be a SPIFFE ID (<tt>spiffe://trust-domain/...</tt>) when the deployment uses SPIFFE/SPIRE for workload identity.</t>
        </li>
        <li>
          <t><strong>Token Exchange <xref target="RFC8693"/></strong> -- Used for delegation and for privilege reduction on token re-issuance; the <tt>act</tt> (actor) claim MAY be used in the delegation chain.</t>
        </li>
      </ul>
    </section>
    <section anchor="jwt-claim-schema-aap-profile">
      <name>JWT Claim Schema (AAP Profile)</name>
      <t>AAP tokens extend standard JWT claims <xref target="RFC7519"/> with the following structured sections. The normative claim names are: <tt>agent</tt>, <tt>task</tt>, <tt>capabilities</tt>, <tt>oversight</tt>, <tt>delegation</tt>, <tt>context</tt>, <tt>audit</tt>. These names are registered in the IANA "JSON Web Token Claims" registry (see <xref target="iana-considerations"/>).</t>
      <t><strong>Formal Schema:</strong> Complete JSON Schema definitions for all AAP claims are provided in Appendix A and in the <tt>/schemas</tt> directory of the reference implementation. Implementations SHOULD validate tokens against these schemas to ensure conformance.</t>
      <section anchor="claim-semantics">
        <name>Claim Semantics</name>
        <ul spacing="normal">
          <li>
            <t><strong>Agent identity</strong> -- MAY be expressed via OIDC <tt>sub</tt> and <tt>iss</tt>, or via the <tt>agent</tt> claim. The <tt>agent</tt> claim MAY contain, among other fields, a SPIFFE ID (<tt>spiffe://trust-domain/...</tt>) when the deployment uses SPIFFE/SPIRE for workload identity.</t>
          </li>
          <li>
            <t><strong>Delegation</strong> -- The delegation chain MAY use the standard <tt>act</tt> (actor) claim from <xref target="RFC8693"/>. Optionally, <tt>delegation</tt> MAY carry additional metadata (e.g. depth, origin) when more than <tt>act</tt> is required.</t>
          </li>
          <li>
            <t><strong>Oversight</strong> -- Human oversight requirements are expressed as policy metadata in <tt>oversight</tt> (e.g. <tt>requires_approval_for</tt> for certain capability types, or <tt>max_autonomous_scope</tt>). AAP only carries the intent; enforcement is at the Resource Server or orchestrator (e.g. OIDC step-up with <tt>acr_values</tt> or an external approval API), and is out of scope for this profile.</t>
          </li>
          <li>
            <t><strong>Audit</strong> -- Trace identifiers in <tt>audit</tt> SHOULD be compatible with existing trace context propagation (e.g. W3C Trace Context, OpenTelemetry <xref target="OpenTelemetry"/>) so that logs can be correlated with distributed traces without defining a new audit schema.</t>
          </li>
        </ul>
      </section>
      <section anchor="structured-sections-claim-names">
        <name>Structured Sections (Claim Names)</name>
        <ul spacing="normal">
          <li>
            <t><tt>agent</tt></t>
          </li>
          <li>
            <t><tt>task</tt></t>
          </li>
          <li>
            <t><tt>capabilities</tt></t>
          </li>
          <li>
            <t><tt>oversight</tt></t>
          </li>
          <li>
            <t><tt>delegation</tt> (and/or <tt>act</tt> per <xref target="RFC8693"/>)</t>
          </li>
          <li>
            <t><tt>context</tt></t>
          </li>
          <li>
            <t><tt>audit</tt></t>
          </li>
        </ul>
      </section>
      <section anchor="example-claim-structures">
        <name>Example Claim Structures</name>
        <t>The following examples illustrate concrete claim shapes using the normative claim names defined above. Standard JWT claims (<tt>iss</tt>, <tt>sub</tt>, <tt>aud</tt>, <tt>exp</tt>, <tt>iat</tt>, <tt>jti</tt>) are assumed.</t>
        <t><strong>Agent identity</strong> -- Identifies the autonomous agent and its execution context.</t>
        <sourcecode type="json"><![CDATA[
{
  "agent": {
    "id": "agent-researcher-01",
    "type": "llm-autonomous",
    "operator": "org:blogcorp",
    "model": {
      "provider": "provider-name",
      "id": "model-id",
      "version": "model-version"
    },
    "runtime": {
      "environment": "kubernetes",
      "attested": true
    }
  }
}
]]></sourcecode>
        <t><strong>Task binding</strong> -- Binds the token to a specific task and purpose.</t>
        <sourcecode type="json"><![CDATA[
{
  "task": {
    "id": "task-id",
    "purpose": "research_and_draft_article",
    "topic": "example-topic",
    "data_sensitivity": "public",
    "created_by": "user-id"
  }
}
]]></sourcecode>
        <t><strong>Capabilities</strong> -- Authorized actions and constraints.</t>
        <sourcecode type="json"><![CDATA[
{
  "capabilities": [
    {
      "action": "search.web",
      "constraints": {
        "domains_allowed": ["example.org"],
        "max_requests_per_hour": 50
      }
    },
    {
      "action": "cms.create_draft",
      "constraints": {
        "status": "draft_only"
      }
    }
  ]
}
]]></sourcecode>
        <t><strong>Token Size Considerations:</strong></t>
        <t>AAP tokens with multiple capabilities and constraints can produce large JWTs. Many HTTP servers impose limits on the <tt>Authorization</tt> header (nginx default: 8KB, Apache: 8KB, AWS ALB: 16KB). Implementations SHOULD monitor token size and:</t>
        <ul spacing="normal">
          <li>
            <t>SHOULD warn when a serialized token exceeds 4KB</t>
          </li>
          <li>
            <t>SHOULD use token introspection <xref target="RFC7662"/> or reference tokens when capabilities exceed 10 entries</t>
          </li>
          <li>
            <t>MAY define a <tt>capabilities_ref</tt> claim containing a URI that references an external capability set, reducing token size while maintaining capability semantics</t>
          </li>
        </ul>
        <t><strong>Oversight</strong> -- Human approval requirements for certain actions.</t>
        <sourcecode type="json"><![CDATA[
{
  "oversight": {
    "requires_human_approval_for": [
      "cms.publish",
      "execute.payment"
    ],
    "approval_reference": "policy-id"
  }
}
]]></sourcecode>
        <t><strong>Delegation</strong> -- Depth and chain of delegation.</t>
        <sourcecode type="json"><![CDATA[
{
  "delegation": {
    "depth": 0,
    "max_depth": 2,
    "chain": ["agent:agent-researcher-01"]
  }
}
]]></sourcecode>
        <t><strong>Context</strong> -- Network, time, and geo restrictions.</t>
        <sourcecode type="json"><![CDATA[
{
  "context": {
    "network_zone": "public-internet-only",
    "time_window": {
      "start": "ISO-8601",
      "end": "ISO-8601"
    },
    "geo_restriction": "none"
  }
}
]]></sourcecode>
        <t><strong>Audit</strong> -- Trace and session identifiers for logging.</t>
        <sourcecode type="json"><![CDATA[
{
  "audit": {
    "log_level": "full",
    "trace_id": "trace-id",
    "session_id": "session-id"
  }
}
]]></sourcecode>
        <section anchor="string-length-limits">
          <name>String Length Limits</name>
          <t>To prevent abuse and ensure interoperability, implementations SHOULD enforce the following string length limits:</t>
          <table>
            <thead>
              <tr>
                <th align="left">Claim Field</th>
                <th align="left">Min Length</th>
                <th align="left">Max Length</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td align="left">
                  <tt>agent.id</tt></td>
                <td align="left">1</td>
                <td align="left">128</td>
              </tr>
              <tr>
                <td align="left">
                  <tt>agent.type</tt></td>
                <td align="left">1</td>
                <td align="left">64</td>
              </tr>
              <tr>
                <td align="left">
                  <tt>agent.operator</tt></td>
                <td align="left">1</td>
                <td align="left">256</td>
              </tr>
              <tr>
                <td align="left">
                  <tt>task.id</tt></td>
                <td align="left">1</td>
                <td align="left">128</td>
              </tr>
              <tr>
                <td align="left">
                  <tt>task.purpose</tt></td>
                <td align="left">1</td>
                <td align="left">256</td>
              </tr>
              <tr>
                <td align="left">
                  <tt>capabilities[].action</tt></td>
                <td align="left">1</td>
                <td align="left">128</td>
              </tr>
              <tr>
                <td align="left">
                  <tt>delegation.chain[]</tt> (each entry)</td>
                <td align="left">1</td>
                <td align="left">128</td>
              </tr>
              <tr>
                <td align="left">
                  <tt>audit.trace_id</tt></td>
                <td align="left">1</td>
                <td align="left">256</td>
              </tr>
            </tbody>
          </table>
          <t>Authorization Servers MUST reject token requests containing claim values exceeding these limits. Resource Servers SHOULD reject tokens with values exceeding these limits.</t>
        </section>
      </section>
      <section anchor="complete-example-payload">
        <name>Complete Example Payload</name>
        <t>The following is a single JSON object representing the decoded payload of an AAP access token (claims only; signature and encoding are per RFC 7519). Standard JWT claims and all AAP claims are combined with consistent values (e.g. same <tt>agent.id</tt> and <tt>task.id</tt> referenced in <tt>audit</tt>).</t>
        <sourcecode type="json"><![CDATA[
{
  "iss": "https://as.example.com",
  "sub": "agent-researcher-01",
  "aud": "https://api.example.com",
  "exp": 1704067200,
  "iat": 1704063600,
  "jti": "token-unique-id-123",
  "agent": {
    "id": "agent-researcher-01",
    "type": "llm-autonomous",
    "operator": "org:blogcorp",
    "model": {
      "provider": "provider-name",
      "id": "model-id",
      "version": "model-version"
    },
    "runtime": {
      "environment": "kubernetes",
      "attested": true
    }
  },
  "task": {
    "id": "task-id",
    "purpose": "research_and_draft_article",
    "topic": "example-topic",
    "data_sensitivity": "public",
    "created_by": "user-id"
  },
  "capabilities": [
    {
      "action": "search.web",
      "constraints": {
        "domains_allowed": ["example.org"],
        "max_requests_per_hour": 50
      }
    },
    {
      "action": "cms.create_draft",
      "constraints": {
        "status": "draft_only"
      }
    }
  ],
  "oversight": {
    "requires_human_approval_for": [
      "cms.publish",
      "execute.payment"
    ],
    "approval_reference": "policy-id"
  },
  "delegation": {
    "depth": 0,
    "max_depth": 2,
    "chain": ["agent:agent-researcher-01"]
  },
  "context": {
    "network_zone": "public-internet-only",
    "time_window": {
      "start": "2024-01-01T00:00:00Z",
      "end": "2024-01-01T23:59:59Z"
    },
    "geo_restriction": "none"
  },
  "audit": {
    "log_level": "full",
    "trace_id": "trace-id",
    "session_id": "session-id"
  }
}
]]></sourcecode>
        <section anchor="not-before-nbf-claim">
          <name>Not Before (<tt>nbf</tt>) Claim</name>
          <t>The <tt>nbf</tt> (Not Before) claim <xref target="RFC7519"/> Section 4.1.5 MAY be included in AAP tokens. This is useful for:
- Scheduled tasks that should not start before a given time
- Tokens pre-issued for future use (e.g., batch operations starting at a specific hour)</t>
          <t>If present, Resource Servers MUST reject tokens presented before the <tt>nbf</tt> time minus clock skew tolerance. The same clock skew tolerance applied to <tt>exp</tt> validation (RECOMMENDED: 5 minutes) SHOULD be applied to <tt>nbf</tt> validation.</t>
        </section>
      </section>
      <section anchor="action-name-grammar-abnf">
        <name>Action Name Grammar (ABNF)</name>
        <t>Action names in the <tt>action</tt> field of capabilities MUST conform to the following ABNF grammar <xref target="RFC5234"/>:</t>
        <sourcecode type="abnf"><![CDATA[
action-name = component *( "." component )
component = ALPHA *( ALPHA / DIGIT / "-" / "_" )
]]></sourcecode>
        <t>Where:
- <tt>ALPHA</tt> is any ASCII alphabetic character (a-z, A-Z)
- <tt>DIGIT</tt> is any ASCII digit (0-9)
- Component names MUST start with an alphabetic character
- Component names MAY contain hyphens and underscores after the first character
- Action names are formed by concatenating components with dots (.)</t>
        <t>Examples of valid action names:
- <tt>search.web</tt>
- <tt>cms.create_draft</tt>
- <tt>cms.publish</tt>
- <tt>execute.payment</tt>
- <tt>api.v2.users.read</tt>
- <tt>data-pipeline.transform_records</tt></t>
        <t>Examples of invalid action names:
- <tt>search..web</tt> (double dot)
- <tt>.search.web</tt> (starts with dot)
- <tt>search.web.</tt> (ends with dot)
- <tt>9api.read</tt> (component starts with digit)
- <tt>search.web*</tt> (wildcard not allowed)</t>
        <t><strong>Matching Semantics:</strong></t>
        <t>Resource Servers MUST perform <strong>exact string matching</strong> on action names. Wildcard matching (e.g., <tt>cms.*</tt> matching <tt>cms.publish</tt>) is NOT part of this specification but MAY be defined in future extensions.</t>
        <t>Action names are <strong>case-sensitive</strong>. <tt>search.Web</tt> and <tt>search.web</tt> are different actions.</t>
        <t>Versioning MAY be expressed through namespace components:
- <tt>api.v1.search.web</tt>
- <tt>api.v2.search.web</tt></t>
      </section>
      <section anchor="standard-constraint-types-and-semantics">
        <name>Standard Constraint Types and Semantics</name>
        <t>This section defines the semantics of standard constraint types used within capability constraints. Resource Servers MUST enforce these constraints according to the semantics defined here.</t>
        <t><strong>Constraint Enforcement Semantics:</strong></t>
        <t>When multiple capabilities match the same action:
- <strong>OR semantics</strong>: If ANY capability grants the action, the request is authorized (subject to that capability's constraints)
- Resource Server evaluates capabilities in order and uses the first match</t>
        <t>When multiple constraints exist within a single capability:
- <strong>AND semantics</strong>: ALL constraints MUST be satisfied for the action to be authorized
- If any constraint fails, the entire request MUST be denied</t>
        <t><strong>Empty Constraints:</strong></t>
        <t>When <tt>constraints</tt> is an empty object <tt>{}</tt> or is absent from a capability, NO restrictions are applied to that capability. The capability grants the action without rate limits, domain restrictions, or time windows. An empty <tt>constraints</tt> object and a missing <tt>constraints</tt> key are semantically equivalent.</t>
        <t><strong>Constraint Precedence Rules:</strong></t>
        <t>When multiple constraints of the same type exist (e.g., from capability-level and global policy), the following precedence rules apply:
- <strong>Numeric constraints</strong> (rate limits, size limits): Use the MORE restrictive (lower) value
- <strong>Allow-lists</strong> (<tt>domains_allowed</tt>, <tt>allowed_methods</tt>, <tt>allowed_regions</tt>): Use intersection
- <strong>Block-lists</strong> (<tt>domains_blocked</tt>): Use union
- <strong>Time windows</strong>: Use intersection of time ranges (narrower window)</t>
        <section anchor="rate-limiting-constraints">
          <name>Rate Limiting Constraints</name>
          <table>
            <thead>
              <tr>
                <th align="left">Constraint Name</th>
                <th align="left">Type</th>
                <th align="left">Semantics</th>
                <th align="left">Example</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td align="left">
                  <tt>max_requests_per_hour</tt></td>
                <td align="left">integer</td>
                <td align="left">Fixed hourly quota. Window resets at minute 0 of each hour (clock hour). Failed requests count toward quota. Retries count as new requests.</td>
                <td align="left">
                  <tt>50</tt></td>
              </tr>
              <tr>
                <td align="left">
                  <tt>max_requests_per_minute</tt></td>
                <td align="left">integer</td>
                <td align="left">Sliding 60-second window from current request time backwards. Resource Server MUST track request timestamps.</td>
                <td align="left">
                  <tt>10</tt></td>
              </tr>
              <tr>
                <td align="left">
                  <tt>max_requests_per_day</tt></td>
                <td align="left">integer</td>
                <td align="left">Fixed daily quota. Window resets at 00:00:00 UTC. Failed requests count toward quota.</td>
                <td align="left">
                  <tt>1000</tt></td>
              </tr>
            </tbody>
          </table>
          <t><strong>Implementation Notes:</strong>
- Rate limits are per token (identified by <tt>jti</tt> claim)
- Resource Servers SHOULD use distributed rate limiting for multi-instance deployments
- On quota exceeded: Resource Server MUST return HTTP 429 with <tt>aap_constraint_violation</tt> error and a <tt>Retry-After</tt> header
- Rate limit state SHOULD be cleared when token expires
- Rate limit enforcement MUST use strict UTC timestamps. Clock skew tolerance applies only to token expiration (<tt>exp</tt> and <tt>nbf</tt> claims), NOT to rate limit windows</t>
        </section>
        <section anchor="domain-and-network-constraints">
          <name>Domain and Network Constraints</name>
          <dl>
            <dt><tt>domains_allowed</tt> (array of strings):</dt>
            <dd>
              <t>DNS suffix matching (rightmost matching).
<tt>subdomain.example.org</tt> matches <tt>example.org</tt>
in allowlist. Resource Server MUST extract domain
from request target URL and validate.
Example: <tt>["example.org", "trusted.example"]</tt></t>
            </dd>
            <dt><tt>domains_blocked</tt> (array of strings):</dt>
            <dd>
              <t>Blocklist takes precedence over allowlist.
If both are present, blocked domains MUST be
checked first.
Example: <tt>["malicious.example"]</tt></t>
            </dd>
            <dt><tt>ip_ranges_allowed</tt> (array of CIDR strings):</dt>
            <dd>
              <t>IP ranges in CIDR notation. Resource Server
validates destination IP of request.
Example: <tt>["192.168.1.0/24"]</tt></t>
            </dd>
          </dl>
          <t><strong>Domain Matching Algorithm:</strong></t>
          <sourcecode type="text"><![CDATA[
1. Extract domain from request target URL
2. If domains_blocked is present and domain
   matches any blocked entry: DENY
3. If domains_allowed is present:
   a. Check if domain is exact match or has allowed domain as suffix
   b. If match found: ALLOW (proceed to other constraints)
   c. If no match: DENY
4. If neither constraint present: proceed to other constraints
]]></sourcecode>
        </section>
        <section anchor="time-based-constraints">
          <name>Time-Based Constraints</name>
          <table>
            <thead>
              <tr>
                <th align="left">Constraint Name</th>
                <th align="left">Type</th>
                <th align="left">Semantics</th>
                <th align="left">Example</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td align="left">
                  <tt>time_window.start</tt></td>
                <td align="left">ISO 8601 string</td>
                <td align="left">Request timestamp MUST be after or equal to this time (inclusive). Resource Server uses its own clock with max 5-minute skew tolerance.</td>
                <td align="left">
                  <tt>"2024-01-01T00:00:00Z"</tt></td>
              </tr>
              <tr>
                <td align="left">
                  <tt>time_window.end</tt></td>
                <td align="left">ISO 8601 string</td>
                <td align="left">Request timestamp MUST be before this time (exclusive).</td>
                <td align="left">
                  <tt>"2024-12-31T23:59:59Z"</tt></td>
              </tr>
            </tbody>
          </table>
          <t><strong>Clock Skew Handling:</strong>
- Resource Server clock is authoritative
- Resource Server MAY tolerate up to 5 minutes of clock skew
- If request timestamp is outside window beyond skew tolerance: DENY with <tt>aap_constraint_violation</tt></t>
        </section>
        <section anchor="delegation-constraints">
          <name>Delegation Constraints</name>
          <table>
            <thead>
              <tr>
                <th align="left">Constraint Name</th>
                <th align="left">Type</th>
                <th align="left">Semantics</th>
                <th align="left">Example</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td align="left">
                  <tt>max_depth</tt></td>
                <td align="left">integer (0-10)</td>
                <td align="left">Maximum delegation depth for this capability. 0 means no delegation allowed. Resource Server MUST validate <tt>delegation.depth &lt;= max_depth</tt>.</td>
                <td align="left">
                  <tt>2</tt></td>
              </tr>
            </tbody>
          </table>
        </section>
        <section anchor="data-and-security-constraints">
          <name>Data and Security Constraints</name>
          <table>
            <thead>
              <tr>
                <th align="left">Constraint Name</th>
                <th align="left">Type</th>
                <th align="left">Semantics</th>
                <th align="left">Example</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td align="left">
                  <tt>max_response_size</tt></td>
                <td align="left">integer</td>
                <td align="left">Maximum response size in bytes. Resource Server SHOULD enforce during response streaming.</td>
                <td align="left">
                  <tt>10485760</tt> (10MB)</td>
              </tr>
              <tr>
                <td align="left">
                  <tt>max_request_size</tt></td>
                <td align="left">integer</td>
                <td align="left">Maximum request payload size in bytes. Resource Server MUST validate before processing.</td>
                <td align="left">
                  <tt>1048576</tt> (1MB)</td>
              </tr>
              <tr>
                <td align="left">
                  <tt>data_classification_max</tt></td>
                <td align="left">enum string</td>
                <td align="left">Maximum data classification level accessible. Values: <tt>public</tt>, <tt>internal</tt>, <tt>confidential</tt>, <tt>restricted</tt>. Resource Server enforces based on resource classification.</td>
                <td align="left">
                  <tt>"internal"</tt></td>
              </tr>
              <tr>
                <td align="left">
                  <tt>allowed_methods</tt></td>
                <td align="left">array of strings</td>
                <td align="left">HTTP methods allowed. Resource Server MUST validate request method against this list.</td>
                <td align="left">
                  <tt>["GET", "POST"]</tt></td>
              </tr>
              <tr>
                <td align="left">
                  <tt>allowed_regions</tt></td>
                <td align="left">array of ISO 3166-1 alpha-2 codes</td>
                <td align="left">Geographic regions where requests are allowed. Resource Server validates based on request origin or target resource location.</td>
                <td align="left">
                  <tt>["US", "CA", "GB"]</tt></td>
              </tr>
            </tbody>
          </table>
        </section>
      </section>
      <section anchor="delegation-chain-semantics">
        <name>Delegation Chain Semantics</name>
        <t>The <tt>delegation</tt> claim tracks authorization delegation across agents and tools using OAuth Token Exchange <xref target="RFC8693"/>.</t>
        <t><strong>Delegation Depth Calculation:</strong></t>
        <sourcecode type="text"><![CDATA[
depth = 0: Original agent token (no delegation)
depth = 1: Token obtained via Token Exchange from depth=0 token
depth = n: Token obtained via Token Exchange from depth=n-1 token
]]></sourcecode>
        <t><strong>Authorization Server Requirements:</strong>
- AS MUST verify that <tt>depth &lt; max_depth</tt> in the parent token BEFORE issuing a derived token with <tt>depth = parent_depth + 1</tt>. That is, the AS MUST reject the Token Exchange request if the parent token's <tt>delegation.depth &gt;= delegation.max_depth</tt>.
- AS MUST increment <tt>delegation.depth</tt> by 1 on each Token Exchange
- AS MUST append the current agent/tool identifier to <tt>delegation.chain</tt> array
- AS MUST copy and preserve <tt>delegation.chain</tt> from parent token
- AS MUST NOT issue token if resulting depth would exceed capability's <tt>max_depth</tt> constraint
- AS MUST NOT issue token if resulting depth exceeds <tt>delegation.max_depth</tt> claim</t>
        <t><strong>Resource Server Requirements:</strong>
- RS MUST reject requests if <tt>delegation.depth &gt; delegation.max_depth</tt>
- RS MUST validate delegation depth against capability-specific <tt>max_depth</tt> constraints
- RS MUST validate that <tt>delegation.chain</tt> length equals <tt>delegation.depth + 1</tt></t>
        <t><strong>Delegation Chain Format:</strong></t>
        <sourcecode type="json"><![CDATA[
{
  "delegation": {
    "depth": 2,
    "max_depth": 3,
    "chain": [
      "spiffe://trust.example.com/agent/researcher-01",
      "spiffe://trust.example.com/tool/web-scraper",
      "https://as.example.com/agents/translator"
    ],
    "parent_jti": "parent-token-jti-value"
  }
}
]]></sourcecode>
        <t><strong>Privilege Reduction Requirements:</strong></t>
        <t>When issuing a derived token via Token Exchange, the Authorization Server MUST reduce privileges by one or more of:
- Removing capabilities (subset of parent capabilities)
- Adding stricter constraints (lower rate limits, narrower domain lists)
- Reducing token lifetime (shorter <tt>exp</tt> time)
- Reducing <tt>max_depth</tt> (limit further delegation)</t>
        <t>The Authorization Server MUST NOT grant capabilities not present in the parent token.</t>
        <t><strong>Token Refresh Strategy:</strong></t>
        <t>AAP tokens, especially delegated tokens with reduced lifetimes, may require refresh before expiration:
- Agents SHOULD refresh tokens at 80% of the token's lifetime (e.g., at 48 minutes for a 60-minute token)
- Refresh MUST use the same grant type that obtained the original token (Client Credentials Grant for original tokens)
- Delegated tokens (obtained via Token Exchange) MUST NOT be refreshed; a new Token Exchange MUST be performed against the parent token
- If the parent token has expired, the agent MUST obtain a new original token before performing Token Exchange</t>
        <t><strong>Preventing Confused Deputy Attacks:</strong></t>
        <t>To prevent confused deputy attacks where a delegated token is replayed:
- Each token MUST have a unique <tt>jti</tt> (JWT ID)
- Delegation chain MUST be immutable (copied, never modified)
- Token Exchange MUST record <tt>parent_jti</tt> linking to parent token
- Authorization Server MAY implement token family revocation (revoking parent revokes all descendants)</t>
      </section>
    </section>
    <section anchor="threat-model-summary">
      <name>Threat Model Summary</name>
      <t>AAP assumes environments where autonomous AI agents can access APIs, perform chained actions, and operate for extended periods without direct human intervention. The following threats are in scope; for each, agent-specific risks and AAP mitigations are noted.</t>
      <section anchor="agent-impersonation">
        <name>Agent Impersonation</name>
        <t><strong>Threat:</strong> An attacker obtains agent credentials or steals a token and acts as an authorized agent.</t>
        <t><strong>Agent-specific risk:</strong> An agent may have broad permissions and act many times per minute, amplifying impact.</t>
        <t><strong>Mitigations:</strong> Short-lived tokens; Proof-of-Possession (mTLS or DPoP); attested workload identity when possible; strong agent identity claims (<tt>agent.id</tt>, <tt>agent.model</tt>, <tt>runtime.attested</tt>).</t>
      </section>
      <section anchor="capability-escalation">
        <name>Capability Escalation</name>
        <t><strong>Threat:</strong> The agent attempts actions beyond what is authorized (e.g. publish instead of create draft).</t>
        <t><strong>Agent-specific risk:</strong> Agents may generate new strategies or calls not anticipated by the developer.</t>
        <t><strong>Mitigations:</strong> Structured capabilities with constraints (not broad scopes); mandatory validation of action + constraints by the Resource Server; task-bound tokens (<tt>task.purpose</tt>); explicit separation between automatic and human-supervised actions.</t>
      </section>
      <section anchor="purpose-drift">
        <name>Purpose Drift</name>
        <t><strong>Threat:</strong> A token issued for one task is reused for another (e.g. token for "public health research" used for "extracting sensitive data").</t>
        <t><strong>Mitigations:</strong> Mandatory <tt>task</tt> claim with <tt>purpose</tt>; Resource Servers verify consistency between declared purpose and requested operation; short time windows; reject requests that do not match the declared context.</t>
      </section>
      <section anchor="malicious-or-excessive-delegation">
        <name>Malicious or Excessive Delegation</name>
        <t><strong>Threat:</strong> An agent delegates to tools or sub-agents with more privileges than intended.</t>
        <t><strong>Agent-specific risk:</strong> Agent ecosystems are often modular and chained.</t>
        <t><strong>Mitigations:</strong> OAuth Token Exchange with privilege reduction; <tt>delegation.depth</tt> and <tt>delegation.chain</tt> claims; maximum depth limit (<tt>max_depth</tt>); prohibition of delegation for certain critical capabilities.</t>
      </section>
      <section anchor="large-scale-automated-misuse">
        <name>Large-Scale Automated Misuse</name>
        <t><strong>Threat:</strong> An authorized agent performs valid actions at harmful volume (spam, abusive scraping, mass resource creation).</t>
        <t><strong>Mitigations:</strong> Quantitative constraints in capabilities (<tt>max_requests_per_hour</tt>, etc.); enforced by the Resource Server; monitoring and rapid token revocation; mandatory audit with traceability by task and agent.</t>
      </section>
      <section anchor="prompt-data-injection">
        <name>Prompt / Data Injection</name>
        <t><strong>Threat:</strong> A third party manipulates external data to induce the agent to use its permissions in unwanted ways.</t>
        <t><strong>Note:</strong> AAP does not control the AI model but can limit impact.</t>
        <t><strong>Mitigations:</strong> Tokens bound to specific purpose; restriction of domains, action types, and volumes; separation of read vs. write vs. execute capabilities; human oversight required for high-impact actions.</t>
      </section>
      <section anchor="lack-of-traceability">
        <name>Lack of Traceability</name>
        <t><strong>Threat:</strong> Inability to reconstruct which agent did which action under which authorization.</t>
        <t><strong>Agent-specific risk:</strong> Decisions can be complex and chained.</t>
        <t><strong>Mitigations:</strong> Audit claims (<tt>audit.trace_id</tt>, <tt>task.id</tt>); mandatory propagation of trace identifiers; inclusion of delegation chain in derived tokens.</t>
      </section>
      <section anchor="use-outside-intended-environment">
        <name>Use Outside Intended Environment</name>
        <t><strong>Threat:</strong> A valid token is used from a network, region, or environment other than the one authorized.</t>
        <t><strong>Mitigations:</strong> Context claims (<tt>context.network_zone</tt>, time windows); additional validation by the Resource Server; combination with traditional network controls.</t>
      </section>
      <section anchor="summary">
        <name>Summary</name>
        <t>AAP assumes that agents are potentially powerful and highly automated; risk depends not only on who accesses but on purpose, limits, and delegation chain; authorization MUST be contextual, restricted, and auditable. AAP extends OAuth from a broad-permission model toward verifiable operational contracts between organizations, agents, and services.</t>
      </section>
    </section>
    <section anchor="resource-server-validation-rules">
      <name>Resource Server Validation Rules</name>
      <t>This section defines the validation rules that a Resource Server (RS) MUST apply before accepting a request authenticated with an AAP access token. These rules extend standard OAuth 2.x token validation with agent-specific, task-bound, and capability-aware checks.</t>
      <t><strong>Recommended Validation Order:</strong></t>
      <t>Resource Servers SHOULD validate tokens in the following order to fail fast on inexpensive checks:</t>
      <ol spacing="normal" type="1"><li>
          <t>Extract Bearer token <xref target="RFC6750"/> from <tt>Authorization</tt> header</t>
        </li>
        <li>
          <t>Decode JWT header (reject unknown algorithms)</t>
        </li>
        <li>
          <t>Verify signature using trusted AS public key</t>
        </li>
        <li>
          <t>Check <tt>exp</tt> (with clock skew tolerance); check <tt>nbf</tt> if present</t>
        </li>
        <li>
          <t>Check <tt>aud</tt> matches Resource Server identifier</t>
        </li>
        <li>
          <t>Check <tt>iss</tt> is a trusted Authorization Server</t>
        </li>
        <li>
          <t>Validate required AAP claims are present (<tt>agent</tt>, <tt>task</tt>, <tt>capabilities</tt>)</t>
        </li>
        <li>
          <t>Validate <tt>agent</tt> identity (<tt>id</tt>, <tt>type</tt>, <tt>operator</tt>)</t>
        </li>
        <li>
          <t>Validate <tt>task</tt> binding (<tt>id</tt>, <tt>purpose</tt>)</t>
        </li>
        <li>
          <t>Validate delegation chain (depth, chain length) if <tt>delegation</tt> present</t>
        </li>
        <li>
          <t>Match capability to requested action</t>
        </li>
        <li>
          <t>Enforce capability constraints (rate limits, domains, time windows, etc.)</t>
        </li>
      </ol>
      <section anchor="standard-token-validation">
        <name>Standard Token Validation</name>
        <ul spacing="normal">
          <li>
            <t>The RS MUST verify the token signature using trusted Authorization Server keys.</t>
          </li>
          <li>
            <t>The RS MUST verify the token has not expired (<tt>exp</tt> claim) and is within acceptable clock skew.</t>
          </li>
          <li>
            <t>The RS MUST verify the audience (<tt>aud</tt>) matches the Resource Server.</t>
          </li>
          <li>
            <t>The RS MUST verify the issuer (<tt>iss</tt>) is trusted.</t>
          </li>
          <li>
            <t>The RS MUST verify the token has not been revoked if a revocation or introspection mechanism is in place (<xref target="RFC7009"/>, <xref target="RFC7662"/> when introspection is used).</t>
          </li>
        </ul>
        <t><strong>JWKS Caching and Refresh:</strong></t>
        <t>Resource Servers that obtain AS public keys via JWKS endpoint MUST implement the following caching behavior:
- SHOULD cache JWKS responses for at least 5 minutes to avoid excessive requests
- MUST refresh JWKS when encountering an unknown <tt>kid</tt> (key ID) in a token header
- SHOULD implement exponential backoff for JWKS refresh failures (starting at 1 second, maximum 5 minutes)
- MUST NOT cache JWKS responses for more than 24 hours
- SHOULD respect HTTP cache control headers (<tt>Cache-Control</tt>, <tt>Expires</tt>) from the JWKS endpoint response</t>
      </section>
      <section anchor="proof-of-possession-validation">
        <name>Proof of Possession Validation</name>
        <t>For AAP tokens, proof-of-possession is RECOMMENDED; for high-risk profiles it SHOULD be REQUIRED. Implementations MUST support at least one of: DPoP <xref target="RFC9449"/> or mTLS client authentication <xref target="RFC8705"/>. If mTLS or DPoP is used, the RS MUST validate that the requester demonstrates possession of the key bound to the token. Bearer-only usage is not sufficient for high-risk agent capabilities.</t>
      </section>
      <section anchor="agent-identity-validation">
        <name>Agent Identity Validation</name>
        <ul spacing="normal">
          <li>
            <t>The RS MUST ensure the <tt>agent</tt> claim is present and well-formed.</t>
          </li>
          <li>
            <t>The RS MUST verify <tt>agent.id</tt> is recognized or allowed by local policy.</t>
          </li>
          <li>
            <t>If present, the RS MUST evaluate <tt>agent.runtime.attested</tt> according to local trust requirements.</t>
          </li>
          <li>
            <t>If model information is included, the RS MUST ensure the model identifier is not on a deny list.</t>
          </li>
        </ul>
      </section>
      <section anchor="task-binding-validation">
        <name>Task Binding Validation</name>
        <ul spacing="normal">
          <li>
            <t>The RS MUST ensure the <tt>task</tt> claim is present for agent-issued tokens.</t>
          </li>
          <li>
            <t>The RS MUST verify the current request is consistent with <tt>task.purpose</tt>.</t>
          </li>
          <li>
            <t>The RS MUST reject requests that clearly fall outside the declared purpose or data sensitivity.</t>
          </li>
          <li>
            <t>The RS MAY enforce that the token is used only within the declared time window.</t>
          </li>
        </ul>
        <t><strong>Task Consistency Levels:</strong></t>
        <t>Implementations SHOULD apply task consistency validation at the following levels:</t>
        <ol spacing="normal" type="1"><li>
            <t><strong>Structural (MUST):</strong> <tt>task.id</tt> and <tt>task.purpose</tt> are present and non-empty strings.</t>
          </li>
          <li>
            <t><strong>Temporal (SHOULD):</strong> If <tt>task.created_at</tt> is present, it MUST NOT be in the future (beyond clock skew tolerance). If <tt>task.expires_at</tt> is present, the RS MUST reject tokens for tasks past their expiration.</t>
          </li>
          <li>
            <t><strong>Semantic (MAY):</strong> The RS MAY implement application-specific logic to validate that the requested action is plausibly related to <tt>task.purpose</tt> (e.g., a <tt>research</tt> purpose should not trigger <tt>data.delete</tt> actions). This level is implementation-specific and not standardized by this profile.</t>
          </li>
        </ol>
      </section>
      <section anchor="capability-enforcement">
        <name>Capability Enforcement</name>
        <t>The Resource Server MUST treat the <tt>capabilities</tt> claim as the authoritative source of permitted actions.</t>
        <ul spacing="normal">
          <li>
            <t>The RS MUST match the requested operation to a <tt>capability.action</tt> entry.</t>
          </li>
          <li>
            <t>The RS MUST enforce all constraints associated with the matching capability.</t>
          </li>
          <li>
            <t>The RS MUST deny the request if no matching capability is found.</t>
          </li>
          <li>
            <t>The RS MUST apply quantitative limits such as rate limits or volume caps defined in constraints.</t>
          </li>
        </ul>
      </section>
      <section anchor="oversight-requirement-enforcement">
        <name>Oversight Requirement Enforcement</name>
        <ul spacing="normal">
          <li>
            <t>If the requested action appears in <tt>oversight.requires_human_approval_for</tt>, the RS MUST NOT complete the action automatically.</t>
          </li>
          <li>
            <t>The RS SHOULD return a response indicating that human approval is required.</t>
          </li>
          <li>
            <t>The RS MAY provide a reference to the approval workflow indicated by <tt>approval_reference</tt>.</t>
          </li>
        </ul>
      </section>
      <section anchor="delegation-chain-validation">
        <name>Delegation Chain Validation</name>
        <ul spacing="normal">
          <li>
            <t>If a <tt>delegation</tt> claim is present, the RS MUST verify that <tt>delegation.depth</tt> does not exceed local policy limits.</t>
          </li>
          <li>
            <t>The RS MUST inspect <tt>delegation.chain</tt> to understand upstream actors.</t>
          </li>
          <li>
            <t>The RS SHOULD apply stricter policy if the chain includes untrusted or unknown actors.</t>
          </li>
          <li>
            <t>The RS MUST ensure delegated tokens do not contain broader capabilities than the original agent token.</t>
          </li>
        </ul>
      </section>
      <section anchor="contextual-restrictions-enforcement">
        <name>Contextual Restrictions Enforcement</name>
        <ul spacing="normal">
          <li>
            <t>If <tt>context.network_zone</tt> is present, the RS MUST verify the request originates from an allowed environment when technically feasible.</t>
          </li>
          <li>
            <t>The RS MUST enforce time window constraints if <tt>context.time_window</tt> is present.</t>
          </li>
          <li>
            <t>The RS MUST apply additional checks for geo or network restrictions when provided.</t>
          </li>
        </ul>
      </section>
      <section anchor="audit-and-trace-propagation">
        <name>Audit and Trace Propagation</name>
        <ul spacing="normal">
          <li>
            <t>The RS MUST extract <tt>audit.trace_id</tt> and propagate it to internal logs.</t>
          </li>
          <li>
            <t>The RS MUST log <tt>agent.id</tt>, <tt>task.id</tt>, action performed, and authorization decision outcome.</t>
          </li>
          <li>
            <t>The RS MUST ensure logs are protected against tampering according to organizational policy.</t>
          </li>
        </ul>
      </section>
      <section anchor="failure-handling">
        <name>Failure Handling</name>
        <ul spacing="normal">
          <li>
            <t>If any mandatory validation step fails, the RS MUST deny the request.</t>
          </li>
          <li>
            <t>Error responses SHOULD avoid leaking sensitive authorization details.</t>
          </li>
          <li>
            <t>Repeated violations MAY trigger rate limiting or temporary blocking of the agent identity.</t>
          </li>
        </ul>
        <t><strong>Error responses:</strong> On validation failure, the RS MUST use the following HTTP status codes:</t>
        <table>
          <thead>
            <tr>
              <th align="left">HTTP Status</th>
              <th align="left">Error Code</th>
              <th align="left">Condition</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">401 Unauthorized</td>
              <td align="left">
                <tt>invalid_token</tt></td>
              <td align="left">Signature invalid, token expired, audience mismatch, issuer untrusted, missing required claims</td>
            </tr>
            <tr>
              <td align="left">403 Forbidden</td>
              <td align="left">
                <tt>aap_invalid_capability</tt></td>
              <td align="left">No matching capability for requested action</td>
            </tr>
            <tr>
              <td align="left">403 Forbidden</td>
              <td align="left">
                <tt>aap_domain_not_allowed</tt></td>
              <td align="left">Domain constraint violation</td>
            </tr>
            <tr>
              <td align="left">403 Forbidden</td>
              <td align="left">
                <tt>aap_capability_expired</tt></td>
              <td align="left">Time window constraint violation</td>
            </tr>
            <tr>
              <td align="left">403 Forbidden</td>
              <td align="left">
                <tt>aap_approval_required</tt></td>
              <td align="left">Human oversight required</td>
            </tr>
            <tr>
              <td align="left">403 Forbidden</td>
              <td align="left">
                <tt>aap_excessive_delegation</tt></td>
              <td align="left">Delegation depth exceeded</td>
            </tr>
            <tr>
              <td align="left">403 Forbidden</td>
              <td align="left">
                <tt>aap_invalid_delegation_chain</tt></td>
              <td align="left">Malformed delegation chain</td>
            </tr>
            <tr>
              <td align="left">403 Forbidden</td>
              <td align="left">
                <tt>aap_task_mismatch</tt></td>
              <td align="left">Request inconsistent with task purpose</td>
            </tr>
            <tr>
              <td align="left">403 Forbidden</td>
              <td align="left">
                <tt>aap_agent_not_recognized</tt></td>
              <td align="left">Agent identity not recognized by policy</td>
            </tr>
            <tr>
              <td align="left">403 Forbidden</td>
              <td align="left">
                <tt>aap_invalid_context</tt></td>
              <td align="left">Context restriction violated</td>
            </tr>
            <tr>
              <td align="left">413 Payload Too Large</td>
              <td align="left">
                <tt>request_too_large</tt></td>
              <td align="left">Payload exceeds <tt>max_request_size</tt> constraint</td>
            </tr>
            <tr>
              <td align="left">429 Too Many Requests</td>
              <td align="left">
                <tt>aap_constraint_violation</tt></td>
              <td align="left">Rate limit constraint exceeded</td>
            </tr>
          </tbody>
        </table>
        <t><strong>Note:</strong> Rate limit violations MUST return HTTP 429 (Too Many Requests) with a <tt>Retry-After</tt> header, NOT HTTP 403. Other constraint violations (domain, time window) MUST return HTTP 403.</t>
        <t>The response body SHOULD follow a structure such as <tt>error</tt> and optional <tt>error_description</tt> (e.g. RFC 6749 / RFC 6750 style) without revealing internal authorization details. Avoid including in <tt>error_description</tt> the exact authorization rule that failed, so as not to leak information to an attacker. See Appendix C for the complete error code reference.</t>
      </section>
    </section>
    <section anchor="authorization-server-requirements">
      <name>Authorization Server Requirements</name>
      <t>This section defines the requirements that an Authorization Server (AS) MUST satisfy to issue AAP access tokens. These extend standard OAuth 2.0 token issuance with agent-specific binding, capabilities, and audit.</t>
      <section anchor="authentication">
        <name>Authentication</name>
        <ul spacing="normal">
          <li>
            <t>Strongly authenticate agents before issuing tokens (e.g. Client Credentials Grant per RFC 6749 Section 4.4).</t>
          </li>
          <li>
            <t>Support client authentication via client secret, mTLS, or assertions (e.g. JWT-based client authentication) as per the deployment profile.</t>
          </li>
          <li>
            <t>Optionally integrate with SPIFFE SVIDs when the agent is a workload identified by SPIFFE <xref target="SPIFFE"/>.</t>
          </li>
        </ul>
      </section>
      <section anchor="token-binding">
        <name>Token Binding</name>
        <ul spacing="normal">
          <li>
            <t>Bind issued tokens to a specific task and declared purpose.</t>
          </li>
          <li>
            <t>Include task identifier and purpose in the token so that Resource Servers can verify request consistency.</t>
          </li>
        </ul>
      </section>
      <section anchor="capabilities-and-constraints">
        <name>Capabilities and Constraints</name>
        <ul spacing="normal">
          <li>
            <t>Embed in the token only capabilities and constraints authorized by AS policy for the agent and task.</t>
          </li>
          <li>
            <t>Do not issue tokens with broader capabilities than the operator has authorized for the given task.</t>
          </li>
        </ul>
      </section>
      <section anchor="token-lifetime">
        <name>Token Lifetime</name>
        <ul spacing="normal">
          <li>
            <t>Limit token lifetimes according to risk level (e.g. shorter for high-impact or high-frequency use).</t>
          </li>
          <li>
            <t>Apply policy-based rules for expiration and acceptable clock skew.</t>
          </li>
        </ul>
      </section>
      <section anchor="token-exchange">
        <name>Token Exchange</name>
        <ul spacing="normal">
          <li>
            <t>Support token exchange per <xref target="RFC8693"/> when delegation or privilege reduction is required.</t>
          </li>
          <li>
            <t>Enforce reduction of privileges when mapping <tt>subject_token</tt> to <tt>issued_token</tt> (e.g. subset of <tt>capabilities</tt>); mapping rules are AS policy.</t>
          </li>
          <li>
            <t>Use the <tt>act</tt> (actor) claim when building delegation chains as per RFC 8693.</t>
          </li>
        </ul>
      </section>
      <section anchor="revocation">
        <name>Revocation</name>
        <ul spacing="normal">
          <li>
            <t>Support rapid revocation per <xref target="RFC7009"/> (Token Revocation) and/or <xref target="RFC7662"/> (Introspection) as appropriate to the deployment.</t>
          </li>
          <li>
            <t>Ensure Resource Servers can check revocation status when policy requires it (e.g. via introspection endpoint or revocation list).</t>
          </li>
        </ul>
      </section>
      <section anchor="proof-of-possession">
        <name>Proof-of-Possession</name>
        <ul spacing="normal">
          <li>
            <t>For AAP tokens, support at least one of DPoP <xref target="RFC9449"/> or mTLS <xref target="RFC8705"/> when the profile requires proof-of-possession.</t>
          </li>
          <li>
            <t>Issue tokens that indicate PoP binding when the client has demonstrated key possession during the token request.</t>
          </li>
        </ul>
      </section>
      <section anchor="audit">
        <name>Audit</name>
        <ul spacing="normal">
          <li>
            <t>Record issuance events (agent identity, task, capabilities granted, timestamp) for audit and traceability.</t>
          </li>
          <li>
            <t>Support correlation with trace identifiers included in the token (<tt>audit</tt>) where applicable.</t>
          </li>
        </ul>
      </section>
    </section>
    <section anchor="example-high-level-flow">
      <name>Example High-Level Flow</name>
      <ol spacing="normal" type="1"><li>
          <t>An operator defines allowed capabilities and policies for an agent.</t>
        </li>
        <li>
          <t>The agent authenticates with the Authorization Server (e.g. Client Credentials Grant).</t>
        </li>
        <li>
          <t>The agent requests a task-bound access token; optional token exchange (RFC 8693) for delegation or privilege reduction.</t>
        </li>
        <li>
          <t>The Authorization Server issues a JWT containing AAP claims.</t>
        </li>
        <li>
          <t>The agent calls Resource Servers using the token (with DPoP or mTLS when proof-of-possession is required).</t>
        </li>
        <li>
          <t>Resource Servers validate the token and enforce capabilities and constraints.</t>
        </li>
        <li>
          <t>All actions are logged with trace identifiers for audit.</t>
        </li>
      </ol>
    </section>
    <section anchor="extensibility">
      <name>Extensibility</name>
      <t>AAP is designed as a profile and allows additional claims or constraints to be defined by industry groups or organizations, provided they do not weaken core validation requirements.</t>
      <section anchor="backwards-compatibility-with-oauth-20">
        <name>Backwards Compatibility with OAuth 2.0</name>
        <t>AAP is designed as a profile on top of OAuth 2.0 and JWT. The following backwards compatibility properties hold:</t>
        <ul spacing="normal">
          <li>
            <t>AAP tokens are valid JWTs and MAY be presented to non-AAP Resource Servers. Non-AAP RSes will ignore AAP claims and process only standard JWT claims (<tt>iss</tt>, <tt>sub</tt>, <tt>aud</tt>, <tt>exp</tt>, <tt>iat</tt>).</t>
          </li>
          <li>
            <t>Non-AAP RSes MUST NOT be treated as enforcing AAP constraints. The <tt>scope</tt> claim MAY be included alongside <tt>capabilities</tt> for backwards compatibility with legacy systems.</t>
          </li>
          <li>
            <t>AAP-aware Resource Servers MUST validate AAP claims when present. If a token contains both <tt>scope</tt> and <tt>capabilities</tt>, the RS MUST use <tt>capabilities</tt> as the authoritative source of permissions and MUST ignore <tt>scope</tt> for AAP-governed actions.</t>
          </li>
        </ul>
      </section>
      <section anchor="migration-path-from-scopes-to-capabilities">
        <name>Migration Path from Scopes to Capabilities</name>
        <t>Organizations adopting AAP from traditional OAuth 2.0 SHOULD follow a phased transition:</t>
        <ol spacing="normal" type="1"><li>
            <t><strong>Phase 1 (Dual Issuance):</strong> Authorization Server includes both <tt>scope</tt> and <tt>capabilities</tt> in tokens. Legacy RSes use <tt>scope</tt>; AAP-aware RSes use <tt>capabilities</tt>.</t>
          </li>
          <li>
            <t><strong>Phase 2 (Capabilities Preferred):</strong> Resource Servers validate <tt>capabilities</tt> when present, fall back to <tt>scope</tt> only for legacy tokens.</t>
          </li>
          <li>
            <t><strong>Phase 3 (Capabilities Required):</strong> Remove <tt>scope</tt> from tokens; require <tt>capabilities</tt> for all agent-issued tokens.</t>
          </li>
        </ol>
        <t>During migration, agents SHOULD request tokens with both <tt>scope</tt> and <tt>capabilities</tt> parameters to ensure compatibility with both legacy and AAP-aware Resource Servers.</t>
      </section>
    </section>
    <section anchor="conformance">
      <name>Conformance Requirements</name>
      <t>A conforming implementation satisfies the requirements of this profile for its role (Authorization Server or Resource Server).</t>
      <ul spacing="normal">
        <li>
          <t><strong>Authorization Server:</strong> A conforming AS MUST satisfy all requirements in <xref target="authorization-server-requirements"/>. It MUST issue tokens that include the AAP claims required by the deployment profile and MUST support proof-of-possession (DPoP and/or mTLS) when the profile requires it. It SHOULD support token exchange <xref target="RFC8693"/> and revocation <xref target="RFC7009"/> <xref target="RFC7662"/> as appropriate.</t>
        </li>
        <li>
          <t><strong>Resource Server:</strong> A conforming RS MUST apply all rules in <xref target="resource-server-validation-rules"/> (standard token validation, proof-of-possession when required, agent identity, task binding, capability enforcement, oversight, delegation chain, contextual restrictions, audit and trace propagation, failure handling). It MUST deny requests when any mandatory validation step fails and MUST NOT leak sensitive authorization details in error responses.</t>
        </li>
        <li>
          <t>A conforming implementation MAY support additional claims or options provided they do not weaken the requirements above.</t>
        </li>
      </ul>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <t>This section addresses security considerations specific to AAP beyond those covered in OAuth 2.0 Security Best Current Practice and related standards.</t>
      <section anchor="cryptographic-algorithms-and-key-management">
        <name>Cryptographic Algorithms and Key Management</name>
        <t><strong>Token Signing (REQUIRED):</strong></t>
        <t>Authorization Servers MUST sign AAP tokens using asymmetric cryptography. The following algorithms are REQUIRED:</t>
        <ul spacing="normal">
          <li>
            <t><strong>ES256</strong> (ECDSA with P-256 curve and SHA-256): RECOMMENDED for new deployments
            </t>
            <ul spacing="normal">
              <li>
                <t>Provides 128-bit security level</t>
              </li>
              <li>
                <t>Smaller signatures than RSA</t>
              </li>
              <li>
                <t>Fast signature verification</t>
              </li>
            </ul>
          </li>
          <li>
            <t><strong>RS256</strong> (RSA with SHA-256): REQUIRED for backward compatibility
            </t>
            <ul spacing="normal">
              <li>
                <t>Minimum 2048-bit RSA keys</t>
              </li>
              <li>
                <t>3072-bit or 4096-bit RSA keys RECOMMENDED for long-lived keys or high-security environments</t>
              </li>
            </ul>
          </li>
        </ul>
        <t>Authorization Servers MUST NOT use symmetric signing algorithms (HS256, HS384, HS512) for AAP tokens. Symmetric algorithms require sharing the signing key between AS and RS, which violates trust boundaries: any RS that validates tokens could forge new ones. Only asymmetric algorithms (ES256, RS256, EdDSA) are permitted.</t>
        <t><strong>Proof-of-Possession Algorithms:</strong></t>
        <t>When using DPoP <xref target="RFC9449"/>:
- Agents MUST use ES256 for DPoP proof generation
- RS256 MAY be supported for legacy clients
- DPoP proof lifetime SHOULD be short (maximum 60 seconds)</t>
        <t>When using mTLS <xref target="RFC8705"/>:
- TLS 1.3 REQUIRED; TLS 1.2 MAY be supported with restricted cipher suites
- Cipher suites: ECDHE_ECDSA or ECDHE_RSA with AES_GCM
- Client certificates MUST be validated against trusted CA or certificate pinning</t>
        <t><strong>Key Sizes:</strong></t>
        <table>
          <thead>
            <tr>
              <th align="left">Key Type</th>
              <th align="left">Minimum</th>
              <th align="left">Recommended</th>
              <th align="left">Security Level</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">RSA</td>
              <td align="left">2048-bit</td>
              <td align="left">3072-bit</td>
              <td align="left">~112-bit / ~128-bit</td>
            </tr>
            <tr>
              <td align="left">ECDSA</td>
              <td align="left">P-256</td>
              <td align="left">P-384</td>
              <td align="left">128-bit / 192-bit</td>
            </tr>
            <tr>
              <td align="left">Symmetric (client secrets)</td>
              <td align="left">128-bit entropy</td>
              <td align="left">256-bit entropy</td>
              <td align="left">128-bit / 256-bit</td>
            </tr>
          </tbody>
        </table>
        <t><strong>Key Rotation:</strong></t>
        <ul spacing="normal">
          <li>
            <t>AS signing keys SHOULD be rotated every 90 days</t>
          </li>
          <li>
            <t>Previous keys MUST be retained for token validation during overlap period (RECOMMENDED: 24 hours after rotation)</t>
          </li>
          <li>
            <t>Resource Servers MUST support validation with multiple concurrent AS public keys</t>
          </li>
          <li>
            <t>Key rotation MUST be coordinated via JWKS (JSON Web Key Set) endpoint <xref target="RFC7517"/></t>
          </li>
        </ul>
        <t><strong>Key Storage:</strong></t>
        <ul spacing="normal">
          <li>
            <t>Authorization Server private signing keys MUST be stored in Hardware Security Modules (HSM) or equivalent secure key management services for production deployments</t>
          </li>
          <li>
            <t>Agent client credentials (secrets, private keys) SHOULD be stored in secure vaults (e.g., HashiCorp Vault, cloud KMS)</t>
          </li>
          <li>
            <t>Keys MUST NOT be logged, included in error messages, or transmitted over insecure channels</t>
          </li>
        </ul>
      </section>
      <section anchor="proof-of-possession-requirements">
        <name>Proof-of-Possession Requirements</name>
        <t><strong>Risk Assessment:</strong></t>
        <t>Bearer tokens (tokens without proof-of-possession) present elevated risk for autonomous agents due to:
- High request rates amplify impact of stolen tokens
- Agents may operate unattended for extended periods
- Token theft from agent memory or logs enables replay attacks</t>
        <t><strong>Deployment Profiles:</strong></t>
        <t>AAP defines three security profiles for proof-of-possession:</t>
        <table>
          <thead>
            <tr>
              <th align="left">Profile</th>
              <th align="left">PoP Requirement</th>
              <th align="left">Use Case</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">
                <strong>Strict</strong></td>
              <td align="left">REQUIRED (mTLS or DPoP)</td>
              <td align="left">Production systems, confidential data, high-risk capabilities</td>
            </tr>
            <tr>
              <td align="left">
                <strong>Standard</strong></td>
              <td align="left">RECOMMENDED</td>
              <td align="left">Development, internal tools, low-risk capabilities</td>
            </tr>
            <tr>
              <td align="left">
                <strong>Legacy</strong></td>
              <td align="left">OPTIONAL</td>
              <td align="left">Migration scenarios, backward compatibility</td>
            </tr>
          </tbody>
        </table>
        <t><strong>Profile Selection Criteria:</strong></t>
        <t>Proof-of-Possession SHOULD be REQUIRED when any of the following apply:
- Capability includes <tt>data_classification_max &gt;= "confidential"</tt>
- Capability includes write, delete, or execute actions
- <tt>oversight.level &gt;= "approval"</tt>
- Token lifetime &gt; 1 hour
- Agent accesses resources in different trust domains</t>
        <t><strong>Token Binding (cnf claim):</strong></t>
        <t>When PoP is used, tokens MUST include the <tt>cnf</tt> (confirmation) claim <xref target="RFC7800"/>:</t>
        <t>For DPoP:</t>
        <sourcecode type="json"><![CDATA[
{
  "cnf": {
    "jkt": "0ZcOCORZNYy-DWpqq30jZyJGHTN0d2HglBV3uiguA4I"
  }
}
]]></sourcecode>
        <t>For mTLS:</t>
        <sourcecode type="json"><![CDATA[
{
  "cnf": {
    "x5t#S256": "bwcK0esc3ACC3DB2Y5_lESsXE8o9ltc05O89jdN-dg"
  }
}
]]></sourcecode>
        <t>Resource Servers MUST validate the proof matches the <tt>cnf</tt> claim before accepting the token.</t>
      </section>
      <section anchor="token-lifetime-and-revocation">
        <name>Token Lifetime and Revocation</name>
        <t><strong>Token Lifetime Guidelines:</strong></t>
        <table>
          <thead>
            <tr>
              <th align="left">Capability Risk Level</th>
              <th align="left">Recommended Lifetime</th>
              <th align="left">Maximum Lifetime</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">Read-only, public data</td>
              <td align="left">60 minutes</td>
              <td align="left">120 minutes</td>
            </tr>
            <tr>
              <td align="left">Read-only, internal data</td>
              <td align="left">30 minutes</td>
              <td align="left">60 minutes</td>
            </tr>
            <tr>
              <td align="left">Write, low-risk</td>
              <td align="left">15 minutes</td>
              <td align="left">30 minutes</td>
            </tr>
            <tr>
              <td align="left">Write, high-risk</td>
              <td align="left">5 minutes</td>
              <td align="left">15 minutes</td>
            </tr>
            <tr>
              <td align="left">Execute, delete</td>
              <td align="left">5 minutes</td>
              <td align="left">10 minutes</td>
            </tr>
          </tbody>
        </table>
        <t>Token lifetime SHOULD be reduced for:
- Derived tokens (via Token Exchange): 50% of parent lifetime
- Tokens with high delegation depth: Reduce by 25% per depth level
- Tokens without proof-of-possession: 50% of normal lifetime</t>
        <t><strong>Revocation Requirements:</strong></t>
        <t>Authorization Servers MUST support token revocation via one or both of:
- <strong>Revocation endpoint</strong> <xref target="RFC7009"/>: Agent or operator can revoke token
- <strong>Token introspection</strong> <xref target="RFC7662"/>: RS queries AS for token validity</t>
        <t><strong>Rapid Revocation:</strong></t>
        <t>For the purposes of this specification, "rapid revocation" is defined as:
- Maximum 60 seconds from revocation request to enforcement by all Resource Servers
- Authorization Server MUST distribute revocation events to Resource Servers within 30 seconds
- Resource Server MUST apply revocation updates within 30 seconds of receipt</t>
        <t><strong>Revocation Distribution:</strong></t>
        <t>For multi-RS deployments, AS SHOULD use:
- Push-based revocation (AS pushes to RS) rather than pull-based (RS polls AS)
- Revocation event stream (e.g., Server-Sent Events, WebSockets, message queue)
- Fallback to token introspection if revocation list fails to propagate</t>
        <t><strong>Token Family Revocation:</strong></t>
        <t>When a token is revoked:
- Authorization Server MAY revoke all descendant tokens (derived via Token Exchange)
- This is achieved by tracking <tt>parent_jti</tt> linkage
- Token family revocation enhances security but requires AS to maintain token graph</t>
      </section>
      <section anchor="constraint-enforcement">
        <name>Constraint Enforcement</name>
        <t><strong>Server-Side Enforcement (REQUIRED):</strong></t>
        <t>All capability constraints MUST be enforced by the Resource Server, NOT trusted to agent logic. Agents are potentially adversarial; they may attempt to bypass constraints.</t>
        <t><strong>Rate Limiting in Distributed Systems:</strong></t>
        <t>For Resource Servers deployed across multiple instances:
- Rate limits MUST be enforced consistently across all instances
- Use distributed rate limiting (e.g., Redis, shared counter service)
- Accept eventual consistency with conservative limits (deny when uncertain)</t>
        <t><strong>Constraint Validation Failures:</strong></t>
        <t>When a constraint is violated, Resource Server MUST:
- Return HTTP 403 (Forbidden) or 429 (Too Many Requests) as appropriate
- Include error code <tt>aap_constraint_violation</tt> in response
- Log violation event with <tt>agent.id</tt>, <tt>task.id</tt>, violated constraint
- NOT return details of constraint values in error response (privacy)</t>
      </section>
      <section anchor="delegation-security">
        <name>Delegation Security</name>
        <t><strong>Privilege Reduction (REQUIRED):</strong></t>
        <t>When issuing derived tokens via Token Exchange <xref target="RFC8693"/>, the Authorization Server MUST reduce privileges by one or more of:
- <strong>Capability removal</strong>: Subset of parent capabilities only
- <strong>Constraint tightening</strong>: Lower rate limits, narrower domain lists, shorter time windows
- <strong>Lifetime reduction</strong>: Shorter <tt>exp</tt> time than parent token
- <strong>Depth limit reduction</strong>: Lower <tt>max_depth</tt> to limit further delegation</t>
        <t>The Authorization Server MUST NOT grant capabilities not present in the parent token. "Privilege escalation via delegation" MUST be prevented.</t>
        <t><strong>Delegation Depth Enforcement:</strong></t>
        <t>Both Authorization Server and Resource Server MUST enforce delegation depth limits:
- AS MUST NOT issue token if resulting <tt>delegation.depth</tt> would exceed <tt>delegation.max_depth</tt>
- RS MUST reject requests if <tt>delegation.depth &gt; delegation.max_depth</tt>
- Defense-in-depth: Both layers validate to prevent bypass</t>
        <t><strong>Confused Deputy Prevention:</strong></t>
        <t>To prevent confused deputy attacks where delegation chains are replayed:
- Each token MUST have unique <tt>jti</tt> (JWT ID)
- Derived tokens MUST include <tt>delegation.parent_jti</tt> linking to parent token
- AS MUST validate parent token exists and is not expired/revoked before issuing derived token
- Delegation chain MUST be immutable (copied and appended, never modified by client)</t>
      </section>
      <section anchor="human-oversight-enforcement">
        <name>Human Oversight Enforcement</name>
        <t><strong>Approval Workflow Security:</strong></t>
        <t>When <tt>oversight.requires_human_approval_for</tt> includes an action:
- Resource Server MUST NOT execute action automatically
- RS MUST return HTTP 403 with error code <tt>aap_approval_required</tt>
- Response SHOULD include <tt>approval_reference</tt> URL for requesting approval
- Approval mechanism is out of scope for AAP but may use OIDC step-up authentication, external workflow systems, etc.</t>
        <t><strong>Approval Bypass Prevention:</strong></t>
        <ul spacing="normal">
          <li>
            <t>Approval requirement is in token (signed by AS), not in request (untrusted)</t>
          </li>
          <li>
            <t>Agent cannot bypass approval by modifying request headers</t>
          </li>
          <li>
            <t>Resource Server MUST validate oversight claim before execution</t>
          </li>
        </ul>
      </section>
      <section anchor="authorization-server-security">
        <name>Authorization Server Security</name>
        <t><strong>AS as Critical Component:</strong></t>
        <t>The Authorization Server is a critical security component. Compromise of the AS enables arbitrary token minting.</t>
        <t><strong>AS Hardening Requirements:</strong></t>
        <ul spacing="normal">
          <li>
            <t>Minimal software installation (reduce attack surface)</t>
          </li>
          <li>
            <t>Regular security patching (OS, libraries, dependencies)</t>
          </li>
          <li>
            <t>Network isolation (AS should not be internet-accessible if possible; use API gateway)</t>
          </li>
          <li>
            <t>Access control (admin access requires MFA, logging)</t>
          </li>
          <li>
            <t>Monitoring (detect anomalous token issuance patterns)</t>
          </li>
        </ul>
        <t><strong>Token Issuance Monitoring:</strong></t>
        <t>Authorization Server SHOULD monitor and alert on:
- Sudden increase in token issuance rate (possible compromise)
- Tokens with unusual capability combinations (possible policy bypass)
- Tokens issued to unknown agents (possible credential theft)
- Issuance outside normal business hours (possible unauthorized access)</t>
      </section>
      <section anchor="resource-server-security">
        <name>Resource Server Security</name>
        <t><strong>Input Validation:</strong></t>
        <t>Resource Servers MUST validate:
- Token signature with trusted AS public key
- Token expiration (<tt>exp</tt>) with acceptable clock skew (RECOMMENDED: &lt;=5 minutes)
- Audience (<tt>aud</tt>) matches Resource Server identifier
- Agent identity (<tt>agent.id</tt>) is recognized or allowed by policy
- All constraints in matching capability</t>
        <t><strong>Error Handling (Privacy-Preserving):</strong></t>
        <t>Resource Servers MUST NOT leak authorization details in error responses:</t>
        <t><strong>Bad</strong> (leaks constraint values):</t>
        <sourcecode type="json"><![CDATA[
{
  "error": "aap_constraint_violation",
  "error_description": "Rate limit exceeded"
}
]]></sourcecode>
        <t><strong>Good</strong> (privacy-preserving):</t>
        <sourcecode type="json"><![CDATA[
{
  "error": "aap_constraint_violation",
  "error_description": "Request violates capability constraints"
}
]]></sourcecode>
        <t>Detailed violation information SHOULD be logged server-side for audit, not returned to client.</t>
      </section>
      <section anchor="token-caching-security">
        <name>Token Caching Security</name>
        <t>Agents and intermediaries MAY cache tokens for reuse within their lifetime. The following security guidance applies:</t>
        <ul spacing="normal">
          <li>
            <t>Tokens SHOULD be stored in memory only and MUST NOT be persisted to disk in plaintext</t>
          </li>
          <li>
            <t>Cached tokens SHOULD be evicted before expiration (at 80% of remaining lifetime) to avoid using tokens that may expire during a request</t>
          </li>
          <li>
            <t>Token caches MUST be cleared on process termination</t>
          </li>
          <li>
            <t>Delegated tokens MUST NOT be cached longer than their parent token's expiration</t>
          </li>
          <li>
            <t>Agents MUST NOT share cached tokens across different task contexts</t>
          </li>
        </ul>
      </section>
      <section anchor="key-compromise-incident-response">
        <name>Key Compromise Incident Response</name>
        <t>When an AS signing key is compromised or suspected of compromise, the following incident response procedure SHOULD be followed:</t>
        <ol spacing="normal" type="1"><li>
            <t><strong>Immediate rotation:</strong> Generate and deploy a new key pair. Update the JWKS endpoint to include the new key.</t>
          </li>
          <li>
            <t><strong>JWKS update:</strong> Publish updated JWKS with the new key. The compromised <tt>kid</tt> SHOULD be removed from the JWKS endpoint or marked with a revocation indicator.</t>
          </li>
          <li>
            <t><strong>RS propagation:</strong> All Resource Servers MUST refresh their JWKS cache within the cache TTL. RSes SHOULD treat tokens signed with the compromised <tt>kid</tt> as invalid.</t>
          </li>
          <li>
            <t><strong>Token invalidation:</strong> All outstanding tokens signed with the compromised key SHOULD be considered invalid. If token introspection is in use, the AS MUST return <tt>active: false</tt> for tokens signed with the compromised key.</t>
          </li>
          <li>
            <t><strong>Agent notification:</strong> Agents MUST request new tokens after key rotation. The AS SHOULD reject new token requests until the rotation is complete.</t>
          </li>
        </ol>
        <t>Organizations SHOULD have a documented key compromise response plan and SHOULD test it periodically.</t>
      </section>
      <section anchor="denial-of-service-prevention">
        <name>Denial-of-Service Prevention</name>
        <t>AAP token validation is computationally more expensive than standard OAuth due to larger JWT payloads, multiple validation steps (agent, task, delegation, capabilities), and stateful constraint enforcement (rate limiting).</t>
        <t>Resource Servers SHOULD implement the following DoS mitigations:
- Reject tokens larger than 16KB before parsing (pre-validation size limit)
- Rate-limit the number of token validation attempts per source IP
- Cache validation results for recently-seen JTIs (with TTL equal to remaining token lifetime) to avoid re-validating the same token
- Implement circuit breakers for JWKS endpoint requests to prevent cascading failures when the AS is unavailable</t>
        <t>Authorization Servers SHOULD:
- Rate-limit the token endpoint itself (per client, per IP)
- Monitor and alert on anomalous token issuance patterns (sudden volume spikes, unusual capability combinations)</t>
      </section>
      <section anchor="additional-security-considerations">
        <name>Additional Security Considerations</name>
        <t><strong>Token Logging:</strong></t>
        <ul spacing="normal">
          <li>
            <t>Tokens MUST NOT be logged in plaintext in application logs</t>
          </li>
          <li>
            <t>Use token redaction in logging libraries (replace with hash or truncated value)</t>
          </li>
          <li>
            <t>If logging is necessary for debugging, use separate secure audit log with strict access control</t>
          </li>
        </ul>
        <t><strong>Clock Skew:</strong></t>
        <ul spacing="normal">
          <li>
            <t>Resource Servers SHOULD tolerate up to 5 minutes of clock skew for <tt>exp</tt> and <tt>nbf</tt> validation</t>
          </li>
          <li>
            <t>Skew tolerance MUST NOT exceed 5 minutes (to limit window for expired token use)</t>
          </li>
          <li>
            <t>Organizations SHOULD use NTP or equivalent for clock synchronization</t>
          </li>
        </ul>
        <t><strong>Compliance Considerations:</strong></t>
        <t>AAP enables compliance with regulations requiring:
- Explicit authorization (GDPR Article 6)
- Purpose limitation (GDPR Article 5)
- Audit trails (SOC 2, ISO 27001, HIPAA)
- Access controls (PCI-DSS, FedRAMP)</t>
        <t>However, AAP alone is not sufficient for compliance; organizational policies, procedures, and controls are also required.</t>
      </section>
    </section>
    <section anchor="privacy-considerations">
      <name>Privacy Considerations</name>
      <t>AAP tokens and audit logs may contain information that could identify agents, organizations, individuals, or sensitive operational details. This section provides guidance on privacy protection in AAP implementations.</t>
      <section anchor="personal-data-in-aap-tokens">
        <name>Personal Data in AAP Tokens</name>
        <t>AAP tokens MAY contain personal data under GDPR, CCPA, and similar privacy regulations:</t>
        <t><strong>Potentially Personal Claims:</strong>
- <tt>agent.operator</tt>: Organization identifier (may be personal if sole proprietor or individual developer)
- <tt>task.created_by</tt>: User ID who initiated the task
- <tt>task.purpose</tt>: May contain user-identifying details if not carefully crafted
- <tt>audit.trace_id</tt>: Potentially correlatable across requests (tracking)
- <tt>delegation.chain</tt>: Reveals agent interaction patterns and organizational structure
- <tt>context.location</tt>: Geographic location information</t>
        <t><strong>Data Controller and Processor:</strong>
- Authorization Server operator is typically the data controller for token claims
- Resource Server operators are data processors when validating tokens
- Delegation across organizations may create complex controller/processor relationships</t>
      </section>
      <section anchor="data-minimization-principles">
        <name>Data Minimization Principles</name>
        <t>Implementations SHOULD apply the principle of data minimization (GDPR Article 5(1)(c)):</t>
        <t><strong>Guideline: Include Only What Is Necessary</strong></t>
        <table>
          <thead>
            <tr>
              <th align="left">Claim</th>
              <th align="left">Privacy-Preserving Approach</th>
              <th align="left">Privacy-Risky Approach</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">
                <tt>agent.id</tt></td>
              <td align="left">Use pseudonymous ID: <tt>urn:uuid:550e8400-...</tt></td>
              <td align="left">Use descriptive name: <tt>agent-for-alice@example.com</tt></td>
            </tr>
            <tr>
              <td align="left">
                <tt>task.id</tt></td>
              <td align="left">Use UUID: <tt>550e8400-e29b-41d4-...</tt></td>
              <td align="left">Use descriptive ID: <tt>task-research-for-alice-project-secret</tt></td>
            </tr>
            <tr>
              <td align="left">
                <tt>task.purpose</tt></td>
              <td align="left">Use category: <tt>research</tt> or <tt>content-creation</tt></td>
              <td align="left">Use full description: <tt>Research climate data for Alice's PhD thesis on...</tt></td>
            </tr>
            <tr>
              <td align="left">
                <tt>task.created_by</tt></td>
              <td align="left">Use pseudonymous ID: <tt>user:u123456</tt></td>
              <td align="left">Use email: <tt>alice.smith@example.com</tt></td>
            </tr>
            <tr>
              <td align="left">
                <tt>audit.trace_id</tt></td>
              <td align="left">Use per-task UUID (rotated)</td>
              <td align="left">Use stable agent-wide ID (enables long-term correlation)</td>
            </tr>
          </tbody>
        </table>
        <t><strong>Unnecessary Claims SHOULD Be Omitted:</strong>
- Don't include <tt>agent.name</tt> if <tt>agent.id</tt> is sufficient for authorization
- Don't include <tt>task.metadata</tt> unless necessary for constraint enforcement
- Don't include <tt>context.location.ip_address</tt> unless geofencing is required</t>
      </section>
      <section anchor="retention-and-lifecycle">
        <name>Retention and Lifecycle</name>
        <t><strong>Token Retention:</strong>
- Tokens expire per <tt>exp</tt> claim (typically minutes to hours)
- Expired tokens SHOULD be immediately discarded by agents
- Tokens SHOULD NOT be persisted to disk (memory-only storage)</t>
        <t><strong>Audit Log Retention:</strong>
- Audit logs SHOULD follow organizational retention policy
- Minimum retention: As required by compliance framework (e.g., SOC 2: 1 year)
- Maximum retention: Only as long as necessary for audit and investigation
- After retention period: Logs MUST be securely deleted or anonymized</t>
        <t><strong>Delegation Chain Retention:</strong>
- Delegation chains SHOULD NOT be retained in logs beyond audit window
- When logging delegation events, consider hashing agent IDs rather than storing plaintext</t>
        <t><strong>Right to Erasure (GDPR Article 17):</strong>
- If <tt>task.created_by</tt> contains personal data, organizations MUST support erasure requests
- Consider using pseudonymous IDs that can be de-linked from personal data
- Audit logs may be exempt from erasure if required for legal compliance; consult legal counsel</t>
      </section>
      <section anchor="cross-domain-correlation">
        <name>Cross-Domain Correlation</name>
        <t><strong>Threat:</strong> Malicious Resource Servers in different organizations could correlate requests across services using stable identifiers in AAP tokens (e.g., <tt>audit.trace_id</tt>, <tt>agent.id</tt>).</t>
        <t><strong>Impact:</strong>
- Agent behavior profiling (what capabilities, what resources, what patterns)
- Competitive intelligence (infer agent strategies from request patterns)
- Privacy violation (correlate agent activity across unrelated services)</t>
        <t><strong>Mitigations:</strong></t>
        <t><strong>Trace ID Rotation (REQUIRED for Cross-Domain):</strong>
- When token audience changes trust domain, generate new <tt>audit.trace_id</tt>
- Example: Token for <tt>api.example.com</tt> has <tt>trace_id: abc123</tt>; delegated token for <tt>external.example</tt> has <tt>trace_id: xyz789</tt>
- Correlation within single organization preserved; cross-organization correlation prevented</t>
        <t><strong>Domain-Specific Agent IDs:</strong>
- Use different <tt>agent.id</tt> per Resource Server trust domain
- Example: Agent presents <tt>agent:internal-001</tt> to internal APIs, <tt>agent:partner-facing-alpha</tt> to partner APIs
- Authorization Server maintains mapping; Resource Servers see domain-specific IDs</t>
        <t><strong>Minimize Identifiable Information in Delegated Tokens:</strong>
- When delegating to external tool, remove non-essential claims
- Example: Strip <tt>task.created_by</tt>, <tt>context.location</tt> when crossing trust boundary
- Token Exchange request SHOULD specify <tt>required_claims</tt> (minimal set)</t>
        <t><strong>Trace ID Scope Claim (RECOMMENDED):</strong></t>
        <sourcecode type="json"><![CDATA[
{
  "audit": {
    "trace_id": "550e8400-e29b-41d4-a716-446655440000",
    "trace_id_scope": "task"
  }
}
]]></sourcecode>
        <t>This signals the intended correlation boundary:
- <tt>task</tt>: Trace ID unique per task (rotated between tasks)
- <tt>session</tt>: Trace ID unique per agent session (rotated on agent restart)
- <tt>agent</tt>: Trace ID stable for agent lifetime (enables long-term correlation; privacy-risky)
- <tt>domain</tt>: Trace ID unique per trust domain (rotated when crossing domains)</t>
      </section>
      <section anchor="privacy-preserving-error-messages">
        <name>Privacy-Preserving Error Messages</name>
        <t>Resource Servers MUST NOT leak authorization details in error responses that could enable privacy violations or capability profiling.</t>
        <t><strong>Avoid:</strong>
- "Agent does not have capability 'delete.data'" (reveals capabilities)
- "Rate limit: 51 requests, max allowed 50" (reveals constraint values)
- "Domain blocked: malicious.example is in blocklist" (reveals policy details)
- "Task purpose 'research for Alice' does not match action 'publish'" (reveals task details)</t>
        <t><strong>Prefer:</strong>
- "Insufficient permissions" (generic, privacy-preserving)
- "Request violates capability constraints" (doesn't specify which constraint)
- "Authorization failed" (minimal information disclosure)</t>
        <t><strong>Detailed Error Information:</strong>
- Log server-side with full details (for audit and debugging)
- Include error correlation ID in response for support tickets
- Client can reference correlation ID when contacting support; support team accesses server logs</t>
        <t><strong>Example Privacy-Preserving Error Response:</strong></t>
        <sourcecode type="json"><![CDATA[
{
  "error": "insufficient_permissions",
  "error_description": "The request could not be authorized",
  "error_correlation_id": "err-550e8400-e29b-41d4-a716-446655440000"
}
]]></sourcecode>
        <t>Server log (not returned to client):</t>
        <sourcecode type="json"><![CDATA[
{
  "error_correlation_id": "err-550e8400-e29b-41d4-a716-446655440000",
  "error": "aap_constraint_violation",
  "constraint_violated": "domains_allowed",
  "requested_domain": "malicious.example",
  "allowed_domains": ["example.org"],
  "agent_id": "agent-researcher-01",
  "task_id": "task-12345",
  "timestamp": "2024-01-01T12:00:00Z"
}
]]></sourcecode>
      </section>
      <section anchor="anonymization-and-pseudonymization">
        <name>Anonymization and Pseudonymization</name>
        <t><strong>Pseudonymization (GDPR Article 4(5)):</strong></t>
        <t>Pseudonymization is the processing of personal data such that it can no longer be attributed to a specific data subject without additional information (kept separately and secured).</t>
        <t><strong>AAP Pseudonymization Techniques:</strong></t>
        <table>
          <thead>
            <tr>
              <th align="left">Data Type</th>
              <th align="left">Pseudonymization Approach</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">User IDs (<tt>task.created_by</tt>)</td>
              <td align="left">Use UUID mapped to real user ID in separate database</td>
            </tr>
            <tr>
              <td align="left">Agent names</td>
              <td align="left">Use <tt>agent:0001</tt> instead of <tt>agent-for-alice</tt></td>
            </tr>
            <tr>
              <td align="left">Task purposes</td>
              <td align="left">Use task category codes instead of free-text descriptions</td>
            </tr>
            <tr>
              <td align="left">Trace IDs</td>
              <td align="left">Use cryptographic hash of (user ID + task ID + salt)</td>
            </tr>
          </tbody>
        </table>
        <t><strong>Anonymization (Irreversible):</strong></t>
        <t>For audit logs past retention period:
- Replace <tt>agent.id</tt> with hash (if agent identity no longer needed)
- Remove <tt>task.created_by</tt> entirely
- Aggregate statistics (e.g., "1000 requests by research agents") instead of individual records</t>
      </section>
      <section anchor="consent-and-transparency">
        <name>Consent and Transparency</name>
        <t><strong>Agent Operator Transparency:</strong></t>
        <t>When an agent acts on behalf of a human user:
- User SHOULD be informed that an agent will perform actions
- User SHOULD be shown the task purpose and capabilities granted
- User SHOULD be able to review and revoke agent authorizations</t>
        <t><strong>Example User Notification:</strong></t>
        <sourcecode type="text"><![CDATA[
Your request to "research climate change
impacts" has been assigned to an AI agent.

The agent will be able to:
- Search web resources from example.org
  (max 50 requests/hour)
- Create draft articles in the CMS

The agent will NOT be able to:
- Publish articles (requires your approval)
- Access data outside example.org
- Perform actions unrelated to research

You can revoke this authorization at any
time in your account settings.
]]></sourcecode>
        <t><strong>Token Transparency:</strong></t>
        <t>For compliance with transparency requirements (GDPR Article 13-14):
- Organizations SHOULD document what claims are included in AAP tokens
- Organizations SHOULD inform users when their actions trigger agent authorization
- Organizations SHOULD provide access to audit logs (subject to security and legal constraints)</t>
      </section>
      <section anchor="third-party-tool-privacy">
        <name>Third-Party Tool Privacy</name>
        <t>When delegating to third-party tools (external organizations):</t>
        <t><strong>Data Sharing Agreement:</strong>
- Delegation to external tool constitutes data sharing
- Organizations SHOULD have data processing agreements (DPAs) with tool providers
- Token Exchange to external AS SHOULD trigger data sharing notification/consent</t>
        <t><strong>Claim Filtering:</strong>
- Authorization Server SHOULD filter claims when delegating to external tool
- Remove non-essential claims: <tt>task.created_by</tt>, <tt>agent.operator</tt> internal details
- Retain only authorization-essential claims: <tt>capabilities</tt>, <tt>delegation.depth</tt></t>
        <t><strong>Example Filtered Delegation:</strong></t>
        <t>Original token (internal):</t>
        <sourcecode type="json"><![CDATA[
{
  "agent": {
    "id": "agent-001",
    "operator": "org:acme-corp"
  },
  "task": {
    "id": "task-123",
    "purpose": "research",
    "created_by": "user:alice"
  },
  "capabilities": [
    {"action": "search.web"}
  ]
}
]]></sourcecode>
        <t>Delegated token (external tool):</t>
        <sourcecode type="json"><![CDATA[
{
  "agent": {
    "id": "delegated-from:acme-corp",
    "operator": "org:acme-corp"
  },
  "task": {
    "id": "task-123-external",
    "purpose": "research"
  },
  "capabilities": [
    {
      "action": "search.web",
      "constraints": {
        "domains_allowed": ["example.org"]
      }
    }
  ],
  "delegation": {
    "depth": 1,
    "chain": ["agent-001", "external-tool"]
  }
}
]]></sourcecode>
      </section>
      <section anchor="privacy-by-design-recommendations">
        <name>Privacy by Design Recommendations</name>
        <t><strong>For Authorization Server Implementations:</strong></t>
        <ol spacing="normal" type="1"><li>
            <t>Default to short trace ID rotation (per-task, not per-agent)</t>
          </li>
          <li>
            <t>Provide configuration options for privacy levels (minimal, standard, full disclosure)</t>
          </li>
          <li>
            <t>Support claim filtering on Token Exchange</t>
          </li>
          <li>
            <t>Log privacy-impacting events (cross-domain delegation, long trace ID retention)</t>
          </li>
        </ol>
        <t><strong>For Resource Server Implementations:</strong></t>
        <ol spacing="normal" type="1"><li>
            <t>Never log tokens in plaintext</t>
          </li>
          <li>
            <t>Redact personal data in error responses</t>
          </li>
          <li>
            <t>Provide audit log access controls (only authorized personnel)</t>
          </li>
          <li>
            <t>Support audit log anonymization after retention period</t>
          </li>
        </ol>
        <t><strong>For Agent Implementations:</strong></t>
        <ol spacing="normal" type="1"><li>
            <t>Request minimal capabilities (least privilege reduces privacy risk)</t>
          </li>
          <li>
            <t>Specify minimal <tt>required_claims</tt> on Token Exchange</t>
          </li>
          <li>
            <t>Rotate trace IDs when crossing trust boundaries</t>
          </li>
          <li>
            <t>Discard tokens immediately upon expiration (don't cache expired tokens)</t>
          </li>
        </ol>
      </section>
      <section anchor="regulatory-compliance-guidance">
        <name>Regulatory Compliance Guidance</name>
        <t><strong>GDPR Compliance:</strong>
- AAP supports GDPR principles: purpose limitation (task binding), data minimization (constrained capabilities), accountability (audit logs)
- Organizations MUST implement additional controls: consent management, data subject rights, DPIAs</t>
        <t><strong>CCPA Compliance:</strong>
- AAP audit logs may constitute "personal information" if they identify consumers
- Organizations MUST support consumer rights: access, deletion, opt-out of sale
- Consider using pseudonymous IDs to reduce CCPA applicability</t>
        <t><strong>HIPAA Compliance (Healthcare):</strong>
- AAP tokens accessing Protected Health Information (PHI) MUST use proof-of-possession
- Audit logs MUST meet HIPAA retention requirements (6 years)
- Delegation chains provide required access audit trail</t>
        <t><strong>Note:</strong> AAP is an authorization protocol, not a complete privacy framework. Organizations MUST implement privacy policies, procedures, and controls beyond AAP technical mechanisms.</t>
      </section>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <t>This document registers the following claim names in the IANA "JSON Web Token Claims" registry established by <xref target="RFC7519"/>.</t>
      <section anchor="jwt-claims-registration">
        <name>JWT Claims Registration</name>
        <t>The following claims are registered per the "Specification Required" policy defined in <xref target="RFC7519"/> Section 10.1:</t>
        <table>
          <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">
                <tt>agent</tt></td>
              <td align="left">Agent identity and metadata</td>
              <td align="left">IETF</td>
              <td align="left">[this document] Section 5.1</td>
            </tr>
            <tr>
              <td align="left">
                <tt>task</tt></td>
              <td align="left">Task binding information</td>
              <td align="left">IETF</td>
              <td align="left">[this document] Section 5.2</td>
            </tr>
            <tr>
              <td align="left">
                <tt>capabilities</tt></td>
              <td align="left">Granted capabilities with constraints</td>
              <td align="left">IETF</td>
              <td align="left">[this document] Section 5.3</td>
            </tr>
            <tr>
              <td align="left">
                <tt>delegation</tt></td>
              <td align="left">Delegation chain tracking</td>
              <td align="left">IETF</td>
              <td align="left">[this document] Section 5.4</td>
            </tr>
            <tr>
              <td align="left">
                <tt>oversight</tt></td>
              <td align="left">Human oversight requirements</td>
              <td align="left">IETF</td>
              <td align="left">[this document] Section 5.8</td>
            </tr>
            <tr>
              <td align="left">
                <tt>audit</tt></td>
              <td align="left">Audit and tracing metadata</td>
              <td align="left">IETF</td>
              <td align="left">[this document] Section 5.9</td>
            </tr>
            <tr>
              <td align="left">
                <tt>context</tt></td>
              <td align="left">Execution context restrictions</td>
              <td align="left">IETF</td>
              <td align="left">[this document] Section 5.10</td>
            </tr>
          </tbody>
        </table>
      </section>
      <section anchor="oauth-error-code-registration">
        <name>OAuth Error Code Registration</name>
        <t>This document registers the following error codes in the OAuth Extensions Error Registry:</t>
        <table>
          <thead>
            <tr>
              <th align="left">Error Code</th>
              <th align="left">Usage Location</th>
              <th align="left">Protocol Extension</th>
              <th align="left">Reference</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">
                <tt>aap_invalid_capability</tt></td>
              <td align="left">Resource access error response</td>
              <td align="left">AAP</td>
              <td align="left">[this document] Appendix C</td>
            </tr>
            <tr>
              <td align="left">
                <tt>aap_constraint_violation</tt></td>
              <td align="left">Resource access error response</td>
              <td align="left">AAP</td>
              <td align="left">[this document] Appendix C</td>
            </tr>
            <tr>
              <td align="left">
                <tt>aap_approval_required</tt></td>
              <td align="left">Resource access error response</td>
              <td align="left">AAP</td>
              <td align="left">[this document] Appendix C</td>
            </tr>
            <tr>
              <td align="left">
                <tt>aap_excessive_delegation</tt></td>
              <td align="left">Resource access error response</td>
              <td align="left">AAP</td>
              <td align="left">[this document] Appendix C</td>
            </tr>
            <tr>
              <td align="left">
                <tt>aap_domain_not_allowed</tt></td>
              <td align="left">Resource access error response</td>
              <td align="left">AAP</td>
              <td align="left">[this document] Appendix C</td>
            </tr>
            <tr>
              <td align="left">
                <tt>aap_task_mismatch</tt></td>
              <td align="left">Resource access error response</td>
              <td align="left">AAP</td>
              <td align="left">[this document] Appendix C</td>
            </tr>
            <tr>
              <td align="left">
                <tt>aap_agent_not_recognized</tt></td>
              <td align="left">Resource access error response</td>
              <td align="left">AAP</td>
              <td align="left">[this document] Appendix C</td>
            </tr>
            <tr>
              <td align="left">
                <tt>aap_invalid_delegation_chain</tt></td>
              <td align="left">Resource access error response</td>
              <td align="left">AAP</td>
              <td align="left">[this document] Appendix C</td>
            </tr>
            <tr>
              <td align="left">
                <tt>aap_capability_expired</tt></td>
              <td align="left">Resource access error response</td>
              <td align="left">AAP</td>
              <td align="left">[this document] Appendix C</td>
            </tr>
            <tr>
              <td align="left">
                <tt>aap_invalid_context</tt></td>
              <td align="left">Resource access error response</td>
              <td align="left">AAP</td>
              <td align="left">[this document] Appendix C</td>
            </tr>
          </tbody>
        </table>
      </section>
    </section>
    <section anchor="implementation-status">
      <name>Implementation Status</name>
      <t>This section records the status of known implementations of the protocol defined by this specification at the time of posting of this Internet-Draft, and is based on a proposal described in <xref target="RFC7942"/>.</t>
      <section anchor="reference-implementation">
        <name>Reference Implementation</name>
        <ul spacing="normal">
          <li>
            <t><strong>Organization:</strong> AAP Project</t>
          </li>
          <li>
            <t><strong>Implementation:</strong> Python reference implementation (Authorization Server + Resource Server)</t>
          </li>
          <li>
            <t><strong>Description:</strong> Complete implementation of AAP token issuance, Token Exchange, and Resource Server validation with constraint enforcement</t>
          </li>
          <li>
            <t><strong>Maturity:</strong> Alpha</t>
          </li>
          <li>
            <t><strong>Coverage:</strong> All MUST-level requirements in Sections 7 and 8</t>
          </li>
          <li>
            <t><strong>Licensing:</strong> Apache 2.0</t>
          </li>
          <li>
            <t><strong>Contact:</strong> See project repository</t>
          </li>
          <li>
            <t><strong>URL:</strong> See <tt>/reference-impl/</tt> in the project repository</t>
          </li>
        </ul>
      </section>
      <section anchor="test-vectors">
        <name>Test Vectors</name>
        <t>A comprehensive test vector suite is available for interoperability testing:
- 15 test vector files covering valid tokens, invalid tokens, constraint violations, and edge cases
- 80+ individual test cases
- Coverage of all specification sections referenced in Sections 5, 7, and 8</t>
        <t>Implementations SHOULD pass all test vectors in <tt>valid-tokens/</tt> and <tt>edge-cases/</tt> categories. Implementations MUST correctly reject all test vectors in <tt>invalid-tokens/</tt> and <tt>constraint-violations/</tt> categories with the specified error codes.</t>
      </section>
    </section>
    <section anchor="related-work-and-comparison">
      <name>Related Work and Comparison</name>
      <t>This section positions AAP within the broader ecosystem of authorization, access control, and identity systems. AAP is designed to complement and extend existing standards rather than replace them.</t>
      <section anchor="oauth-20-scopes">
        <name>OAuth 2.0 Scopes</name>
        <t>Traditional OAuth 2.0 scopes <xref target="RFC6749"/> provide coarse-grained authorization through simple string tokens (e.g., <tt>read:articles</tt>, <tt>write:cms</tt>). While effective for user-delegated access, scopes have limitations for autonomous agent scenarios:</t>
        <t><strong>OAuth Scopes Characteristics:</strong>
- Simple string-based permissions
- No built-in constraint mechanism
- No task context binding
- No delegation tracking
- Limited expressiveness for complex policies</t>
        <t><strong>AAP Enhancements:</strong>
- <strong>Structured capabilities</strong>: Actions (<tt>search.web</tt>) with typed, enforceable constraints (<tt>max_requests_per_hour: 50</tt>, <tt>domains_allowed: ["example.org"]</tt>)
- <strong>Task binding</strong>: Scopes don't express purpose or context; AAP tokens bind authorization to specific tasks with declared purposes
- <strong>Delegation chains</strong>: OAuth has no built-in delegation tracking; AAP provides <tt>delegation.depth</tt> and <tt>delegation.chain</tt> for auditable multi-hop authorization
- <strong>Operational limits</strong>: Scopes are binary (granted/not granted); AAP constraints enable quantitative limits (rate, volume, time windows)</t>
        <t><strong>Comparison Examples:</strong></t>
        <t>Research agent web scraping:</t>
        <ul spacing="normal">
          <li>
            <t>OAuth: <tt>scope=read:web</tt> (unlimited web access)</t>
          </li>
          <li>
            <t>AAP: <tt>capabilities</tt> with <tt>action: search.web</tt>,
<tt>domains_allowed</tt>, <tt>max_requests_per_hour: 50</tt></t>
          </li>
        </ul>
        <t>Content creation with approval:</t>
        <ul spacing="normal">
          <li>
            <t>OAuth: <tt>scope=write:cms</tt> (no draft vs. publish)</t>
          </li>
          <li>
            <t>AAP: <tt>action: cms.create_draft</tt> plus
<tt>oversight.requires_human_approval_for: [cms.publish]</tt></t>
          </li>
        </ul>
        <t>Delegated tool calls:</t>
        <ul spacing="normal">
          <li>
            <t>OAuth: Requires new OAuth flow per delegation</t>
          </li>
          <li>
            <t>AAP: Token Exchange with automatic
<tt>delegation.depth</tt> increment and privilege reduction</t>
          </li>
        </ul>
        <t><strong>Compatibility:</strong> AAP maintains backward compatibility by optionally including OAuth <tt>scope</tt> claim alongside AAP capabilities.</t>
      </section>
      <section anchor="fine-grained-authorization-systems-zanzibar-rebac">
        <name>Fine-Grained Authorization Systems (Zanzibar, ReBAC)</name>
        <t>Google Zanzibar and Relation-Based Access Control (ReBAC) systems focus on resource-level permissions with global consistency ("user X can read document Y based on relationship graph").</t>
        <t><strong>Zanzibar/ReBAC Characteristics:</strong>
- Resource-centric authorization
- Graph-based relationship evaluation
- Highly scalable, globally consistent
- Focus: "Who can access what resource?"</t>
        <t><strong>AAP Focus:</strong>
- Agent-centric authorization
- Task context and operational constraints
- Delegation chain tracking
- Focus: "What can this agent do, under what conditions, for what purpose?"</t>
        <t><strong>Complementary Use:</strong> AAP and Zanzibar address different layers:
- <strong>AAP</strong>: Authorizes the agent to call APIs, binds actions to tasks, enforces operational limits
- <strong>Zanzibar</strong>: Determines whether the agent (once authorized) can access specific resources</t>
        <t><strong>Integration Pattern:</strong></t>
        <sourcecode type="text"><![CDATA[
1. Agent presents AAP token to API (capability: "document.read")
2. API validates AAP token (RS validation)
3. API calls Zanzibar to check if agent can read specific document
4. Both checks must pass for request to succeed
]]></sourcecode>
      </section>
      <section anchor="cloud-identity-and-access-management">
        <name>Cloud Identity and Access Management</name>
        <t>Major cloud providers offer identity and temporary credential systems:</t>
        <t><strong>AWS Security Token Service (STS):</strong>
- Cross-account delegation with session policies
- Temporary credentials with limited lifetime
- AssumeRole for privilege escalation/reduction
- IAM policies define permissions</t>
        <t><strong>GCP Workload Identity:</strong>
- Kubernetes ServiceAccount federation to GCP IAM
- Workload identity binding for containerized applications
- OAuth 2.0-based token exchange</t>
        <t><strong>AAP Differences:</strong>
- <strong>Vendor-neutral</strong>: AAP is not tied to a specific cloud provider
- <strong>Agent-specific claims</strong>: <tt>agent.model</tt>, <tt>task.purpose</tt>, <tt>oversight</tt> requirements not present in cloud IAM
- <strong>Explicit delegation tracking</strong>: Cloud IAM tracks roles/sessions but not multi-hop agent delegation chains
- <strong>Task binding</strong>: Cloud credentials are session-bound, not task-bound</t>
        <t><strong>Integration:</strong> AAP can be used as a policy enforcement layer above cloud IAM. For example:
- AAP token authorizes agent for a task
- Agent exchanges AAP token for cloud-specific credentials (AWS STS, GCP token)
- Cloud IAM enforces resource-level permissions</t>
      </section>
      <section anchor="service-mesh-authorization-istio-linkerd">
        <name>Service Mesh Authorization (Istio, Linkerd)</name>
        <t>Service meshes provide network-level security with mutual TLS and Layer 7 policies:</t>
        <t><strong>Service Mesh Capabilities:</strong>
- mTLS for service-to-service encryption
- SPIFFE/SPIRE for workload identity
- Authorization policies based on service identity
- Network-level request routing and policy enforcement</t>
        <t><strong>AAP Capabilities:</strong>
- Application-level agent identity with model and operator metadata
- Task semantics and purpose binding
- Business logic constraints (rate limits, domain allowlists, approval workflows)
- Delegation chain for multi-agent workflows</t>
        <t><strong>Complementary Layers:</strong></t>
        <table>
          <thead>
            <tr>
              <th align="left">Layer</th>
              <th align="left">Technology</th>
              <th align="left">What It Provides</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">Network (L4/L7)</td>
              <td align="left">Service Mesh</td>
              <td align="left">Identity (SPIFFE), mTLS, service-to-service authz</td>
            </tr>
            <tr>
              <td align="left">Application</td>
              <td align="left">AAP</td>
              <td align="left">Agent identity, task binding, capability constraints, oversight</td>
            </tr>
          </tbody>
        </table>
        <t><strong>Integration:</strong>
- Use SPIFFE IDs in AAP <tt>agent.id</tt> claim
- Service mesh enforces network policy ("can agent reach API?")
- AAP enforces business logic ("can agent perform this action with these constraints?")</t>
      </section>
      <section anchor="capability-based-security">
        <name>Capability-Based Security</name>
        <t>AAP uses the term "capability" from classic capability-based security literature (Dennis &amp; Van Horn 1966, Levy 1984):</t>
        <t><strong>Classic Capability Systems:</strong>
- Unforgeable tokens (capabilities) that grant access to specific objects
- Capabilities combine authority and designation
- No ambient authority (no ACLs checked at access time)
- Pure object-capability model (E language, seL4 microkernel)</t>
        <t><strong>AAP Capabilities:</strong>
- Structured claims in signed JWTs representing permissions
- Combine action designation (<tt>search.web</tt>) with constraints
- Rely on centralized Authorization Server (not pure capability model)
- Inherit unforgeability from JWT signature (not object references)</t>
        <t><strong>Key Difference:</strong> AAP is not a pure object-capability system. It uses centralized issuance (AS) and validation (RS) rather than distributed capability passing. However, AAP borrows the principle of <strong>least authority</strong>: each capability explicitly states what is allowed and under what constraints, rather than checking ambient permissions.</t>
      </section>
      <section anchor="openid-connect-and-step-up-authentication">
        <name>OpenID Connect and Step-Up Authentication</name>
        <t>OpenID Connect (OIDC) <xref target="OIDC"/> provides identity claims and authentication strength signaling:</t>
        <t><strong>OIDC Capabilities:</strong>
- User identity claims (<tt>sub</tt>, <tt>email</tt>, <tt>name</tt>)
- Authentication context (<tt>acr</tt>, <tt>amr</tt> claims)
- Step-up authentication via <tt>acr_values</tt> parameter
- ID tokens separate from access tokens</t>
        <t><strong>AAP Capabilities:</strong>
- Agent identity (non-human, autonomous software)
- Task binding and operational constraints
- Oversight requirements signal when human approval needed
- Access tokens include both identity and authorization</t>
        <t><strong>Overlap:</strong> Both use JWT and OAuth 2.0 foundation.</t>
        <t><strong>Integration:</strong>
- AAP <tt>oversight.requires_human_approval_for</tt> can trigger OIDC step-up authentication
- Resource Server can request user approval via OIDC interaction, using <tt>acr_values</tt> for higher assurance
- Human supervisor identified in <tt>oversight.supervisor</tt> can authenticate via OIDC</t>
      </section>
      <section anchor="oauth-20-rich-authorization-requests-rar">
        <name>OAuth 2.0 Rich Authorization Requests (RAR)</name>
        <t>Rich Authorization Requests extend OAuth to support complex authorization requirements beyond simple scopes.</t>
        <t><strong>RAR Features:</strong>
- Structured authorization details in JSON
- Request-specific authorization (e.g., payment with amount)
- Detailed, fine-grained permissions</t>
        <t><strong>AAP vs. RAR:</strong>
- <strong>RAR</strong>: Request-time authorization details sent by client
- <strong>AAP</strong>: Token-time structured claims issued by AS, enforced by RS
- <strong>RAR</strong>: Focuses on authorization request
- <strong>AAP</strong>: Focuses on token structure and enforcement</t>
        <t><strong>Complementary:</strong> RAR can be used to request AAP capabilities. Client sends RAR with desired capabilities; AS issues AAP token with granted capabilities.</t>
      </section>
      <section anchor="summary-where-aap-fits">
        <name>Summary: Where AAP Fits</name>
        <t>AAP occupies a unique position in the authorization ecosystem:</t>
        <table>
          <thead>
            <tr>
              <th align="left">System</th>
              <th align="left">AAP Relationship</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">OAuth Scopes</td>
              <td align="left">Extends with capabilities</td>
            </tr>
            <tr>
              <td align="left">Zanzibar/ReBAC</td>
              <td align="left">AAP: agent layer; Zanzibar: resource layer</td>
            </tr>
            <tr>
              <td align="left">Cloud IAM</td>
              <td align="left">Vendor-neutral; integrates with cloud IAM</td>
            </tr>
            <tr>
              <td align="left">Service Mesh</td>
              <td align="left">Adds app-level semantics (task, constraints)</td>
            </tr>
            <tr>
              <td align="left">OIDC</td>
              <td align="left">Agent identity; integrates for oversight</td>
            </tr>
            <tr>
              <td align="left">RAR</td>
              <td align="left">Defines token structure; RAR requests capabilities</td>
            </tr>
          </tbody>
        </table>
        <t><strong>AAP is designed for scenarios where:</strong>
- The client is an autonomous AI agent (not a human user)
- Actions must be bound to explicit tasks with declared purposes
- Authorization requires operational constraints (rate limits, domain restrictions, time windows)
- Delegation chains must be tracked and auditable
- Human oversight is required for high-risk actions
- Standard OAuth scopes are insufficient for expressing agent policies</t>
      </section>
    </section>
  </middle>
  <back>
    <references anchor="sec-combined-references">
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <reference anchor="RFC2119">
          <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="RFC5234">
          <front>
            <title>Augmented BNF for Syntax Specifications: ABNF</title>
            <author fullname="D. Crocker" initials="D." role="editor" surname="Crocker"/>
            <author fullname="P. Overell" initials="P." surname="Overell"/>
            <date month="January" year="2008"/>
            <abstract>
              <t>Internet technical specifications often need to define a formal syntax. Over the years, a modified version of Backus-Naur Form (BNF), called Augmented BNF (ABNF), has been popular among many Internet specifications. The current specification documents ABNF. It balances compactness and simplicity with reasonable representational power. The differences between standard BNF and ABNF involve naming rules, repetition, alternatives, order-independence, and value ranges. This specification also supplies additional rule definitions and encoding for a core lexical analyzer of the type common to several Internet specifications. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="68"/>
          <seriesInfo name="RFC" value="5234"/>
          <seriesInfo name="DOI" value="10.17487/RFC5234"/>
        </reference>
        <reference anchor="RFC6749">
          <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="RFC6750">
          <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>
        <reference anchor="RFC7519">
          <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="RFC8174">
          <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="RFC8693">
          <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="RFC8705">
          <front>
            <title>OAuth 2.0 Mutual-TLS Client Authentication and Certificate-Bound Access Tokens</title>
            <author fullname="B. Campbell" initials="B." surname="Campbell"/>
            <author fullname="J. Bradley" initials="J." surname="Bradley"/>
            <author fullname="N. Sakimura" initials="N." surname="Sakimura"/>
            <author fullname="T. Lodderstedt" initials="T." surname="Lodderstedt"/>
            <date month="February" year="2020"/>
            <abstract>
              <t>This document describes OAuth client authentication and certificate-bound access and refresh tokens using mutual Transport Layer Security (TLS) authentication with X.509 certificates. OAuth clients are provided a mechanism for authentication to the authorization server using mutual TLS, based on either self-signed certificates or public key infrastructure (PKI). OAuth authorization servers are provided a mechanism for binding access tokens to a client's mutual-TLS certificate, and OAuth protected resources are provided a method for ensuring that such an access token presented to it was issued to the client presenting the token.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8705"/>
          <seriesInfo name="DOI" value="10.17487/RFC8705"/>
        </reference>
        <reference anchor="RFC9449">
          <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>
      </references>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <reference anchor="RFC7009">
          <front>
            <title>OAuth 2.0 Token Revocation</title>
            <author fullname="T. Lodderstedt" initials="T." role="editor" surname="Lodderstedt"/>
            <author fullname="S. Dronia" initials="S." surname="Dronia"/>
            <author fullname="M. Scurtescu" initials="M." surname="Scurtescu"/>
            <date month="August" year="2013"/>
            <abstract>
              <t>This document proposes an additional endpoint for OAuth authorization servers, which allows clients to notify the authorization server that a previously obtained refresh or access token is no longer needed. This allows the authorization server to clean up security credentials. A revocation request will invalidate the actual token and, if applicable, other tokens based on the same authorization grant.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7009"/>
          <seriesInfo name="DOI" value="10.17487/RFC7009"/>
        </reference>
        <reference anchor="RFC7517">
          <front>
            <title>JSON Web Key (JWK)</title>
            <author fullname="M. Jones" initials="M." surname="Jones"/>
            <date month="May" year="2015"/>
            <abstract>
              <t>A JSON Web Key (JWK) is a JavaScript Object Notation (JSON) data structure that represents a cryptographic key. This specification also defines a JWK Set JSON data structure that represents a set of JWKs. Cryptographic algorithms and identifiers for use with this specification are described in the separate JSON Web Algorithms (JWA) specification and IANA registries established by that specification.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7517"/>
          <seriesInfo name="DOI" value="10.17487/RFC7517"/>
        </reference>
        <reference anchor="RFC7662">
          <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="RFC7800">
          <front>
            <title>Proof-of-Possession Key Semantics for JSON Web Tokens (JWTs)</title>
            <author fullname="M. Jones" initials="M." surname="Jones"/>
            <author fullname="J. Bradley" initials="J." surname="Bradley"/>
            <author fullname="H. Tschofenig" initials="H." surname="Tschofenig"/>
            <date month="April" year="2016"/>
            <abstract>
              <t>This specification describes how to declare in a JSON Web Token (JWT) that the presenter of the JWT possesses a particular proof-of- possession key and how the recipient can cryptographically confirm proof of possession of the key by the presenter. Being able to prove possession of a key is also sometimes described as the presenter being a holder-of-key.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7800"/>
          <seriesInfo name="DOI" value="10.17487/RFC7800"/>
        </reference>
        <reference anchor="RFC7942">
          <front>
            <title>Improving Awareness of Running Code: The Implementation Status Section</title>
            <author fullname="Y. Sheffer" initials="Y." surname="Sheffer"/>
            <author fullname="A. Farrel" initials="A." surname="Farrel"/>
            <date month="July" year="2016"/>
            <abstract>
              <t>This document describes a simple process that allows authors of Internet-Drafts to record the status of known implementations by including an Implementation Status section. This will allow reviewers and working groups to assign due consideration to documents that have the benefit of running code, which may serve as evidence of valuable experimentation and feedback that have made the implemented protocols more mature.</t>
              <t>This process is not mandatory. Authors of Internet-Drafts are encouraged to consider using the process for their documents, and working groups are invited to think about applying the process to all of their protocol specifications. This document obsoletes RFC 6982, advancing it to a Best Current Practice.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="205"/>
          <seriesInfo name="RFC" value="7942"/>
          <seriesInfo name="DOI" value="10.17487/RFC7942"/>
        </reference>
        <reference anchor="OIDC" target="https://openid.net/specs/openid-connect-core-1_0.html">
          <front>
            <title>OpenID Connect Core 1.0</title>
            <author>
              <organization>OpenID Foundation</organization>
            </author>
            <date year="2014"/>
          </front>
        </reference>
        <reference anchor="SPIFFE" target="https://spiffe.io">
          <front>
            <title>SPIFFE: Secure Production Identity Framework for Everyone</title>
            <author>
              <organization>SPIFFE</organization>
            </author>
            <date year="2024"/>
          </front>
        </reference>
        <reference anchor="OpenTelemetry" target="https://opentelemetry.io">
          <front>
            <title>OpenTelemetry</title>
            <author>
              <organization>CNCF</organization>
            </author>
            <date year="2024"/>
          </front>
        </reference>
      </references>
    </references>
    <?line 1768?>

<section anchor="complete-json-schema-reference">
      <name>Complete JSON Schema Reference</name>
      <t>This appendix provides links to the complete JSON Schema definitions for AAP tokens. These schemas are normative and MUST be used for validation in conforming implementations.</t>
      <section anchor="schema-files">
        <name>Schema Files</name>
        <t>All schemas are available in the <tt>/schemas</tt> directory of the reference implementation repository:</t>
        <ul spacing="normal">
          <li>
            <t><strong>aap-token.schema.json</strong> - Root schema for complete AAP token payload
            </t>
            <ul spacing="normal">
              <li>
                <t>Validates all required standard JWT claims (<tt>iss</tt>, <tt>sub</tt>, <tt>aud</tt>, <tt>exp</tt>, <tt>iat</tt>)</t>
              </li>
              <li>
                <t>Validates all required AAP claims (<tt>agent</tt>, <tt>task</tt>, <tt>capabilities</tt>)</t>
              </li>
              <li>
                <t>Validates optional AAP claims (<tt>oversight</tt>, <tt>delegation</tt>, <tt>context</tt>, <tt>audit</tt>)</t>
              </li>
            </ul>
          </li>
          <li>
            <t><strong>aap-agent.schema.json</strong> - Schema for <tt>agent</tt> claim
            </t>
            <ul spacing="normal">
              <li>
                <t>Validates agent identity structure</t>
              </li>
              <li>
                <t>Required fields: <tt>id</tt>, <tt>type</tt>, <tt>operator</tt></t>
              </li>
              <li>
                <t>Optional fields: <tt>name</tt>, <tt>version</tt>, <tt>model</tt>, <tt>runtime</tt>, <tt>certification</tt></t>
              </li>
            </ul>
          </li>
          <li>
            <t><strong>aap-task.schema.json</strong> - Schema for <tt>task</tt> claim
            </t>
            <ul spacing="normal">
              <li>
                <t>Validates task binding structure</t>
              </li>
              <li>
                <t>Required fields: <tt>id</tt>, <tt>purpose</tt></t>
              </li>
              <li>
                <t>Optional fields: <tt>created_by</tt>, <tt>created_at</tt>, <tt>expires_at</tt>, <tt>priority</tt>, <tt>category</tt></t>
              </li>
            </ul>
          </li>
          <li>
            <t><strong>aap-capabilities.schema.json</strong> - Schema for <tt>capabilities</tt> array
            </t>
            <ul spacing="normal">
              <li>
                <t>Validates capability structure</t>
              </li>
              <li>
                <t>Each capability requires <tt>action</tt> field (validated against ABNF grammar via regex)</t>
              </li>
              <li>
                <t>Optional <tt>constraints</tt>, <tt>resources</tt>, <tt>conditions</tt> fields</t>
              </li>
            </ul>
          </li>
          <li>
            <t><strong>aap-constraints.schema.json</strong> - Schema for constraint objects
            </t>
            <ul spacing="normal">
              <li>
                <t>Defines all standard constraint types with validation rules</t>
              </li>
              <li>
                <t>Includes type definitions for rate limits, domain lists, time windows, etc.</t>
              </li>
            </ul>
          </li>
          <li>
            <t><strong>aap-oversight.schema.json</strong> - Schema for <tt>oversight</tt> claim
            </t>
            <ul spacing="normal">
              <li>
                <t>Validates human oversight requirements</t>
              </li>
              <li>
                <t>Includes <tt>requires_human_approval_for</tt> array, <tt>approval_reference</tt>, etc.</t>
              </li>
            </ul>
          </li>
          <li>
            <t><strong>aap-delegation.schema.json</strong> - Schema for <tt>delegation</tt> claim
            </t>
            <ul spacing="normal">
              <li>
                <t>Validates delegation chain structure</t>
              </li>
              <li>
                <t>Required fields: <tt>depth</tt>, <tt>max_depth</tt></t>
              </li>
              <li>
                <t>Optional fields: <tt>chain</tt>, <tt>parent_jti</tt>, <tt>privilege_reduction</tt></t>
              </li>
            </ul>
          </li>
          <li>
            <t><strong>aap-context.schema.json</strong> - Schema for <tt>context</tt> claim
            </t>
            <ul spacing="normal">
              <li>
                <t>Validates execution context information</t>
              </li>
              <li>
                <t>Includes environment, location, runtime, session details</t>
              </li>
            </ul>
          </li>
          <li>
            <t><strong>aap-audit.schema.json</strong> - Schema for <tt>audit</tt> claim
            </t>
            <ul spacing="normal">
              <li>
                <t>Validates audit and logging requirements</t>
              </li>
              <li>
                <t>Required field: <tt>trace_id</tt></t>
              </li>
              <li>
                <t>Optional fields: <tt>log_level</tt>, <tt>retention_period</tt>, <tt>compliance_framework</tt></t>
              </li>
            </ul>
          </li>
        </ul>
      </section>
      <section anchor="using-the-schemas">
        <name>Using the Schemas</name>
        <t><strong>JSON Schema Version:</strong> All schemas use JSON Schema Draft 2020-12.</t>
        <t><strong>Validation Example (Node.js with Ajv):</strong></t>
        <sourcecode type="javascript"><![CDATA[
const Ajv = require('ajv');
const addFormats = require('ajv-formats');

const ajv = new Ajv();
addFormats(ajv);

// Load all schemas
const schemas = {
  token: require('./schemas/aap-token.schema.json'),
  agent: require('./schemas/aap-agent.schema.json'),
  task: require('./schemas/aap-task.schema.json'),
};

// Add referenced schemas
ajv.addSchema(schemas.agent);
ajv.addSchema(schemas.task);

// Validate token
const validate = ajv.compile(schemas.token);
const valid = validate(decodedJWT);

if (!valid) {
  console.error('Validation errors:', validate.errors);
}
]]></sourcecode>
        <t><strong>Validation Example (Python with jsonschema):</strong></t>
        <sourcecode type="python"><![CDATA[
import jsonschema
import json

# Load schemas
with open('schemas/aap-token.schema.json') as f:
    token_schema = json.load(f)

# Create resolver for $ref
store = {}
for schema_file in ['aap-agent.schema.json', 'aap-task.schema.json']:
    with open(f'schemas/{schema_file}') as f:
        store[schema_file] = json.load(f)

resolver = jsonschema.RefResolver.from_schema(
    token_schema, store=store)

# Validate
try:
    jsonschema.validate(decoded_jwt, token_schema, resolver=resolver)
    print("Token is valid")
except jsonschema.ValidationError as e:
    print(f"Validation error: {e.message}")
]]></sourcecode>
      </section>
      <section anchor="schema-updates">
        <name>Schema Updates</name>
        <t>When the AAP specification is updated:
- Schema version will be incremented in the <tt>$id</tt> field
- Breaking changes will trigger new major version
- Non-breaking additions (new optional fields) will increment minor version
- Implementations SHOULD validate against the schema version matching the specification version</t>
      </section>
    </section>
    <section anchor="token-exchange-flow-example">
      <name>Token Exchange Flow Example</name>
      <t>This appendix provides a detailed example of OAuth 2.0 Token Exchange <xref target="RFC8693"/> for AAP delegation scenarios.</t>
      <section anchor="scenario">
        <name>Scenario</name>
        <t>A research agent (Agent A) needs to delegate web scraping capability to a specialized tool (Tool B):</t>
        <ul spacing="normal">
          <li>
            <t><strong>Original agent:</strong> <tt>agent-researcher-01</tt> (depth=0)</t>
          </li>
          <li>
            <t><strong>Delegated tool:</strong> <tt>tool-web-scraper</tt> (depth=1)</t>
          </li>
          <li>
            <t><strong>Capability reduction:</strong> Remove <tt>cms.create_draft</tt>, keep only <tt>search.web</tt> with tighter constraints</t>
          </li>
          <li>
            <t><strong>Lifetime reduction:</strong> Original token: 3600s, derived token: 1800s</t>
          </li>
        </ul>
      </section>
      <section anchor="step-1-agent-obtains-original-token">
        <name>Step 1: Agent Obtains Original Token</name>
        <t><strong>Request to Authorization Server:</strong></t>
        <sourcecode type="http"><![CDATA[
POST /token HTTP/1.1
Host: as.example.com
Content-Type: application/x-www-form-urlencoded

grant_type=client_credentials
&client_id=agent-researcher-01
&client_secret=[SECRET]
&scope=aap:research
]]></sourcecode>
        <t><strong>Authorization Server Response:</strong></t>
        <sourcecode type="json"><![CDATA[
{
  "access_token": "eyJhbGciOiJFUzI1NiIsInR5cCI6IkpXVCJ9...",
  "token_type": "Bearer",
  "expires_in": 3600,
  "scope": "aap:research"
}
]]></sourcecode>
        <t><strong>Decoded Token Payload (Original):</strong></t>
        <sourcecode type="json"><![CDATA[
{
  "iss": "https://as.example.com",
  "sub": "agent-researcher-01",
  "aud": "https://api.example.com",
  "exp": 1704067200,
  "iat": 1704063600,
  "jti": "token-original-123",
  "agent": {
    "id": "agent-researcher-01",
    "type": "llm-autonomous",
    "operator": "org:acme-corp"
  },
  "task": {
    "id": "task-123",
    "purpose": "research_climate_data"
  },
  "capabilities": [
    {
      "action": "search.web",
      "constraints": {
        "domains_allowed": ["example.org", "trusted.example"],
        "max_requests_per_hour": 100
      }
    },
    {
      "action": "cms.create_draft"
    }
  ],
  "delegation": {
    "depth": 0,
    "max_depth": 2,
    "chain": ["agent-researcher-01"]
  }
}
]]></sourcecode>
      </section>
      <section anchor="step-2-agent-exchanges-token-for-tool-specific-token">
        <name>Step 2: Agent Exchanges Token for Tool-Specific Token</name>
        <t><strong>Token Exchange Request:</strong></t>
        <sourcecode type="http"><![CDATA[
POST /token HTTP/1.1
Host: as.example.com
Content-Type: application/x-www-form-urlencoded

grant_type=urn:ietf:params:oauth:grant-type:token-exchange
&subject_token=eyJhbGciOiJFUzI1NiIsInR5cCI6IkpXVCJ9...
&subject_token_type=urn:ietf:params:oauth:token-type:access_token
&resource=https://tool-scraper.example.com
&scope=aap:research.scraping
&requested_token_type=urn:ietf:params:oauth:token-type:access_token
]]></sourcecode>
        <t><strong>Key Parameters:</strong>
- <tt>grant_type</tt>: Token Exchange grant type
- <tt>subject_token</tt>: The original AAP token (from Step 1)
- <tt>resource</tt>: Intended audience for derived token (Tool B)
- <tt>scope</tt>: Reduced scope for delegation</t>
        <t><strong>Authorization Server Processing:</strong></t>
        <ol spacing="normal" type="1"><li>
            <t>Validate <tt>subject_token</tt> (signature, expiration, issuer)</t>
          </li>
          <li>
            <t>Extract delegation depth from subject token: <tt>depth = 0</tt></t>
          </li>
          <li>
            <t>Check if delegation allowed: <tt>depth &lt; max_depth</tt> (0 &lt; 2) PASS</t>
          </li>
          <li>
            <t>Determine reduced capabilities:
            </t>
            <ul spacing="normal">
              <li>
                <t>Keep only <tt>search.web</tt> (remove <tt>cms.create_draft</tt> - not needed by scraper)</t>
              </li>
              <li>
                <t>Tighten constraints: <tt>max_requests_per_hour: 100 -&gt; 50</tt></t>
              </li>
              <li>
                <t>Narrow <tt>domains_allowed</tt>: Keep only <tt>example.org</tt> (remove <tt>trusted.example</tt>)</t>
              </li>
            </ul>
          </li>
          <li>
            <t>Reduce token lifetime: <tt>3600s -&gt; 1800s</tt> (50% reduction for delegated token)</t>
          </li>
          <li>
            <t>Increment delegation depth: <tt>0 -&gt; 1</tt></t>
          </li>
          <li>
            <t>Append to delegation chain: <tt>["agent-researcher-01"] -&gt; ["agent-researcher-01", "tool-web-scraper"]</tt></t>
          </li>
          <li>
            <t>Record <tt>parent_jti</tt>: <tt>token-original-123</tt></t>
          </li>
          <li>
            <t>Generate new <tt>jti</tt>: <tt>token-delegated-456</tt></t>
          </li>
          <li>
            <t>Sign and issue derived token</t>
          </li>
        </ol>
        <t><strong>Authorization Server Response:</strong></t>
        <sourcecode type="json"><![CDATA[
{
"access_token": "eyJhbGciOiJFUzI1NiJ9...",
"issued_token_type": "urn:ietf:params:oauth:token-type:access_token",
"token_type": "Bearer",
"expires_in": 1800,
"scope": "aap:research.scraping"
}
]]></sourcecode>
        <t><strong>Decoded Token Payload (Derived):</strong></t>
        <sourcecode type="json"><![CDATA[
{
  "iss": "https://as.example.com",
  "sub": "agent-researcher-01",
  "aud": "https://tool-scraper.example.com",
  "exp": 1704065400,
  "iat": 1704063600,
  "jti": "token-delegated-456",
  "agent": {
    "id": "agent-researcher-01",
    "type": "llm-autonomous",
    "operator": "org:acme-corp"
  },
  "task": {
    "id": "task-123",
    "purpose": "research_climate_data"
  },
  "capabilities": [
    {
      "action": "search.web",
      "constraints": {
        "domains_allowed": ["example.org"],
        "max_requests_per_hour": 50
      }
    }
  ],
  "delegation": {
    "depth": 1,
    "max_depth": 2,
    "chain": [
      "agent-researcher-01",
      "tool-web-scraper"
    ],
    "parent_jti": "token-original-123",
    "privilege_reduction": {
      "capabilities_removed": ["cms.create_draft"],
      "constraints_added": [],
      "lifetime_reduced_by": 1800
    }
  }
}
]]></sourcecode>
      </section>
      <section anchor="key-changes-in-derived-token">
        <name>Key Changes in Derived Token</name>
        <table>
          <thead>
            <tr>
              <th align="left">Field</th>
              <th align="left">Change</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">
                <tt>aud</tt></td>
              <td align="left">Changed to tool audience</td>
            </tr>
            <tr>
              <td align="left">
                <tt>exp</tt></td>
              <td align="left">Lifetime reduced 50%</td>
            </tr>
            <tr>
              <td align="left">
                <tt>jti</tt></td>
              <td align="left">New unique ID</td>
            </tr>
            <tr>
              <td align="left">
                <tt>capabilities</tt></td>
              <td align="left">Removed <tt>cms.create_draft</tt></td>
            </tr>
            <tr>
              <td align="left">
                <tt>domains_allowed</tt></td>
              <td align="left">Narrowed to <tt>example.org</tt> only</td>
            </tr>
            <tr>
              <td align="left">
                <tt>max_requests_per_hour</tt></td>
              <td align="left">Reduced from 100 to 50</td>
            </tr>
            <tr>
              <td align="left">
                <tt>delegation.depth</tt></td>
              <td align="left">Incremented from 0 to 1</td>
            </tr>
            <tr>
              <td align="left">
                <tt>delegation.chain</tt></td>
              <td align="left">Tool appended</td>
            </tr>
            <tr>
              <td align="left">
                <tt>delegation.parent_jti</tt></td>
              <td align="left">Parent link added</td>
            </tr>
          </tbody>
        </table>
      </section>
      <section anchor="privilege-reduction-summary">
        <name>Privilege Reduction Summary</name>
        <t>The Authorization Server applied the principle of <strong>least privilege</strong> by:</t>
        <ol spacing="normal" type="1"><li>
            <t><strong>Capability Removal:</strong> Tool doesn't need <tt>cms.create_draft</tt> (CMS access) for scraping task</t>
          </li>
          <li>
            <t><strong>Constraint Tightening:</strong> Reduced rate limit from 100 to 50 requests/hour</t>
          </li>
          <li>
            <t><strong>Domain Narrowing:</strong> Removed <tt>trusted.example</tt> from allowed domains (tool only accesses <tt>example.org</tt>)</t>
          </li>
          <li>
            <t><strong>Lifetime Reduction:</strong> 1800s instead of 3600s (shorter validity window reduces risk)</t>
          </li>
        </ol>
        <t>These reductions ensure that if the tool is compromised or malicious, damage is limited to the specific delegated capabilities and constraints.</t>
      </section>
      <section anchor="further-delegation-depth2">
        <name>Further Delegation (Depth=2)</name>
        <t>If Tool B needs to delegate to another tool (e.g., HTML parser), it can repeat the Token Exchange process:</t>
        <ul spacing="normal">
          <li>
            <t>Tool B exchanges <tt>token-delegated-456</tt> for new token with <tt>depth=2</tt></t>
          </li>
          <li>
            <t>Further capability reduction (e.g., read-only access to specific URLs)</t>
          </li>
          <li>
            <t>Shorter lifetime (e.g., 900s)</t>
          </li>
          <li>
            <t>Chain becomes: <tt>["agent-researcher-01", "tool-web-scraper", "tool-html-parser"]</tt></t>
          </li>
          <li>
            <t><tt>max_depth=2</tt> prevents delegation beyond this point</t>
          </li>
        </ul>
      </section>
    </section>
    <section anchor="aap-specific-error-codes">
      <name>AAP-Specific Error Codes</name>
      <t>This appendix defines error codes specific to AAP authorization failures, extending the OAuth 2.0 error code registry.</t>
      <section anchor="error-code-reference">
        <name>Error Code Reference</name>
        <dl>
          <dt><tt>aap_invalid_capability</tt> (403):</dt>
          <dd>
            <t>No matching capability for requested action.
Example: Agent has <tt>search.web</tt> but requests <tt>cms.publish</tt>.</t>
          </dd>
          <dt><tt>aap_constraint_violation</tt> (429 or 403):</dt>
          <dd>
            <t>Capability constraint violated.
Example: 51st request when <tt>max_requests_per_hour</tt> is 50.</t>
          </dd>
          <dt><tt>aap_task_mismatch</tt> (403):</dt>
          <dd>
            <t>Request inconsistent with task purpose.
Example: Token for "research" task used for data deletion.</t>
          </dd>
          <dt><tt>aap_approval_required</tt> (403):</dt>
          <dd>
            <t>Action requires human approval.
Example: <tt>cms.publish</tt> listed in
<tt>oversight.requires_human_approval_for</tt>.</t>
          </dd>
          <dt><tt>aap_excessive_delegation</tt> (403):</dt>
          <dd>
            <t>Delegation depth exceeded.
Example: Token with depth=3 when max_depth=2.</t>
          </dd>
          <dt><tt>aap_invalid_context</tt> (403):</dt>
          <dd>
            <t>Context restriction violated.
Example: Request outside <tt>time_window</tt> or from blocked region.</t>
          </dd>
          <dt><tt>aap_domain_not_allowed</tt> (403):</dt>
          <dd>
            <t>Target domain not in allowlist.
Example: Request to <tt>malicious.example</tt> when
<tt>domains_allowed</tt> is <tt>["example.org"]</tt>.</t>
          </dd>
          <dt><tt>aap_agent_not_recognized</tt> (403):</dt>
          <dd>
            <t>Agent identity not recognized by policy.
Example: Unknown <tt>agent.id</tt> value.</t>
          </dd>
          <dt><tt>aap_invalid_delegation_chain</tt> (403):</dt>
          <dd>
            <t>Delegation chain validation failed.
Example: Chain length does not match depth,
or parent token is invalid.</t>
          </dd>
          <dt><tt>aap_capability_expired</tt> (403):</dt>
          <dd>
            <t>Time-based capability expired.
Example: Request after <tt>time_window.end</tt>.</t>
          </dd>
        </dl>
      </section>
      <section anchor="error-response-format">
        <name>Error Response Format</name>
        <t>AAP error responses SHOULD follow OAuth 2.0 error response format <xref target="RFC6749"/> Section 5.2 with AAP-specific error codes:</t>
        <sourcecode type="json"><![CDATA[
{
  "error": "aap_constraint_violation",
  "error_description": "The request violates capability constraints",
  "error_uri": "https://aap.example/errors#constraint-violation"
}
]]></sourcecode>
        <t><strong>Privacy Consideration:</strong> Error descriptions SHOULD be generic and MUST NOT leak constraint values, agent details, or policy information. Detailed errors SHOULD be logged server-side only.</t>
      </section>
      <section anchor="error-code-usage-examples">
        <name>Error Code Usage Examples</name>
        <t><strong>Example 1: Rate Limit Exceeded</strong></t>
        <sourcecode type="http"><![CDATA[
HTTP/1.1 429 Too Many Requests
Content-Type: application/json
Retry-After: 3600

{
  "error": "aap_constraint_violation",
  "error_description": "Rate limit exceeded for this capability"
}
]]></sourcecode>
        <t><strong>Example 2: Domain Not Allowed</strong></t>
        <sourcecode type="http"><![CDATA[
HTTP/1.1 403 Forbidden
Content-Type: application/json

{
  "error": "aap_domain_not_allowed",
  "error_description": "Domain not in allowed list"
}
]]></sourcecode>
        <t><strong>Example 3: Approval Required</strong></t>
        <sourcecode type="http"><![CDATA[
HTTP/1.1 403 Forbidden
Content-Type: application/json

{
  "error": "aap_approval_required",
  "error_description": "This action requires human approval",
  "approval_reference": "https://approve.example.com/task-123"
}
]]></sourcecode>
      </section>
      <section anchor="error-handling-guidance-for-clients">
        <name>Error Handling Guidance for Clients</name>
        <t>When receiving AAP error codes, agents SHOULD:</t>
        <ol spacing="normal" type="1"><li>
            <t><strong>aap_constraint_violation with 429:</strong> Respect <tt>Retry-After</tt> header; back off requests</t>
          </li>
          <li>
            <t><strong>aap_approval_required:</strong> Present <tt>approval_reference</tt> to operator for human approval</t>
          </li>
          <li>
            <t><strong>aap_invalid_capability:</strong> Do not retry; request new token with correct capabilities</t>
          </li>
          <li>
            <t><strong>aap_excessive_delegation:</strong> Do not attempt further delegation; use current token directly</t>
          </li>
          <li>
            <t><strong>aap_domain_not_allowed:</strong> Validate domains before requests to avoid repeated errors</t>
          </li>
        </ol>
        <t>Agents MUST NOT attempt to bypass errors by modifying tokens (signature validation will fail).</t>
      </section>
    </section>
    <section anchor="conformance-checklist">
      <name>Conformance Checklist</name>
      <t>This appendix provides implementation checklists for Authorization Servers and Resource Servers to verify AAP conformance.</t>
      <section anchor="authorization-server-conformance-checklist">
        <name>Authorization Server Conformance Checklist</name>
        <t>An AAP-conformant Authorization Server MUST implement the following:</t>
        <t><strong>Token Issuance:</strong></t>
        <ul spacing="normal">
          <li>
            <t>Supports OAuth 2.0 Client Credentials Grant <xref target="RFC6749"/> Section 4.4</t>
          </li>
          <li>
            <t>Issues JWTs with all required AAP claims: <tt>agent</tt>, <tt>task</tt>, <tt>capabilities</tt></t>
          </li>
          <li>
            <t>Validates capabilities against operator policy before issuance</t>
          </li>
          <li>
            <t>Supports at least one proof-of-possession mechanism (DPoP <xref target="RFC9449"/> or mTLS <xref target="RFC8705"/>)</t>
          </li>
          <li>
            <t>Signs tokens with ES256 or RS256 (not HS256)</t>
          </li>
          <li>
            <t>Issues tokens with unique <tt>jti</tt> (JWT ID) for each token</t>
          </li>
        </ul>
        <t><strong>Delegation (Token Exchange):</strong></t>
        <ul spacing="normal">
          <li>
            <t>Supports OAuth 2.0 Token Exchange <xref target="RFC8693"/></t>
          </li>
          <li>
            <t>Implements privilege reduction on delegation (capability subset, constraint tightening, lifetime reduction)</t>
          </li>
          <li>
            <t>Increments <tt>delegation.depth</tt> on each Token Exchange</t>
          </li>
          <li>
            <t>Appends tool/agent ID to <tt>delegation.chain</tt></t>
          </li>
          <li>
            <t>Validates parent token (via <tt>parent_jti</tt>) is not expired or revoked before issuing derived token</t>
          </li>
          <li>
            <t>Enforces <tt>delegation.depth &lt; delegation.max_depth</tt> before issuance</t>
          </li>
          <li>
            <t>MUST NOT issue token if resulting depth exceeds <tt>max_depth</tt></t>
          </li>
        </ul>
        <t><strong>Claim Validation:</strong></t>
        <ul spacing="normal">
          <li>
            <t>Validates <tt>capabilities</tt> array is non-empty</t>
          </li>
          <li>
            <t>Validates <tt>action</tt> fields conform to ABNF grammar (Section 5.5)</t>
          </li>
          <li>
            <t>Validates constraint types against standard definitions (Section 5.6)</t>
          </li>
          <li>
            <t>Applies operator policy to reduce requested capabilities to authorized subset</t>
          </li>
        </ul>
        <t><strong>Key Management:</strong></t>
        <ul spacing="normal">
          <li>
            <t>Stores private signing keys in HSM or equivalent secure storage (production)</t>
          </li>
          <li>
            <t>Rotates signing keys every 90 days (or per organization policy)</t>
          </li>
          <li>
            <t>Publishes public keys via JWKS endpoint <xref target="RFC7517"/></t>
          </li>
          <li>
            <t>Supports multiple concurrent signing keys (for rotation overlap)</t>
          </li>
        </ul>
        <t><strong>Revocation:</strong></t>
        <ul spacing="normal">
          <li>
            <t>Provides token revocation endpoint <xref target="RFC7009"/> or introspection <xref target="RFC7662"/></t>
          </li>
          <li>
            <t>Distributes revocation events to Resource Servers within 30 seconds</t>
          </li>
          <li>
            <t>Optionally supports token family revocation (revoke parent + descendants)</t>
          </li>
        </ul>
        <t><strong>Audit and Logging:</strong></t>
        <ul spacing="normal">
          <li>
            <t>Logs all token issuance events with <tt>agent.id</tt>, <tt>task.id</tt>, capabilities, timestamp</t>
          </li>
          <li>
            <t>Logs Token Exchange events with parent-child JTI linkage</t>
          </li>
          <li>
            <t>Supports trace ID correlation (<tt>audit.trace_id</tt> from request)</t>
          </li>
          <li>
            <t>Provides tamper-evident audit logs (cryptographic chaining or append-only storage)</t>
          </li>
        </ul>
      </section>
      <section anchor="resource-server-conformance-checklist">
        <name>Resource Server Conformance Checklist</name>
        <t>An AAP-conformant Resource Server MUST implement the following:</t>
        <t><strong>Standard Token Validation:</strong></t>
        <ul spacing="normal">
          <li>
            <t>Validates token signature using AS public key (via JWKS)</t>
          </li>
          <li>
            <t>Validates token expiration (<tt>exp</tt> claim) with acceptable clock skew (&lt;=5 minutes)</t>
          </li>
          <li>
            <t>Validates audience (<tt>aud</tt> claim) matches Resource Server identifier</t>
          </li>
          <li>
            <t>Validates issuer (<tt>iss</tt> claim) is trusted Authorization Server</t>
          </li>
          <li>
            <t>Checks token revocation status (if revocation mechanism in place)</t>
          </li>
        </ul>
        <t><strong>Proof-of-Possession Validation:</strong></t>
        <ul spacing="normal">
          <li>
            <t>Validates DPoP proof if <tt>cnf.jkt</tt> present in token</t>
          </li>
          <li>
            <t>Validates mTLS client certificate if <tt>cnf.x5t#S256</tt> present in token</t>
          </li>
          <li>
            <t>Rejects bearer tokens if proof-of-possession is required by policy</t>
          </li>
        </ul>
        <t><strong>Agent Identity Validation:</strong></t>
        <ul spacing="normal">
          <li>
            <t>Validates <tt>agent</tt> claim is present and well-formed</t>
          </li>
          <li>
            <t>Validates <tt>agent.id</tt> is recognized or allowed by local policy</t>
          </li>
          <li>
            <t>Validates <tt>agent.runtime.attested</tt> if required by policy</t>
          </li>
          <li>
            <t>Rejects tokens with agents on deny list</t>
          </li>
        </ul>
        <t><strong>Task Binding Validation:</strong></t>
        <ul spacing="normal">
          <li>
            <t>Validates <tt>task</tt> claim is present</t>
          </li>
          <li>
            <t>Validates requested action is consistent with <tt>task.purpose</tt></t>
          </li>
          <li>
            <t>Rejects requests that clearly fall outside declared purpose</t>
          </li>
          <li>
            <t>Enforces time window if <tt>task.expires_at</tt> is present</t>
          </li>
        </ul>
        <t><strong>Capability Enforcement:</strong></t>
        <ul spacing="normal">
          <li>
            <t>Matches requested operation to <tt>capability.action</tt> entry</t>
          </li>
          <li>
            <t>Uses exact string matching for action names (case-sensitive)</t>
          </li>
          <li>
            <t>Denies request if no matching capability found (returns <tt>aap_invalid_capability</tt>)</t>
          </li>
          <li>
            <t>Enforces ALL constraints in matching capability (AND semantics)</t>
          </li>
        </ul>
        <t><strong>Constraint Enforcement:</strong></t>
        <ul spacing="normal">
          <li>
            <t>Enforces <tt>max_requests_per_hour</tt> (fixed window, resets at minute 0)</t>
          </li>
          <li>
            <t>Enforces <tt>max_requests_per_minute</tt> (sliding 60-second window)</t>
          </li>
          <li>
            <t>Enforces <tt>domains_allowed</tt> (DNS suffix matching, rightmost)</t>
          </li>
          <li>
            <t>Enforces <tt>domains_blocked</tt> (takes precedence over allowlist)</t>
          </li>
          <li>
            <t>Enforces <tt>time_window</tt> (inclusive start, exclusive end)</t>
          </li>
          <li>
            <t>Enforces <tt>max_depth</tt> for delegation</t>
          </li>
          <li>
            <t>Uses distributed rate limiting for multi-instance deployments</t>
          </li>
        </ul>
        <t><strong>Oversight Enforcement:</strong></t>
        <ul spacing="normal">
          <li>
            <t>Checks if action in <tt>oversight.requires_human_approval_for</tt></t>
          </li>
          <li>
            <t>Returns HTTP 403 with <tt>aap_approval_required</tt> if approval needed</t>
          </li>
          <li>
            <t>Includes <tt>approval_reference</tt> in error response</t>
          </li>
        </ul>
        <t><strong>Delegation Validation:</strong></t>
        <ul spacing="normal">
          <li>
            <t>Validates <tt>delegation.depth &lt;= delegation.max_depth</tt></t>
          </li>
          <li>
            <t>Validates <tt>delegation.chain</tt> length equals <tt>depth + 1</tt></t>
          </li>
          <li>
            <t>Validates delegation depth against capability-specific <tt>max_depth</tt> constraints</t>
          </li>
        </ul>
        <t><strong>Error Handling:</strong></t>
        <ul spacing="normal">
          <li>
            <t>Returns privacy-preserving error messages (no constraint values, agent details)</t>
          </li>
          <li>
            <t>Returns appropriate HTTP status codes (401, 403, 429)</t>
          </li>
          <li>
            <t>Returns AAP-specific error codes (Appendix C)</t>
          </li>
          <li>
            <t>Logs detailed error information server-side (not in response)</t>
          </li>
        </ul>
        <t><strong>Audit and Logging:</strong></t>
        <ul spacing="normal">
          <li>
            <t>Logs all authorized requests with <tt>agent.id</tt>, <tt>task.id</tt>, action, outcome</t>
          </li>
          <li>
            <t>Propagates trace ID from <tt>audit.trace_id</tt> to downstream services</t>
          </li>
          <li>
            <t>Logs authorization failures (with reason, not returned to client)</t>
          </li>
          <li>
            <t>Supports tamper-evident audit logs</t>
          </li>
        </ul>
      </section>
      <section anchor="optional-features-recommended">
        <name>Optional Features (RECOMMENDED)</name>
        <t><strong>Authorization Server:</strong></t>
        <ul spacing="normal">
          <li>
            <t>Supports multiple token lifetimes based on risk level</t>
          </li>
          <li>
            <t>Supports dynamic rate limit adjustment</t>
          </li>
          <li>
            <t>Implements behavioral anomaly detection</t>
          </li>
          <li>
            <t>Provides policy approval workflow (draft -&gt; review -&gt; active)</t>
          </li>
          <li>
            <t>Supports claim filtering on Token Exchange (privacy)</t>
          </li>
        </ul>
        <t><strong>Resource Server:</strong></t>
        <ul spacing="normal">
          <li>
            <t>Implements behavioral anomaly detection for agent requests</t>
          </li>
          <li>
            <t>Provides real-time monitoring dashboards</t>
          </li>
          <li>
            <t>Supports audit log anonymization after retention period</t>
          </li>
          <li>
            <t>Implements re-validation before executing high-risk actions (TOCTOU mitigation)</t>
          </li>
        </ul>
      </section>
      <section anchor="testing-conformance">
        <name>Testing Conformance</name>
        <t>Organizations SHOULD test conformance using:
- <strong>Test Vectors:</strong> Validate against AAP test vectors (valid and invalid tokens)
- <strong>Interoperability Tests:</strong> Verify interoperability with reference implementations
- <strong>Security Audits:</strong> Third-party security review of AS and RS implementations
- <strong>Compliance Scans:</strong> Automated conformance checking tools</t>
      </section>
    </section>
    <section anchor="implementation-examples">
      <name>Implementation Examples</name>
      <section anchor="example-policy-configuration">
        <name>Example Policy Configuration</name>
        <t><strong>Operator Policy (JSON format):</strong></t>
        <sourcecode type="json"><![CDATA[
{
  "policy_id": "policy-research-agents-v1",
  "policy_version": "1.0",
  "applies_to": {
    "agent_type": "llm-autonomous",
    "operator": "org:acme-corp"
  },
  "allowed_capabilities": [
    {
      "action": "search.web",
      "default_constraints": {
        "domains_allowed": ["example.org", "trusted.example"],
        "max_requests_per_hour": 100,
        "max_requests_per_minute": 10
      }
    },
    {
      "action": "cms.create_draft",
      "default_constraints": {
        "max_requests_per_hour": 20
      }
    },
    {
      "action": "cms.publish",
      "requires_oversight": true
    }
  ],
  "global_constraints": {
    "token_lifetime": 3600,
    "max_delegation_depth": 2,
    "require_pop": true
  },
  "oversight": {
    "level": "approval",
    "requires_human_approval_for": [
      "cms.publish", "data.delete"
    ],
    "approval_reference": "https://approve.example.com/agents"
  },
  "audit": {
    "log_level": "full",
    "retention_period_days": 90,
    "compliance_framework": ["SOC2", "GDPR"]
  }
}
]]></sourcecode>
      </section>
      <section anchor="example-token-validation-code-pseudocode">
        <name>Example Token Validation Code (Pseudocode)</name>
        <sourcecode type="python"><![CDATA[
def validate_aap_token(token, request):
    # 1. Standard OAuth validation
    if not verify_signature(token, AS_PUBLIC_KEY):
        raise InvalidSignature()

    if token.exp < now():
        raise TokenExpired()

    if token.aud != RESOURCE_SERVER_ID:
        raise InvalidAudience()

    # 2. Proof-of-possession (if required)
    if REQUIRE_POP:
        if 'cnf' not in token:
            raise ProofOfPossessionRequired()
        validate_pop(token.cnf, request)

    # 3. Agent identity
    if token.agent.id not in ALLOWED_AGENTS:
        raise AgentNotRecognized()

    # 4. Task binding
    if not is_consistent(request.action, token.task.purpose):
        raise TaskMismatch()

    # 5. Capability matching
    matching_cap = find_capability(
        token.capabilities, request.action)
    if not matching_cap:
        raise NoMatchingCapability()

    # 6. Constraint enforcement
    enforce_constraints(matching_cap.constraints, request, token)

    # 7. Oversight
    approvals = token.oversight.requires_human_approval_for
    if request.action in approvals:
        ref = token.oversight.approval_reference
        raise ApprovalRequired(ref)

    # 8. Delegation depth
    depth = token.delegation.depth
    if depth > token.delegation.max_depth:
        raise ExcessiveDelegation()

    # 9. Audit logging
    log_authorized_request(
        token.agent.id, token.task.id,
        request.action)

    return AUTHORIZED

def enforce_constraints(constraints, request, token):
    # Rate limiting
    if 'max_requests_per_hour' in constraints:
        hourly = constraints.max_requests_per_hour
        if get_hourly_count(token.jti) >= hourly:
            raise RateLimitExceeded()
        increment_hourly_count(token.jti)

    # Domain allowlist
    if 'domains_allowed' in constraints:
        domain = extract_domain(request.target_url)
        allowed = constraints.domains_allowed
        if not domain_matches_allowlist(domain, allowed):
            raise DomainNotAllowed()

    # Time window
    if 'time_window' in constraints:
        tw = constraints.time_window
        if not (tw.start <= now() < tw.end):
            raise OutsideTimeWindow()

    # Additional constraints...
]]></sourcecode>
      </section>
    </section>
    <section anchor="test-vectors-1">
      <name>Test Vectors</name>
      <t>This appendix provides canonical test vectors for validating AAP implementations. A complete test vector suite is maintained separately (see Section 15.2). The examples below are normative and illustrate key validation scenarios.</t>
      <section anchor="valid-token-basic-research-agent">
        <name>Valid Token -- Basic Research Agent</name>
        <t>The following JWT payload represents a valid AAP token for a research agent with web search capability:</t>
        <sourcecode type="json"><![CDATA[
{
  "iss": "https://as.example.com",
  "sub": "agent-researcher-01",
  "aud": "https://api.example.com",
  "exp": 1735689600,
  "iat": 1735686000,
  "jti": "tv-valid-basic-001",
  "agent": {
    "id": "agent-researcher-01",
    "type": "llm-autonomous",
    "operator": "org:acme-corp"
  },
  "task": {
    "id": "task-research-001",
    "purpose": "research"
  },
  "capabilities": [
    {
      "action": "search.web",
      "constraints": {
        "domains_allowed": ["example.org", "trusted.example"],
        "max_requests_per_hour": 100
      }
    }
  ],
  "delegation": {
    "depth": 0,
    "max_depth": 2,
    "chain": ["agent-researcher-01"]
  }
}
]]></sourcecode>
        <t><strong>Expected Results:</strong>
- Request to <tt>search.web</tt> targeting <tt>example.org</tt>: AUTHORIZED
- Request to <tt>search.web</tt> targeting <tt>malicious.example</tt>: FORBIDDEN (<tt>aap_domain_not_allowed</tt>)
- Request to <tt>cms.publish</tt>: FORBIDDEN (<tt>aap_invalid_capability</tt>)</t>
      </section>
      <section anchor="invalid-token-excessive-delegation">
        <name>Invalid Token -- Excessive Delegation</name>
        <sourcecode type="json"><![CDATA[
{
  "iss": "https://as.example.com",
  "sub": "agent-researcher-01",
  "aud": "https://api.example.com",
  "exp": 1735689600,
  "iat": 1735686000,
  "jti": "tv-invalid-delegation-001",
  "agent": {
    "id": "agent-researcher-01",
    "type": "llm-autonomous",
    "operator": "org:acme-corp"
  },
  "task": {
    "id": "task-001",
    "purpose": "research"
  },
  "capabilities": [
    {
      "action": "search.web"
    }
  ],
  "delegation": {
    "depth": 4,
    "max_depth": 3,
    "chain": ["agent-01", "tool-a", "tool-b", "tool-c", "tool-d"],
    "parent_jti": "parent-token-id"
  }
}
]]></sourcecode>
        <t><strong>Expected Result:</strong> REJECTED -- <tt>aap_excessive_delegation</tt> (HTTP 403). The <tt>delegation.depth</tt> (4) exceeds <tt>delegation.max_depth</tt> (3).</t>
      </section>
      <section anchor="edge-case-clock-skew-tolerance">
        <name>Edge Case -- Clock Skew Tolerance</name>
        <t>Given a token with <tt>exp: 1735686000</tt> and a clock skew tolerance of 300 seconds (5 minutes):</t>
        <table>
          <thead>
            <tr>
              <th align="left">Validation Time</th>
              <th align="left">Seconds Past exp</th>
              <th align="left">Expected Result</th>
              <th align="left">Reason</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">1735686000</td>
              <td align="left">0</td>
              <td align="left">REJECTED</td>
              <td align="left">Token is expired at <tt>exp</tt> (exclusive boundary)</td>
            </tr>
            <tr>
              <td align="left">1735686240</td>
              <td align="left">240</td>
              <td align="left">ACCEPTED</td>
              <td align="left">Within 5-minute tolerance</td>
            </tr>
            <tr>
              <td align="left">1735686300</td>
              <td align="left">300</td>
              <td align="left">ACCEPTED</td>
              <td align="left">At boundary of tolerance (inclusive)</td>
            </tr>
            <tr>
              <td align="left">1735686301</td>
              <td align="left">301</td>
              <td align="left">REJECTED</td>
              <td align="left">Beyond tolerance</td>
            </tr>
          </tbody>
        </table>
      </section>
    </section>
  </back>
  <!-- ##markdown-source:
H4sIAAAAAAAAA+y9a3cbV3Iu/B2/og99EgMKAJHUHYyTQ5GSzRldeAjazoyX
F9EAmmRbABqDBijRlvLbT9VTVfvS3aDkxJm871qZNTMCge59rV27rk/1er1W
uU4X04t0ViyyQbJebbLWOl/P6PPhVbZYJ4eb9XWxyn9N13mxSE5XxWU+y5L2
4eFpJ7ksVslbfiDZ7++20vF4ld3Qe4enlV+mxWSRzqnJ6Sq9XPfSdNkrUvqx
t5Tmert7rUm6zq6K1e0gKdfTVr5cYTDlen9399nufqvcjOd5WdIYzm+X1NLJ
i/OXrXSVpYNkmE02q3x923pfrN5drYrNcqB9/0hf5Iur5Fv+svUuu6UnpoNW
0pPf+cOffjznfw5PZLol/ginzF+8TifX+SLrrYuefmy1UjzEjbUS+s/lZjaT
OR4urrJZcrTa/IofitVVutC2aNiLabbM6P8Wa/yazdN8NkjG9PbVKp3/nyv+
uz8p5q3WoljN6a2bjPpIzl4e7e/tPdOPj/YfPNSPj588fOY+PtrVj08euWef
7j2xZ58+fvbAPj7ZfaQfnz3kFlr54rLS4RNaed/eE/v4+PG+fXy66zp89hDf
vj05PhpgZut0dZWtB8n1er0sB/fvFzTtfNpfZOv75TKblPpFb1IsFtlkTf+u
st7exW7/ej2fSQtChjtv6cGT4+RIHqR/V1my19/dwUNuG+g/PV5s2nt5/mWx
WUx1C+k/9JEb29/de8hvDk9PXr580TzUcplfXmb9vIiGoW8IuWV8EqabCQ7F
CW8nEWDykrYwYyoE/b+4yVa3dKq2DlRajEe3j9HxFM6zWTbP1nQitq7n2h6p
jjV6f2v/R2+OXtZ7b/WIKfD/Jem4XK/SybrVOr/Oy4RO8WbOLGGaXdIRKJP1
dfZ5JtFN0oV2br/rqY+ZBD025dNIrZf51SKb4md6sVgU82JT8hFNcUT74DDZ
hzWdo5L+zcs1H3LwsXRFX73PqUkaOm0P7dQ0mczSfF6ig5t0lgtRJKvNjOZQ
FjSNdJ2Ut+U6o4cmNFriKiU9kI6LzVr6THLd4i7tQ/kuIaJd0wC6Ce3CCs2l
M/6S1yunIXZpFrPsSjqaXNN3ZRf9X2/m1EFBlEGTvF5TV3/b5KtsLvM6obUt
aFCLgnpcrEFhWZImi+w9L9q6mBSzgySn0dIJyi9zevS6eJ+si2RTZn4pu7yO
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
iVFm9OODI+3jyDTvyMdK9Bf9/elTx7kWZ8WVcz/AADuD4R8DmDLjzEm0zaYy
BhGpePJTM++KEIm5KKMRjjL0N4fqKqQTCJt5w6y8wzxGmQB/wl3BH6LLgr/w
tMZ/heelTbtxn2kIVM96RHjQOmhN7xN0hgXH6F58SJmTGt9zFhCxQPj7L5Pn
aMNms43Y0HgfWPmxm6+8TomWA2tZ89UoKsOUPWM3pNgMGy7jtjJOcFK5APkf
Ooz8T57iVvxlnROTg8+PZIk5n/BWM6s+MXpTGTnwLV2ZGZltq979o4tFLf77
v/978ktZLFq/tZJkB8/vDJLf4I/fyaf0Wb7ssQ+Hle1s1dvd2+nKA3y6+ZHZ
bN7z3dqvZpnmJ9jTPyYSJMpb2u9wErje6Au9TPGCfe7xquobbkh4s0ef3fcg
nWLhf7Qv8MAn7XG1WbCvLOwzW9zkq2Ixl4nvvNuMiR3Qppe+7XRNf9LR2NHA
JLTY4v994vXjbTkPbGeyKewxKgOrJZugY4eRmPfFbFnbCX6guhHQNdykd/RV
/sU254JjqBDddEFKbj6ZZW6nimU+4UeV0Hvyhf7K7P4iMJxiAzbjmX+CDgKz
i4sxfoPDlEYSL8JRcKBV0zBL99S5L9RQ6p1rlYmHXIG6+gndu92SVngIMuH+
+2zsNypoN9hinh/kBrqy+LhjI3+yhegTZe783PXP8jUFT2y5Li+Igi+IDTJF
PtrVZz6FJNUwsgkpfLJcshVfMD4SLNYb/m5HNo+vw524O/r/nwN6A00NaWX5
JgjkW5JlI5UA7N15dcPFre4E7oalWgxmHOYD3bqfvE4Xt8l35+enpBmIRYKE
VSK8ZJbPma0UKudGxrZRcp2lU9b0FiS+fGCumNIoBsnTPz/vkqScEiexP34c
Joevng+Svcd/ft7ZKvqSrJjz3S7HqeSp0wwGfLvoE6QGL0ROSnmoOcnKv5rl
h106WUYn8uGfn/s3INiJ2Y6NJXw8wR9/++1fNcaMtCXq08vptqzcS7Sa0n6y
t8seJhZjWiJDOwtSdN8RhV2aSKzisNyx35+dmMtIuywjKSUQrUq2y0H7xIXk
l+X9NXskmOKt3egtJ/pvERedIBRJi6F8Z/EQ1bPrLnDPuZy0CJdYJDO6053I
mQHDKa/9cZH7KusvUwj3ciD0qO64ltxCgWlBhK2zpqqof8zCtZwASPkk4nl5
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

-->

</rfc>
