<?xml version="1.0" encoding="US-ASCII"?>
<!DOCTYPE rfc SYSTEM "rfc2629.dtd">
<?rfc toc="yes"?>
<?rfc tocompact="yes"?>
<?rfc tocdepth="3"?>
<?rfc tocindent="yes"?>
<?rfc symrefs="yes"?>
<?rfc sortrefs="yes"?>
<?rfc comments="yes"?>
<?rfc inline="yes"?>
<?rfc compact="yes"?>
<?rfc subcompact="no"?>
<rfc category="exp" docName="draft-song-oauth-ai-agent-collaborate-authz-00"
     ipr="trust200902">
  <front>
    <title abbrev="Abbreviated-Title">OAuth2.0 Extension for Multi-AI Agent
    Collaboration: Applier-On-Behalf-Of Authorization</title>

    <author fullname="Yurong Song " initials="Y" surname="Song">
      <organization>Huawei</organization>

      <address>
        <email>songyurong1@huawei.com</email>
      </address>
    </author>

    <author fullname="Lun Li" initials="L" surname="Li">
      <organization>Huawei</organization>

      <address>
        <email>lilun20@huawei.com</email>
      </address>
    </author>

    <author fullname="Faye Liu" initials="F" surname="Liu">
      <organization>Huawei Singapore</organization>

      <address>
        <email>liufei19@huawei.com</email>
      </address>
    </author>

    <date day="5" month="November" year="2025"/>

    <area>Security</area>

    <workgroup>Web Authorization Protocol</workgroup>

    <keyword>OAuth</keyword>

    <abstract>
      <t>This draft proposes an authorization method for task-oriented
      multi-AI agent collaboration scenarios, where a leading agent
      coordinates sub-AI agents to complete complex tasks. The method extends
      the OAuth 2.0 protocol by adding an optional applier_id field, enabling
      the leading agent to apply for access tokens on behalf of other sub-AI
      agents. This approach greatly simplifies the sub-AI agents'
      authorization process, avoids efficiency loss from repeated interactions
      between multiple sub-AI agents and the authorization server, meanwhile
      maintaining full compatibility with existing OAuth 2.0 workflows.</t>
    </abstract>

    <note title="Requirements Language">
      <t>The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
      "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this
      document are to be interpreted as described in <xref
      target="RFC2119">RFC2119</xref>.</t>
    </note>
  </front>

  <middle>
    <section title="Introduction">
      <t>AI agents are capable of handling tasks. They can integrate multiple
      technologies such as natural language understanding, data analysis, and
      logical reasoning to meet multi-step and cross-scenario requirements.
      However, a single AI agent has a limited knowledge scope and restricted
      functions, making it difficult to independently complete complex tasks
      that span multiple professional domains and require different
      capabilities.</t>

      <t>Collaboration among a group of AI agents is an essential approach for
      such complex tasks. Taking the demand for "real-time health advice" as
      an example, this intent can be split into three tasks: "collect the
      user's health data", "predict the user's health status" and "provide
      health advice based on health status". These tasks need to be
      accomplished by corresponding professional sub-AI agents: the data
      collection agent is responsible for privacy-compliant data collection,
      the health status prediction agent invokes medical models for analysis,
      and the advice generation agent outputs solutions based on health
      guidelines.</t>

      <t>What's more, accordingto some existing research<xref
      target="multi-agent-research-system"/>, a leading agent is necessary for
      coordination. In the above example, the leading agent can receive the
      intent "give me real-time health advice" from user, understand it and
      split it into tasks. Additionally, the leading agent can distribute
      these tasks to sub-AI agents. Finally, the leading agent can integrate
      the results of sub-AI agents to form a complete health advice. Without
      the leading agent, tasks are prone to confusion and results are
      difficult to integrate.</t>

      <t>In this collaborative scenario, if each sub-AI agent applies for
      permissions from the authorization server separately, the authorization
      server needs to verify the identity of each sub-AI agent one by one and
      generate access tokens for them. This will lead to problems such as
      frequent interactions, high computing resource consumption of the
      authorization server and low efficiency of the token issuance
      process.</t>

      <t>Therefore, this draft puts forward an authorization method: configure
      "task scheduling" and "result integration" rights for the leading agent,
      and let the leading agent interface with the authorization server
      centrally. This method can greatly simplify the authorization process of
      sub-AI agents and avoid efficiency loss caused by repeated
      interactions.</t>
    </section>

    <section title="Terminology">
      <t>Applier: a role that request the access token on be half of
      client(s), e.g. a leading AI agent.</t>

      <t>This draft uses the terms "authorization server", "client", "resource
      server" defined by OAuth 2.0 <xref target="RFC6749"/></t>
    </section>

    <section title="Extention of Protocol Flow">
      <t>This protocol flow is modeled after <xref target="RFC6749"/> and
      extends it with a *applier_id* field to enable authorization request by
      the applier.</t>

      <t><figure>
          <artwork><![CDATA[u                                                              
    +--------+                              +----------------+
    |        |--(A) Authorization Request-->|    Resource    |
    |        |                              |      Owner     |
    |        |<--(B) Authorization Grant----|                |
    |        |                              +----------------+
    |Applier |                                                
    |        |   (C) Authorization Grant    +----------------+
    |        |--------(applier_id)--------->|                |
    |        |                              | Authorization  |
    |        |      (D) Access Token        |    Server      |
    |        |<------(app=applier_id)-------|                |
    +--------+                              +----------------+
        |                                                     
        |                                                     
(E) Access Token*                                             
        |                                                     
        v                                                     
    +--------+                              +----------------+
    |        |-------(F) Access Token*----->|    Resource    |
    | Client |                              |     Server     |
    |        |<---(G) Protected Resource----|                |
    +--------+                              +----------------+]]></artwork>
        </figure></t>

      <section title="Extension for Client Registration">
        <t>Before initiating the protocol, the applier registers with the
        authorization server, as defined in <xref target="RFC6749"/>.</t>

        <t>In this draft, the applier's role or capability is incorporated
        into its registration process. For example, the applier's profile
        includes a "capability" parameter with the value "resolve intent and
        distribute tasks".</t>
      </section>

      <section title="Authorization Request &amp; Response">
        <t>This section refers to step (A) and (B).</t>

        <t>The applier receives a requirement from the user, resolves it and
        determines the task(s) and client(s) needed to fulfill the
        requirement. For example, when the user sends the intent "give me
        real-time health advice" to the leading AI agent, the leading AI agent
        resolves this intent and identifies three tasks: task 1 (collect the
        user's health data), task 2 (predict the user's health status) and
        task 3 (provide health advice based on health status). The leading
        agent then utilizes the agent discovery process to select sub-AI
        agent(s) capable of performing the respective tasks. For instance,
        task 1 assigned to sub-AI agent 1, task 2 to sub-AI agent 2, and task
        3 to sub-AI agent 3. In the subsequent authorization process proposed
        in this draft, the leading AI agent is designated as the applier, and
        the selected sub-AI agent(s) are designated as the client(s).</t>

        <t>The applier requests authorization from the resource owner, as
        defined in <xref target="RFC6749"/>.</t>
      </section>

      <section title="Access Token Request &amp; Response">
        <t>This section refers to step (C) and D).</t>

        <t>The applier requests an access token by authenticating with the
        authorization server and presenting the authorization grant, as
        defined in <xref target="RFC6749"/>. The message may also include the
        following parameter:</t>

        <t><list style="hanging">
            <t hangText="applier_id"/>

            <t hangText="">OPTIONAL. The identifier of the applier which is
            requesting access token on be half of the client(s).</t>
          </list>The authorization server authenticates the applier and
        validates that the applier is capable of requesting access tokens on
        behalf of client(s). For example, it checks whether the applier's
        profile includes a "capability" parameter whose value includes
        "distribute tasks".</t>

        <t>If the validation is successful, the authorization server may
        verify grants as defined in <xref target="RFC6749"/>. Then the
        authorization server generates access token and send access token
        response message to the applier. The access token is similar to
        OAuth2.0, except that it consists of an additional claim to specify
        the applier.</t>

        <t><list style="hanging">
            <t hangText="app"/>

            <t hangText="">OPTIONAL. The identifier of the applier which is
            requesting access token on be half of the client(s).</t>
          </list></t>

        <t>The access token includes one *app* parameter and multiple
        *sbj*-*aud*-*scope* pairs. Below is an example:</t>

        <t><list style="empty">
            <t>{</t>

            <t><list style="empty">
                <t>"iss": "authorization server ID",</t>

                <t>"app": "leading agent ID",</t>

                <t>"sbj": "sub AI agent1 ID",</t>

                <t>"aud": "resource server 1 ID",</t>

                <t>"sbj": "sub AI agent 2 ID",</t>

                <t>"aud": "resource server 1 ID", "resource server 2 ID",</t>

                <t>"sbj": "sub AI agent 3 ID",</t>

                <t>"aud": "resource server 2 ID", "resource server 3 ID"</t>

                <t>...</t>
              </list>}</t>
          </list>If the validation fails, the access token response message
        may include the reason for failure. <xref target="RFC6749"/> has
        defined types of error response. In this case, the authorization
        server may use a new error message "unauthorized_applier" to indicate
        that the applier is not capable of requesting access tokens on be half
        of client(s).</t>
      </section>

      <section title="Access Token Transmit">
        <t>This section refers to step (E).</t>

        <t>The applier sends the task ID and access token* to the client(s).
        Based on local policies and regulations, the applier may use privacy
        protection mechanisms to process the access token. Thus, the access
        token* may be the same as the access token, or generated from the
        access token using privacy protection mechanisms. For example, the
        applier uses a selective disclosure algorithm to generate access token
        1, access token 2, and access token 3 from the access token received
        in step (D). Access token 1 may include the leading agent ID and
        sub-AI agent 1 ID; access token2 may include the leading agent ID and
        sub-AI agent 2 ID; access token3 may include the leading agent ID and
        sub-AI agent 3 ID. The applier may then send access token 1 to sub-AI
        agent 1, access token 2 to sub-AI agent 2, and access token 3 to
        sub-AI agent 3.</t>

        <t>The client(s) validate the proof of the received access token* and
        check whether the applier ID refers to a trustworthy applier. For
        example, each AI agent is preconfigured with a list of trusted AI
        agents, and any one of the trusted AI agents that acts as a leading
        agent will pass the validation.</t>

        <t>If the validation fails, the client(s) may send a response message
        to the applier with a failure indication of "unknown_applier".</t>
      </section>

      <section title="Access Token Verify">
        <t>This section refers to step (F) and (G).</t>

        <t>The client(s) execute the task according to message received in
        step (E). When resources are needed, the client(s) request the
        protected resource from the resource server and present the access
        token*, as defined in <xref target="RFC6749"/>. The resource server
        validates the access token*, as defined in <xref target="RFC6749"/>.
        If the access token* includes multiple *sbj*-*aud* pairs, the resource
        server may verify that its own ID and the client's ID are in the same
        pair. In previous example of the access token, "sub-AI agent 1 ID"and
        "resource server 1 ID" are in the same pair.</t>

        <t>If the validation succeeds, the resource server may provide the
        resource to the client(s).</t>
      </section>
    </section>

    <section title="Security Considerations">
      <t>TBD</t>
    </section>
  </middle>

  <back>
    <references/>

    <references title="Normative References">
      <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, Ed." initials="Dick" surname="Hardt"/>

          <date month="October" year="2012"/>

          <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 improvementsv</t>
          </abstract>
        </front>

        <seriesInfo name="RFC" value="6749"/>

        <seriesInfo name="DOI" value="10.17487/RFC6749"/>
      </reference>

      <?rfc ?>
    </references>

    <references title="Informative References">
      <reference anchor="multi-agent-research-system">
        <front>
          <title>How we built our multi-agent research system</title>

          <author fullname="">
            <organization>Anthropic</organization>
          </author>

          <date day="13" month="June" year="2025"/>
        </front>
      </reference>
    </references>
  </back>
</rfc>
