<?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.4.4) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-oauth-ai-agents-on-behalf-of-user-02" category="info" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.30.0 -->
  <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-02"/>
    <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="August" day="26"/>
    <area>Security</area>
    <workgroup>Web Authorization Protocol</workgroup>
    <keyword>ai-agents</keyword>
    <keyword>authorization</keyword>
    <keyword>actor</keyword>
    <keyword>obo</keyword>
    <abstract>
      <?line 45?>

<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>
    <note removeInRFC="true">
      <name>About This Document</name>
      <t>
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-oauth-ai-agents-on-behalf-of-user/"/>.
      </t>
      <t>
        Discussion of this document takes place on the
        Web Authorization Protocol Working Group mailing list (<eref target="mailto:oauth@ietf.org"/>),
        which is archived at <eref target="https://mailarchive.ietf.org/arch/browse/oauth/"/>.
        Subscribe at <eref target="https://www.ietf.org/mailman/listinfo/oauth/"/>.
      </t>
      <t>Source for this draft and an issue tracker can be found at
        <eref target="https://github.com/shashimalcse/oauth-ai-agents"/>.</t>
    </note>
  </front>
  <middle>
    <?line 49?>

<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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
tyLt7c3w56jVf2OD/Pj/DfJV03fXVnseVyrR+PlWDPItsX7jnz8V9921NUc1
kBi3HIvcefpbIv8bY8zu2npdXA06vsD07sbrXPdvpNL4U3cNYmvOPRiNRszk
Hsq02oObTf/vxjm1Md01iIj9k4Wf3x31Wqa5y/TXCtm3jpwHNlX7Vp8jbUfV
LRUPb7ed/nb6p10iefp/3nmqa35WbpjTHVRp3cNbJHX/nJxu+/TdNYizD2zB
kj3TWTEEpo3I2CQnbzX9nf3vhgP+FUn76dOngI/zwDGe2QpzZY7qYj6qo6rl
UOlSYF3Z75ciUeUQ3/TxjoZvUl3EhfmN0qLraspajmmH15QWkcSWtRx0v/XA
t7UKSFuNRgQoJjKM6WA3NnV+XD9Mq5iSCoz4hlhGVJ1LL6kduUtZUF9Ux8H1
WAfTmFy4YHbFpT/OktPwvLUy461fytUGki7IUY2SIVstaqvjhlTycg2BmlVa
6mvSqL6YJdSjb4RQj78goagOxJaTuHTBmonWCpC7VzhpUmQtXqqulPgihU9r
G8MvXPXkkmhZsdKyQiC3CAhgu78Eq35dh3E+cYIlFTfsk/l1NzD/g+FVVS5X
F7PI62pZQKxvUY9y4yKTpkJfXm6Cpb72IpSt+T1Ec0XVsi1dHLQksGGL2so1
TYGmX56pL6zyhS1XvNvKoW9cnlmrl1t6Jc+80D2UTLz7w7XhGlazOVdDuJKH
rjTpajqa/bSmR06b0cyQ6m2Cn3aPxIo9uP4bl6EpeYLVek+Rm78LbKnV0yf2
z2ffBa5gP33ifoIvOVP5hH7hRyylho/4Cz6SlFiNBtN6nxsDTgDgSR4/PVx/
sInrelt7+oQFDGCilOwKIIn9mHvADQdmu8ActRex6t3c/+LqsHmWwAjXJdGl
g24JHtbYlQ4fWco6V/6ru9Xtl5P0TaBqHSIgLw/i57UX4LVRcRpnjO5+V3Qf
IeBgyFSZ57Zgf4m25+smlgdUdaWIuYMmxE4kHjep5u3ragp7A/vU453Tvji1
3IIfXAbBz8Qa9AcyxWm/MnXO3N1TnxNOadRpK3uc9oZM81b1esB6CIgUBFT3
yCbGKpe2Xg9XVEESokw9PWkQeyuOPGd2if9L60ZPpTvbAybJCzYqrFhucFP3
anXArrO3bkMXXFH+Stsi86Wv8GntjPe+44ZzUitbxXrzKD/LqC5fX9/T19LZ
D99uUZvizfY/8Br7LA0Xzepwp/RaC43+Ql/GNH0GtA9HTU7ED7Q/bKQiHBCM
ALbc9tC2oCp51G0H7Fz1OXhz3Ro+ekuvHI+k59s5M9u7L+zWmptpquWdYG/s
8RHMy9GEKX+dN924KziYDLO+GEIexhK/TDSX1WHMFZOzeSefZRedZ/QaSDe0
iihxtxlh93m77ThOUnPuZl2+Y9Ndr7VxC468VrzgYIXAXromdPQEXXabFXJQ
yLMEKFXIai28Q6ftrDFNYmN1XbzMQWMHr/NId/LxreffUL2BWWsU0j/7zrOj
1sr5Zu4wmWJTJLOl6x0NT6Os1zWKuYzB1LE1+6DgIn0D0TeiLcvQrVf3OtkS
60TbwhnNfWmekR47aVisDa0IoWunK51NxKLrJlplALMCdxtbWb8m5913BJxN
wfOlu1i8rHvN13XKsbUNco5maJ/LG7KKJW3qSnm5M3NyaxxavrIsd2A6Pn9+
Qr+u4jbfxbeudYtNXXajwzRtmLjdjj4vPnMimCvvn+iET+36xTLf+GAfWGaF
x1jX8lWON0G8VQb6gjc23NrJKek1OKLOZo6VWXk/uLy8HKDDMJgX4LggaHEQ
EHDsbjdBX+p8L1cRgReCat/afLzObXewYvxq+vCs3aN2RjQVgbmTq++A0G3d
1p5WfHnWuTFiRDUUbrpMqxATgtn0SDP4ca7u1m+Y8GJf2RH2/F7Ev/lt6aDd
Xd8p/gz31ePjv9Jt1c2EjFh6pmWj3Vm9nTNa4yrtiOD1Q/l+hkUy2gOuv+bf
WvecU9G1+Y5K61R3tr9Hyo70XSJB9yb9bIb1h9nQ2DXdi8PMuE5zJmO22nN2
yBz2OheYuzzi7mxWfUWcMsPEaepe3FJkHW99fYtTsNnCrcS+3mZd4+P5dqJm
Gf3D14qStwTcUweeEtERAqmRnw/3fxXYidLNnDm9BPgqMMv5DXq/1a3r+uqq
2P/lCtX/m8qz/4B4tVCyfHp89HLwKNgJgY0G+EqRp1vAwAOI3wsZHBTh2TSk
BxEOCYI/IFrocFCgi7K3ROeJzTScuF896/RxNP1NNgXHcoEZf8NCok4SnGVj
c3WVnnKdGU6rLxVypdmzTvDxqziZ9+ua4EZO1G0jD3aKrOdqcs+6bm9VdJ+H
seHAHrl7c2UEy6MvDnbGflVCE9AdagTLdfhEEYcQPvsf2l5KVJlOvMt5Tn+Y
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
AA==

-->

</rfc>
