<?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.29 (Ruby 3.3.8) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-oauth-ai-agents-on-behalf-of-user-01" category="info" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.28.1 -->
  <front>
    <title abbrev="OAuth 2.0 Extension: On-Behalf-Of User Authorization for AI Agents">OAuth 2.0 Extension: On-Behalf-Of User Authorization for AI Agents</title>
    <seriesInfo name="Internet-Draft" value="draft-oauth-ai-agents-on-behalf-of-user-01"/>
    <author fullname="Thilina Shashimal Senarath">
      <organization>WSO2</organization>
      <address>
        <email>thilinasenarath97@gmail.com</email>
      </address>
    </author>
    <author fullname="Ayesha Dissanayaka">
      <organization>WSO2</organization>
      <address>
        <email>ayshsandu@gmail.com</email>
      </address>
    </author>
    <date year="2025" month="May" day="08"/>
    <area>Security</area>
    <keyword>ai-agents</keyword>
    <keyword>authorization</keyword>
    <keyword>actor</keyword>
    <keyword>obo</keyword>
    <abstract>
      <?line 39?>

<t>This specification extends the OAuth 2.0 Authorization Framework <xref target="RFC6749"/> to enable AI agents to securely obtain access tokens for acting on behalf of users. It introduces the <strong>requested_actor</strong> parameter in authorization requests to identify the specific agent requiring delegation and the <strong>actor_token</strong> parameter in token requests to authenticate the agent during the exchange of an authorization code for an access token. The flow can be initiated by a resource server challenge, ensuring that user consent is obtained dynamically when access is attempted. This extension ensures secure delegation with explicit user consent, streamlines the authorization flow, and enhances auditability through access token claims that document the delegation chain from the user to the agent via a client application.</t>
    </abstract>
  </front>
  <middle>
    <?line 43?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>AI agents are increasingly common in systems, performing tasks on behalf of users. These agents often need access to protected resources, requiring a secure and robust authorization mechanism that clearly reflects the user's intent and the agent's role in the access request.</t>
      <t>Standard OAuth 2.0 flows, such as the Authorization Code Grant and the Client Credentials Grant <xref target="RFC6749"/>, do not fully address the complexities of agent delegation. They lack specific mechanisms to obtain explicit user consent for an agent's actions or to treat the agent as a distinct identity during the token exchange process.</t>
      <t>The OAuth 2.0 Token Exchange specification <xref target="RFC8693"/> provides a framework for token exchange, but it is primarily designed for server-side communication or impersonation scenarios. It does not natively support obtaining explicit user consent for an agent via the front channel from the authorization endpoint. Furthermore, <xref target="RFC8693"/> does not specify how to acquire the subject token, adding complexity to the delegation process.</t>
      <t>To overcome these limitations, this specification extends the OAuth 2.0 Authorization Code Grant flow to enable user-delegated authorization for AI agents. It introduces the following enhancements:</t>
      <ol spacing="normal" type="1"><li>
          <t>The <strong>requested_actor</strong> parameter at the authorization endpoint, allowing the client to specify the agent for which delegation is requested.</t>
        </li>
        <li>
          <t>The <strong>actor_token</strong> parameter at the token endpoint, enabling the agent to authenticate itself when exchanging a user-approved authorization code for an access token.</t>
        </li>
        <li>
          <t>Detailed claims in the resulting access token, capturing the identities of the user, agent, and client application for transparency and auditability.</t>
        </li>
      </ol>
      <t>This approach builds on existing OAuth 2.0 infrastructure to deliver a secure, simplified, and user-centric delegation process tailored for AI agents.</t>
      <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.</t>
    </section>
    <section anchor="terminology">
      <name>Terminology</name>
      <t>This specification uses the following terms:</t>
      <dl>
        <dt>Actor:</dt>
        <dd>
          <t>An entity that acts on behalf of a user. In context of AI applications, the actor is the agent that performs actions on behalf of the user.</t>
        </dd>
        <dt>Client:</dt>
        <dd>
          <t>An application that initiates the authorization flow and facilitates the interaction between the user, actor, and authorization server. This is the "client" as defined in OAuth 2.0 <xref target="RFC6749"/>.</t>
        </dd>
        <dt>User:</dt>
        <dd>
          <t>The resource owner who grants consent for an actor to access their protected resources.</t>
        </dd>
        <dt>Authorization Server:</dt>
        <dd>
          <t>The server that issues access tokens to the client and actor after successfully authenticating a resource owner and obtaining authorization.</t>
        </dd>
        <dt>Resource Server:</dt>
        <dd>
          <t>The server hosting the protected resources, capable of accepting and validating access tokens. In context of AI applications, resource server can be a model context protocol (MCP) server, another agent or genaric protected resource.</t>
        </dd>
        <dt>Authorization Code:</dt>
        <dd>
          <t>A temporary, single-use code issued by the authorization server to the client's redirect URI after the user has authenticated and granted consent for a specific actor to act on their behalf.</t>
        </dd>
        <dt>Actor Token:</dt>
        <dd>
          <t>A security token (e.g., a JWT <xref target="RFC7519"/>) used by an actor to authenticate itself to the authorization server or resource servers. The <tt>sub</tt> claim of an Actor Token identifies the actor. An actor can obtain an Actor Token by authenticating itself to the authorization server using a different grant, which is not included in the scope of this specification.</t>
        </dd>
        <dt>Access Token:</dt>
        <dd>
          <t>An access token issued by the authorization server to an actor, permitting it to access protected resources on behalf of a specific user. This token explicitly documents the delegation path.</t>
        </dd>
      </dl>
    </section>
    <section anchor="protocol-overview">
      <name>Protocol Overview</name>
      <t>This extension defines a flow where a client application facilitates user consent for an actor, and the actor then uses this consent along with its own authentication to obtain an access token.</t>
      <section anchor="high-level-overview">
        <name>High-Level Overview</name>
        <ol spacing="normal" type="1"><li>
            <t>The Actor signals to the Client that it needs to perform an action on the User's behalf, providing its identifier (ActorID)</t>
          </li>
          <li>
            <t>The Client attempts the action by making a request to the Resource Server</t>
          </li>
          <li>
            <t>If access is unsuccessful (e.g., HTTP 401 Unauthorized due to an invalid/missing token, or HTTP 403 Forbidden due to insufficient scope), Resource Server challenges the Client.</t>
          </li>
        </ol>
        <t>4.The Client initiates the authorization flow by redirecting the User's User-Agent to the Authorization Server's authorization endpoint. This request includes a requested_actor parameter (matching the ActorID).</t>
        <ol spacing="normal" type="1"><li>
            <t>The Authorization Server authenticates the User (if not already authenticated) and presents a consent screen detailing the Client, the requested_actor, and the requested scopes.</t>
          </li>
          <li>
            <t>Upon User consent, the Authorization Server issues a short-lived Authorization Code (tied to the User, Client, and consented Actor) and redirects the User-Agent back to the Client's redirect_uri.</t>
          </li>
          <li>
            <t>The Client receives the Authorization Code via the User-Agent redirect.</t>
          </li>
          <li>
            <t>The Client requests an Access Token from the Authorization Server's token endpoint. This request uses the standard authorization_code grant type. The request includes the Authorization Code, the PKCE code_verifier, and the actor_token (the authentication token of the Actor).</t>
          </li>
          <li>
            <t>The Authorization Server validates the entire request: Authorization Code, PKCE code_verifier, and the actor_token. It ensures the actor_token corresponds to the requested_actor for whom the User granted consent (which is linked to the Authorization Code).</t>
          </li>
          <li>
            <t>Upon successful validation, the Authorization Server issues an Access Token to the Client. This token is a JWT containing claims identifying the User (e.g., sub), the Client (e.g., azp or client_id), and the Actor (e.g., act claim).</t>
          </li>
          <li>
            <t>The Client retries the action or performs a new action on the Resource Server using this newly obtained Access Token.</t>
          </li>
          <li>
            <t>If access is successful (either initially or on retry): The Resource Server validates the Access Token (including the delegation claims like act) and processes the request, returning the resource or confirming the action.</t>
          </li>
        </ol>
        <t>The Client may then pass the result to the Actor.
## Sequence Diagram</t>
        <artwork type="ascii-art"><![CDATA[
    +-----------+   +--------+    +-----------+   +---------------------+    +---------------+
    | User-Agent|   | Client |   | Act as Actor|  | Authorization Server|   | Resource Server |
    +-----------+   +--------+    +-----------+   +---------------------+    +---------------+
          |             |              |                   |                       |
          |     (1) Signals need to act on User's behalf   |                       |                       
          |             |  by passing ActorID              |                       |
          |             |<-------------|                   |
          |             |              |                   |                       |
          |             |              (2) Client attempts action                  |
          |             | -------------------------------------------------------> |
          |             |              |                   |                       |
    /--------------------------------- Access Unsuccessful ----------------------------------\
    |     |             |              |                   |                       |         |
    |------------------------------------[If Unauthorized]-----------------------------------|
    |     |             |              |                   |                       |         |
    |     |             |              |             +---------------------------------+     |              
    |     |             |              |             | Token validation is failed      |     |              
    |     |             |              |             +---------------------------------+     |             
    |     |             |              |                   |                       |         |
    |     |             |  (3) CHALLENGE: HTTP 401, WWW-Authenticate:              |         |
    |     |             |           Bearer error="invalid_token"                   |         |
    |     |             | <--------------------------------------------------------|         |
    |     |             |              |                   |                       |         |
    |  (4) Redirect to AS (for User Authentication and Consent)                    |         |
    |              with requested_actor request parameter                          |         |
    |     |<------------|              |                   |                       |         |
    |     |             |              |                   |                       |         |
    |     |         (5) Authorization Request              |                       |         |
    |     |----------------------------------------------->|                       |         |
    |     |             |              |                   |                       |         |
    |     |     (6) User Authenticates & Consents          |                       |         |
    |     |<---------------------------------------------->|                       |         |
    |     |             |              |                   |                       |         |
    |------------------------------------[If Forbidden]--------------------------------------|
    |     |             |              |                   |                       |         |
    |     |             |              |            +---------------------------------+      |             
    |     |             |              |            |   Insufficient Authorization    |      |             
    |     |             |              |            +---------------------------------+      |           
    |     |             |              |                   |                       |         |
    |     |               (7) CHALLENGE: HTTP 403, WWW-Authenticate:               |         |
    |     |       Bearer error="insufficient_scope" required_scope="scope1 scope2" |         |
    |     |             | <--------------------------------------------------------|         |
    |     |             |              |                   |                       |         |
    |  (8) Redirect to AS (for User Consent)               |                       |         |
    |    with requested_actor request parameter            |                       |         |
    |     |<------------|              |                   |                       |         |
    |     |             |              |                   |                       |         |
    |     |         (9) Authorization Request              |                       |         |
    |     |----------------------------------------------->|                       |         |
    |     |             |              |                   |                       |         |
    |     |            (10) User Consents                  |                       |         |
    |     |<---------------------------------------------->|                       |         |
    |----------------------------------------------------------------------------------------|
    |     |             |              |                   |                       |         |
    |     | (11) Redirect with Authorization Code          |                       |         |
    |     | <----------------------------------------------|                       |         |
    |     |             |              |                   |                       |         |
    |     | (12) Authorization Code    |                   |                       |         |
    |     |------------>|              |                   |                       |         |
    |     |             |              |                   |                       |         |
    |     |             | (13) Token Request with actor_token request parameter    |         |
    |     |             | ---------------------------------|                       |         |
    |     |             |              |                   |                       |         |
    |     |             |  (14) Access Token (JWT)         |                       |         |
    |     |             | <--------------------------------|                       |         |
    |     |             |              |                   |                       |         |
    |     |             |  (15) Client Retries Action with Access Token            |         |
    |     |             |--------------------------------------------------------->|         |
    \----------------------------------------------------------------------------------------/
    /------------------------------------ Access Successful ---------------------------------\
    |     |             |              |                   |                       |         |
    |     |             |  (16) Protected Resource / Action Succeeded              |         |
    |     |             |<---------------------------------------------------------|         |
    \----------------------------------------------------------------------------------------/
]]></artwork>
        <t>The steps in the sequence diagram are as follows:</t>
        <ol spacing="normal" type="1"><li>
            <t>Actor signals its intent to the Client, providing its identifier (ActorID).</t>
          </li>
          <li>
            <t>Client attempts to access protected resources on the Resource Server.</t>
          </li>
          <li>
            <t>If access is unsuccessful with token validation, the Resource Server challenges the Client with a WWW-Authenticate header indicating the invalid token error.</t>
          </li>
          <li>
            <t>Client redirects the User-Agent to the Authorization Server's authorization endpoint, including requested_actor and PKCE challenge.</t>
          </li>
          <li>
            <t>User-Agent makes the Authorization Request to the Authorization Server.</t>
          </li>
          <li>
            <t>User authenticates and grants consent.</t>
          </li>
          <li>
            <t>If access is unsuccessful with insufficient scopes, the Resource Server challenges the Client with a WWW-Authenticate header indicating the insufficient scope error.</t>
          </li>
          <li>
            <t>Client redirects the User-Agent to the Authorization Server's authorization endpoint, including requested_actor and PKCE challenge.</t>
          </li>
          <li>
            <t>User-Agent makes the Authorization Request to the Authorization Server.</t>
          </li>
          <li>
            <t>User grants consent.</t>
          </li>
          <li>
            <t>Authorization Server redirects the User-Agent back to the Client's redirect_uri with an Authorization Code.</t>
          </li>
          <li>
            <t>Client receives the Authorization Code via the User-Agent redirect.</t>
          </li>
          <li>
            <t>Client requests an Access Token from the Authorization Server's token endpoint, including the Authorization Code, PKCE code_verifier, and actor_token.</t>
          </li>
          <li>
            <t>Authorization Server validates the request and issues an Access Token (JWT) to the Client.</t>
          </li>
          <li>
            <t>Client retries the action on the Resource Server using the newly obtained Access Token.</t>
          </li>
          <li>
            <t>Resource Server validates the Access Token and processes the request, returning the protected resource or confirming the action.</t>
          </li>
        </ol>
      </section>
    </section>
    <section anchor="detailed-protocol-steps">
      <name>Detailed Protocol Steps</name>
      <section anchor="user-authorization-request">
        <name>User Authorization Request</name>
        <t>The client initiates the flow by directing the user's user-agent to the authorization server's authorization endpoint. This request is the standard Authorization Code Grant request (Section 4.1.1 of <xref target="RFC6749"/>) and MUST include the <tt>requested_actor</tt> request parameter.</t>
        <artwork><![CDATA[
GET /authorize?response_type=code&
client_id=<client_id>&
redirect_uri=<redirect_uri>&
scope=<scope>&
state=<state>&
code_challenge=<code_challenge>&
code_challenge_method=S256&
requested_actor=<actor_id> HTTP/1.1
]]></artwork>
        <section anchor="parameters">
          <name>Parameters</name>
          <dl>
            <dt>requested_actor:</dt>
            <dd>
              <t>REQUIRED. The unique identifier of the actor for which the client is requesting delegated access on behalf of the user. This identifier MUST uniquely identify the actor within the system and MUST be understood by the Authorization Server.</t>
            </dd>
            <dt>other parameters:</dt>
            <dd>
              <t>The request MUST also include the standard OAuth 2.0 parameters such as <tt>response_type</tt>, <tt>client_id</tt>, <tt>redirect_uri</tt>, <tt>scope</tt>, <tt>state</tt>, and PKCE parameters (<tt>code_challenge</tt> and <tt>code_challenge_method</tt>).</t>
            </dd>
          </dl>
        </section>
        <section anchor="authorization-server-processing">
          <name>Authorization Server Processing</name>
          <t>Upon receiving the authorization request, the Authorization Server MUST perform the following steps:</t>
          <ol spacing="normal" type="1"><li>
              <t>Validate the request parameters according to the OAuth 2.0 Authorization Code Grant (Section 4.1.1 of <xref target="RFC6749"/>).</t>
            </li>
            <li>
              <t>Validate the <tt>requested_actor</tt>. The Authorization Server MUST verify that the provided requested_actor corresponds to a recognized actor identity.</t>
            </li>
            <li>
              <t>Authorization server MAY display a consent screen to the User. This screen SHOULD clearly indicate:  </t>
              <ul spacing="normal">
                <li>
                  <t>The name or identity of the client application initiating the request.</t>
                </li>
                <li>
                  <t>The identity of the actor (requested_actor) for which delegation is being requested.</t>
                </li>
                <li>
                  <t>The specific scopes of access being requested.</t>
                </li>
              </ul>
            </li>
          </ol>
          <t>If the request is valid and the user grants consent, the Authorization Server proceeds to issue an Authorization Code. If the request is invalid, the Authorization Server returns an Error Response.</t>
        </section>
        <section anchor="authorization-code-response">
          <name>Authorization Code Response</name>
          <t>If the user grants consent, the Authorization Server issues an Authorization Code and redirects the user-agent back to the client's redirect_uri (if provided in the request) or a pre-registered redirect URI.</t>
          <artwork><![CDATA[
HTTP/1.1 302 Found
Location: <redirect_uri>?code=<authorization_code>&state=<state>
]]></artwork>
          <section anchor="parameters-1">
            <name>Parameters</name>
            <t>Similar to the standard Authorization Code Grant (Section 4.1.2 of <xref target="RFC6749"/>), the response includes:</t>
            <dl>
              <dt>code:</dt>
              <dd>
                <t>REQUIRED. The Authorization Code is issued by the Authorization Server.</t>
              </dd>
              <dt>state:</dt>
              <dd>
                <t>OPTIONAL. The state parameter passed in the initial request, if present. This value MUST be included in the redirect URI to maintain state between the request and callback.</t>
              </dd>
            </dl>
          </section>
        </section>
        <section anchor="error-response">
          <name>Error Response</name>
          <t>If the request fails, the Authorization Server redirects the user-agent back to the client's redirect_uri with error parameters.</t>
          <artwork><![CDATA[
HTTP/1.1 302 Found
Location: <redirect_uri>?error=<error_code>&state=<state>
]]></artwork>
        </section>
      </section>
      <section anchor="access-token-request">
        <name>Access Token Request</name>
        <t>Upon receiving the Authorization Code, the client then requests an Access Token from the Authorization Server's token endpoint using the authorization_code grant type with the actor_token request parameter.</t>
        <artwork><![CDATA[
POST /token HTTP/1.1
Host: authorization-server.com
Content-Type: application/x-www-form-urlencoded

grant_type=authorization_code&
client_id=<client_id>&
code=<authorization_code>&
code_verifier=<code_verifier>&
redirect_uri=<redirect_uri>&
actor_token=<actor_token>
]]></artwork>
        <section anchor="parameters-2">
          <name>Parameters</name>
          <dl>
            <dt>actor_token:</dt>
            <dd>
              <t>REQUIRED. The actor token is used to authenticate the actor. This token MUST be a valid token issued to the actor and MUST include the <tt>sub</tt> claim identifying the actor.</t>
            </dd>
            <dt>other parameters:</dt>
            <dd>
              <t>The request MUST also include the standard OAuth 2.0 parameters such as <tt>client_id</tt>, <tt>code</tt>, <tt>code_verifier</tt>, and <tt>redirect_uri</tt>.</t>
            </dd>
          </dl>
        </section>
        <section anchor="authorization-server-processing-1">
          <name>Authorization Server Processing</name>
          <t>Upon receiving the token request, the Authorization Server MUST perform the following steps:</t>
          <ol spacing="normal" type="1"><li>
              <t>Validate the request parameters according to the OAuth 2.0 Token Endpoint (Section 4.1.3 of <xref target="RFC6749"/>).</t>
            </li>
            <li>
              <t>The Authorization Server MUST verify that the actor token is valid, not expired.</t>
            </li>
            <li>
              <t>Verify that the authenticated actor identity (obtained from the Actor Token's sub claim) matches the requested_actor value that the user consented to during the initial Authorization Request and which is associated with the code.</t>
            </li>
          </ol>
          <t>If all validations pass, the Authorization Server issues an Access Token. If any validation fails, the Authorization Server returns an Error Response.</t>
        </section>
        <section anchor="access-token-response">
          <name>Access Token Response</name>
          <t>If the Token Request is valid, the Authorization Server issues an Access Token to the actor. This token SHOULD be a JSON Web Token (JWT) <xref target="RFC7519"/> to include claims that document the delegation.</t>
          <artwork><![CDATA[
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
Cache-Control: no-store
Pragma: no-cache

{
  "access_token": "<delegated_access_token>",
  "token_type": "Bearer",
  "expires_in": 3600,
  "scope": "<granted_scope>"
}
]]></artwork>
          <section anchor="parameters-3">
            <name>Parameters</name>
            <t>Similar to the standard Authorization Code Grant (Section 4.1.4 of <xref target="RFC6749"/>)</t>
          </section>
        </section>
        <section anchor="error-response-1">
          <name>Error Response</name>
          <t>If the request is invalid, the Authorization Server returns an error response with an HTTP 400 (Bad Request) status code.</t>
          <artwork><![CDATA[
HTTP/1.1 400 Bad Request
Content-Type: application/json;charset=UTF-8
Cache-Control: no-store
Pragma: no-cache

{
  "error": "invalid_grant"
}
]]></artwork>
        </section>
      </section>
      <section anchor="access-token-structure-and-claims">
        <name>Access Token Structure and Claims</name>
        <t>The Access Token SHOULD be a JWT Profile for OAuth 2.0 Access Tokens <xref target="RFC9068"/>. It SHOULD carry claims that explicitly document the delegation chain.</t>
        <t>In addition to standard JWT claims (e.g., iss, aud, exp, iat, jti), an Access Token issued via this flow MUST contain the following claims:</t>
        <dl>
          <dt>act:</dt>
          <dd>
            <t>REQUIRED. Actor - represents the party acting on behalf of the subject (Section 4.1 of <xref target="RFC8693"/>). In an Access Token issued via this flow, this claim MUST contain a JSON object with at least the following member:
* sub: REQUIRED. The unique identifier of the actor that is acting on behalf of the user.
* Additional members MAY be included in the act claim.</t>
          </dd>
        </dl>
        <t>Example Decoded JWT Payload:</t>
        <artwork><![CDATA[
{
  "iss": "https://authorization-server.com/oauth2/token",
  "aud": "resource_server",
  "sub": "user-456",
  "azp": "s6BhdRkqt3",
  "scope": "read:email write:calendar",
  "exp": 1746009896,
  "iat": 1746006296,
  "jti": "unique-token-id",
  "act": {
    "sub": "actor-finance-v1"
  },
  "aut": "APPLICATION_USER"
}
]]></artwork>
        <t>Resource Servers consuming this token can inspect the <tt>sub</tt> claim to identify the user and the act.sub claim to identify the specific actor that is performing the action. This provides a clear and auditable delegation path.</t>
      </section>
      <section anchor="resource-server-challenge">
        <name>Resource Server Challenge</name>
        <t>The authorization flow is often triggered by a resource server challenge, such as an HTTP 401 (Unauthorized) or 403 (Forbidden) response, indicating a missing, invalid, or insufficient access token. This prompts the client to initiate the authorization process to obtain user consent and a valid token.</t>
        <t>When the client, prompted by an actor or speculatively, requests a protected resource, it includes an access token in the Authorization header if available. If the token is invalid or lacks required scopes or delegation claims, the resource server returns a challenge with a WWW-Authenticate header (e.g., error="invalid_token" or error="insufficient_scope"). The client then redirects the user's user-agent to the authorization server's authorization endpoint to obtain an authorization code.</t>
        <artwork><![CDATA[
GET /some/protected/resource HTTP/1.1
Host: resource-server.com
Authorization: Bearer <existing_access_token_if_any>
]]></artwork>
        <section anchor="resource-server-processing">
          <name>Resource Server Processing</name>
          <t>Upon receiving the request, the Resource Server MUST validate the Access Token (if provided). This validation includes:</t>
          <ol spacing="normal" type="1"><li>
              <t>Ensuring the token is present if required.</t>
            </li>
            <li>
              <t>Verifying the token's signature, issuer, and audience.</t>
            </li>
            <li>
              <t>Checking if the token is expired or revoked.</t>
            </li>
            <li>
              <t>Confirming the token contains the necessary scopes for the requested action.</t>
            </li>
            <li>
              <t>If the resource requires action on behalf of a specific Actor, verifying the token contains the appropriate delegation claims (e.g., an act claim) for that Actor.</t>
            </li>
          </ol>
          <t>If the Access Token is missing, invalid, or insufficient for the requested action, the Resource Server MUST return an error response, typically an HTTP 400 (Bad Request), HTTP 401 (Unauthorized) or HTTP 403 (Forbidden), including a WWW-Authenticate header.</t>
        </section>
        <section anchor="the-www-authenticate-response-header-field">
          <name>The WWW-Authenticate Response Header Field</name>
          <t>The Resource Server MUST include a WWW-Authenticate header field in the response to indicate the reason for the challenge. This header field MUST include the error code and other relevant information.</t>
          <t>Example:</t>
          <artwork><![CDATA[
HTTP/1.1 403 Forbidden
WWW-Authenticate: Bearer error="insufficient_scope", error_description="The access token does not have the required scope(s)", required_scope="scope1 scope2"
Content-Type: application/json;charset=UTF-8

{
  "error": "insufficient_scope",
  "error_description": "The access token does not have the required scope(s)",
  "required_scope": "scope1 scope2"
}
]]></artwork>
        </section>
      </section>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <dl>
        <dt>Actor Authentication:</dt>
        <dd>
          <t>The security of this flow relies heavily on the Authorization Server's ability to securely authenticate the actor during the Token Request using the Actor Token. The method by which actors obtain and secure their Actor Tokens is critical and outside the scope of this specification, but MUST be implemented securely.</t>
        </dd>
        <dt>Proof Key for Code Exchange (PKCE):</dt>
        <dd>
          <t>PKCE <xref target="RFC7636"/> is REQUIRED to prevent authorization code interception attacks, especially relevant if the client (and thus the actor receiving the code) is a public client or runs in an environment where the redirect URI cannot be strictly protected.</t>
        </dd>
        <dt>Single-Use and Short-Lived Authorization Codes:</dt>
        <dd>
          <t>Authorization Codes MUST be single-use and have a short expiration time to minimize the window for compromise.</t>
        </dd>
        <dt>Binding Code to Actor and Client:</dt>
        <dd>
          <t>The Authorization Server MUST bind the Authorization Code to the specific user, client (client_id), and requested actor (requested_actor) during issuance and verify this binding during the Token Request.</t>
        </dd>
        <dt>Clear User Consent:</dt>
        <dd>
          <t>The consent screen presented to the user SHOULD clearly identify the actor and the requested scopes to ensure the user understands exactly what authority they are delegating and to whom.</t>
        </dd>
        <dt>Auditability:</dt>
        <dd>
          <t>The claims in the Access Token (sub, act) provide essential information for auditing actions performed using the token, clearly showing who (user) authorized the action, which application (client) facilitated it, and which entity (actor) performed it.</t>
        </dd>
      </dl>
    </section>
  </middle>
  <back>
    <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="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="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="RFC7636">
        <front>
          <title>Proof Key for Code Exchange by OAuth Public Clients</title>
          <author fullname="N. Sakimura" initials="N." role="editor" surname="Sakimura"/>
          <author fullname="J. Bradley" initials="J." surname="Bradley"/>
          <author fullname="N. Agarwal" initials="N." surname="Agarwal"/>
          <date month="September" year="2015"/>
          <abstract>
            <t>OAuth 2.0 public clients utilizing the Authorization Code Grant are susceptible to the authorization code interception attack. This specification describes the attack as well as a technique to mitigate against the threat through the use of Proof Key for Code Exchange (PKCE, pronounced "pixy").</t>
          </abstract>
        </front>
        <seriesInfo name="RFC" value="7636"/>
        <seriesInfo name="DOI" value="10.17487/RFC7636"/>
      </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="RFC9068">
        <front>
          <title>JSON Web Token (JWT) Profile for OAuth 2.0 Access Tokens</title>
          <author fullname="V. Bertocci" initials="V." surname="Bertocci"/>
          <date month="October" year="2021"/>
          <abstract>
            <t>This specification defines a profile for issuing OAuth 2.0 access tokens in JSON Web Token (JWT) format. Authorization servers and resource servers from different vendors can leverage this profile to issue and consume access tokens in an interoperable manner.</t>
          </abstract>
        </front>
        <seriesInfo name="RFC" value="9068"/>
        <seriesInfo name="DOI" value="10.17487/RFC9068"/>
      </reference>
    </references>
  </back>
  <!-- ##markdown-source:
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

-->

</rfc>
