<?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.2.3) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-liu-oauth-a2a-profile-00" category="std" consensus="true" submissionType="IETF" xml:lang="en" version="3">
  <!-- xml2rfc v2v3 conversion 3.31.0 -->
  <front>
    <title abbrev="oauth-a2a-profile">Agent-to-Agent (A2A) Profile for OAuth Transaction Tokens</title>
    <seriesInfo name="Internet-Draft" value="draft-liu-oauth-a2a-profile-00"/>
    <author initials="C. P." surname="Liu" fullname="Chunchi Peter Liu">
      <organization>Huawei</organization>
      <address>
        <email>liuchunchi@huawei.com</email>
      </address>
    </author>
    <author initials="Y." surname="Ni" fullname="Yuan Ni">
      <organization>Huawei</organization>
      <address>
        <email>niyuan1@huawei.com</email>
      </address>
    </author>
    <date year="2025" month="October" day="20"/>
    <keyword>Transaction Tokens</keyword>
    <keyword>Agent to Agent</keyword>
    <abstract>
      <?line 41?>

<t>This document defines a profile for using OAuth Transaction Tokens in Agent-to-Agent (A2A) communication scenarios. The profile specifies how A2A call chain context can be embedded within Transaction Tokens to maintain agent identity, authorization context, and execution flow across distributed agent workloads within trusted domains.</t>
    </abstract>
  </front>
  <middle>
    <?line 45?>

<section anchor="intro">
      <name>Introduction</name>
      <t>The OAuth Transaction Tokens specification <xref target="I-D.ietf-oauth-transaction-tokens"/> provides a mechanism for propagating user identity and authorization context across workloads during the processing of programmatic requests. This capability aligns naturally with the requirements of Agent-to-Agent (A2A) communication systems <xref target="A2A-SPEC"/>, where autonomous agents coordinate through call chains while maintaining security of the call context.</t>
      <t>This document explores the relationship between these two specifications and proposes a profile that enables Transaction Tokens to carry A2A-specific context information.</t>
    </section>
    <section anchor="term">
      <name>Terminology</name>
      <t>This document uses terms from both the OAuth Transaction Tokens <xref target="I-D.ietf-oauth-transaction-tokens"/> and Agent-to-Agent <xref target="A2A-SPEC"/> specifications.</t>
    </section>
    <section anchor="rationale">
      <name>Rationale</name>
      <t>A2A systems involve complex call chains where autonomous agents invoke other agents to accomplish tasks. These call chains require:</t>
      <ul spacing="normal">
        <li>
          <t>Preservation of original requestor identity and original authorization context</t>
        </li>
        <li>
          <t>Propagation of execution context across agent boundaries</t>
        </li>
        <li>
          <t>Auditability and traceability of the entire call chain</t>
        </li>
        <li>
          <t>Security boundaries between different agent capabilities</t>
        </li>
      </ul>
      <t>The Transaction Token framework addresses similar concerns for API/workload call chains within trusted domains. Transaction Tokens are short-lived, signed JWTs that assert the identity of a user or a workload and assert an authorization context. There are many benefits if A2A calls are carried by Transaction Tokens:</t>
      <ul spacing="normal">
        <li>
          <t>Preserved Call Context and Identity: Transaction tokens are signed JWTs, providing immutable information about the user or workload, certain parameters of the call, and specific contextual attributes of the call. Agentic systems execute multi-step, cross-domain actions where conversational state can sometimes drift from the originally authorized intent, creating "context rot" that undermines least-privilege guarantees and auditability. The use of transaction tokens can preserve the original call context and prevent "context rot".</t>
        </li>
        <li>
          <t>Decreased Scope and Purpose: Transaction tokens enforce that the requested scope and purpose of a transaction are equal to or less than those of the subject token. Agentic systems often divide the main tasks into a sequence of multiple sub-tasks. This mechanism allows for granular permission models that minimize risks associated with overreach and excessive user privacy exposure.</t>
        </li>
        <li>
          <t>Ephemerality: Agentic systems frequently spawn short‑lived, task‑triggered workflows. Transaction Tokens are expected to be short-lived (minutes). The adoption reduces reliance on long‑lived credentials and limits replay and lateral use.</t>
        </li>
      </ul>
    </section>
    <section anchor="transaction-token-request">
      <name>Transaction Token Request</name>
      <t>In <xref target="I-D.ietf-oauth-transaction-tokens"/>, Txn-Token Request defined a set of parameters, in which the following can be used for profiling.</t>
      <ul spacing="normal">
        <li>
          <t>subject_token REQUIRED. The value MUST represent the subject of the transaction.
          </t>
          <ul spacing="normal">
            <li>
              <t>This data field carry the orginal OAuth access token issued by the user. It SHOULD be signed by the original user.</t>
            </li>
          </ul>
        </li>
        <li>
          <t>request_details OPTIONAL. This parameter contains a base64url encoded JSON object which represents additional details of the transaction that MUST remain immutable throughout the processing of the transaction by multiple workloads. The Transaction Token Service uses this information to construct the tctx claim.
          </t>
          <ul spacing="normal">
            <li>
              <t>This data field carry the original A2A request call from the user, which MUST NOT change throughout the whole call chain.</t>
            </li>
            <li>
              <t>This will encapsulate the "User Input" in the "Message" struct from the A2A Protocol.</t>
            </li>
          </ul>
        </li>
        <li>
          <t>request_context OPTIONAL. This parameter contains a base64url encoded JSON object which represents the context of this transaction.
          </t>
          <ul spacing="normal">
            <li>
              <t>This data field carry appended observations/contexts/decisions that can be changed by each hop of AI Agent.</t>
            </li>
            <li>
              <t>This will encapsulate all other fields in the "Message" struct from the A2A Protocol, such as "Agent Thinking", "Status Updates", "Metadata"...</t>
            </li>
          </ul>
        </li>
      </ul>
    </section>
    <section anchor="transaction-token-claims">
      <name>Transaction Token Claims</name>
      <ul spacing="normal">
        <li>
          <t>purp: REQUIRED A String defining the purpose or intent of this transaction. The purp claim captures the exact purpose of this particular transaction.
          </t>
          <ul spacing="normal">
            <li>
              <t>In the A2A profile, this claim will be a String "a2a.Task.id" from the A2A Protocol, as an unique identifier for the task.</t>
            </li>
          </ul>
        </li>
        <li>
          <t>tctx: OPTIONAL A JSON object that contains values that remain immutable throughout the call chain. The value of this claim is a JSON object that contains name/value pairs (wherein the value could itself be an object), which together assert the details that remain immutable through the call-chain where this Txn-Token is used.
          </t>
          <ul spacing="normal">
            <li>
              <t>This claim will contain the exact contents in the "request_details" of the transaction token request, which will be the "User Input" in the "Message" struct from the A2A Protocol.</t>
            </li>
          </ul>
        </li>
        <li>
          <t>rctx: OPTIONAL A JSON object that describes the environmental context of the requested transaction.
          </t>
          <ul spacing="normal">
            <li>
              <t>This claim will contain the exact contents in the "request_context" of the transaction token request, which will be all other fields in the "Message" struct from the A2A Protocol, such as "Agent Thinking", "Status Updates", "Metadata"...</t>
            </li>
          </ul>
        </li>
      </ul>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <t>This document has no further security considerations.</t>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <t>This document has no IANA actions.</t>
    </section>
  </middle>
  <back>
    <references anchor="sec-informative-references">
      <name>Informative References</name>
      <reference anchor="I-D.ietf-oauth-transaction-tokens">
        <front>
          <title>Transaction Tokens</title>
          <author fullname="Atul Tulshibagwale" initials="A." surname="Tulshibagwale">
            <organization>SGNL</organization>
          </author>
          <author fullname="George Fletcher" initials="G." surname="Fletcher">
            <organization>Practical Identity LLC</organization>
          </author>
          <author fullname="Pieter Kasselman" initials="P." surname="Kasselman">
            <organization>SPIRL</organization>
          </author>
          <date day="28" month="July" year="2025"/>
          <abstract>
            <t>   Transaction Tokens (Txn-Tokens) are designed to maintain and
   propagate user identity and authorization context across workloads
   within a trusted domain during the processing of external
   programmatic requests, such as API calls.  They ensure that this
   context is preserved throughout the call chain, even when new
   transactions are initiated internally, thereby enhancing security and
   consistency in complex, multi-service architectures.

            </t>
          </abstract>
        </front>
        <seriesInfo name="Internet-Draft" value="draft-ietf-oauth-transaction-tokens-06"/>
      </reference>
      <reference anchor="A2A-SPEC" target="https://agent2agent.info/docs/introduction/">
        <front>
          <title>Agent2Agent (A2A) Protocol Specifications</title>
          <author>
            <organization/>
          </author>
          <date year="2025" month="October"/>
        </front>
      </reference>
    </references>
    <?line 110?>



  </back>
  <!-- ##markdown-source:
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

-->

</rfc>
