<?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.43 (Ruby 3.2.3) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-reddy-wimse-oauth-dialog-binding-00" category="std" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.35.0 -->
  <front>
    <title abbrev="Dialog Binding for WIMSE and OAuth">Binding Agent Dialogs to WIMSE and OAuth Credentials</title>
    <seriesInfo name="Internet-Draft" value="draft-reddy-wimse-oauth-dialog-binding-00"/>
    <author initials="T." surname="Reddy" fullname="Tirumaleswar Reddy">
      <organization>Nokia</organization>
      <address>
        <email>k.tirumaleswar_reddy@nokia.com</email>
      </address>
    </author>
    <author initials="Z." surname="Sarker" fullname="Zaheduzzaman Sarker">
      <organization>Nokia</organization>
      <address>
        <postal>
          <country>Sweden</country>
        </postal>
        <email>zaheduzzaman.sarker@nokia.com</email>
      </address>
    </author>
    <date year="2026" month="October" day="30"/>
    <area>Applications and Real-Time</area>
    <workgroup>Workload Identity in Multi System Environments</workgroup>
    <keyword>agent</keyword>
    <keyword>dialog</keyword>
    <keyword>WIMSE</keyword>
    <keyword>transaction token</keyword>
    <abstract>
      <?line 55?>

<t>AI agents and tools that take part in a dialog carry a dialog context
with each request and response. This document specifies how the
dialog context is bound to WIMSE and OAuth credentials. It extends the
WIMSE profile of HTTP Message Signatures, for requests and responses,
and the WIMSE Proof Token, for requests, to cover the dialog context,
records the dialog identifier in OAuth transaction tokens, and
describes how a new dialog at a trust boundary aligns with OAuth
identity chaining. A receiver can then verify who sent a request or
response, which dialog it belongs to, and, for a request, what it may
do, and that the answers agree.</t>
    </abstract>
  </front>
  <middle>
    <?line 68?>

<section anchor="intro">
      <name>Introduction</name>
      <t>The use cases and requirements for agent dialogs
<xref target="I-D.agentic-ai-usecases-requirements"/> describe how users, agents,
and tools interact over the course of a task, in a dialog. Among
them, a receiver needs to verify who sent a request or response, who
initiated the dialog, and that no hop altered the dialog context it
carries. Authorization granted in one dialog also needs to be limited
to that dialog.</t>
      <t>These requirements lead to an agent communication architecture
<xref target="I-D.manyfolks-agentproto-arch"/>, an agent communication protocol,
and security mechanisms such as those in this document. This document
meets them with existing WIMSE and OAuth credentials: the WIMSE HTTP
signature or WPT covers the dialog context, and the transaction token
records the dialog identifier. A participant can initiate a linked
dialog within a trust domain. At a trust boundary, it always initiates
one, and authorization moves to the other domain through identity
chaining.</t>
      <t>An agent communication protocol carries a dialog context with each
request and response, which identifies the dialog and the participant
that initiated it. This document uses <tt>Dialog-Context</tt> as a
placeholder name for the HTTP field that carries the dialog context.
Its name and format will be aligned with the agent communication
protocol once that protocol is defined. The goal of this document is
to show how the dialog context is bound to WIMSE and OAuth
credentials, not to define the dialog context itself.</t>
      <t>The agent communication protocol defines no credentials, signatures,
or authorization model of its own. It relies on WIMSE for workload
identity and message integrity <xref target="I-D.ietf-wimse-arch"/>, and on OAuth
for authorization. The WIMSE framework for AI agents
<xref target="I-D.ietf-wimse-aims"/> composes these for agent authentication and
authorization. Today none of these mechanisms covers the dialog
context:</t>
      <ul spacing="normal">
        <li>
          <t>A WIMSE HTTP signature <xref target="I-D.ietf-wimse-http-signature"/> or WIMSE
Proof Token (WPT) <xref target="I-D.ietf-wimse-wpt"/> does not cover the
<tt>Dialog-Context</tt> field. A hop can change the dialog context without
breaking the proof.</t>
        </li>
        <li>
          <t>A transaction token <xref target="I-D.ietf-oauth-transaction-tokens"/> does not
record the dialog. A token obtained in one dialog can be presented
in another.</t>
        </li>
      </ul>
      <t>TLS protects each hop between adjacent endpoints
<xref target="I-D.ietf-wimse-arch"/>. Where two participants connect directly with
mutual TLS, TLS already authenticates the peer and protects the
messages on that hop. An application-layer proof, made with the
sender's WIT key over the message, adds two properties:</t>
      <dl>
        <dt>Protection across intermediaries:</dt>
        <dd>
          <t>The receiver verifies the proof itself, even when an intermediary on
the path, such as a gateway, terminates TLS. It learns which
workload sent the message, not only which intermediary it connected
to.</t>
        </dd>
        <dt>Provenance:</dt>
        <dd>
          <t>Each hop that forwards a request or response adds its proof,
starting with the initiator, and the proofs travel together with the
message. A receiver several hops away can then verify which
participant initiated the dialog, and that no hop altered the dialog
context.</t>
        </dd>
      </dl>
      <t>Provenance matters for agents because a request or response can pass
through several agents before it reaches its destination. For example,
A1 initiates a dialog with A2, and A2 sends a new request to a tool.
TLS and A2's proof show the tool only that A2 sent the request, not
that A1 initiated the dialog. The proofs of earlier hops show that
(<xref target="multi-hop"/>).</t>
      <t>This document closes both gaps. A receiver can then answer three
questions about a request from three independent sources, and check
that the answers agree:</t>
      <ul spacing="normal">
        <li>
          <t>Who sent it: the WIMSE proof.</t>
        </li>
        <li>
          <t>What it may do: the transaction token.</t>
        </li>
        <li>
          <t>Which dialog it belongs to: the dialog context, covered by the WIMSE
proof and recorded in the transaction token.</t>
        </li>
      </ul>
      <t>Transaction tokens are optional. Without them, the WIMSE proof still
binds the dialog context to the request and its sender.</t>
    </section>
    <section anchor="terms">
      <name>Conventions and Terminology</name>
      <t>The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", "<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL
NOT</bcp14>", "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", "<bcp14>RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>",
"<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" 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>
      <?line -18?>

<t>This document uses the following terms:</t>
      <ul spacing="normal">
        <li>
          <t>Workload Identity Token (WIT), defined in
<xref target="I-D.ietf-wimse-workload-creds"/>.</t>
        </li>
        <li>
          <t>WIMSE Proof Token (WPT), defined in <xref target="I-D.ietf-wimse-wpt"/>.</t>
        </li>
        <li>
          <t>Transaction Token and Transaction Token Service (TTS), defined in
<xref target="I-D.ietf-oauth-transaction-tokens"/>.</t>
        </li>
        <li>
          <t>Dialog and Dialog Context, defined in
<xref target="I-D.agentic-ai-usecases-requirements"/>.</t>
        </li>
        <li>
          <t>Dialog Identifier, defined in <xref target="I-D.manyfolks-agentproto-arch"/> as
the Agentic Dialog Identifier (ADID).</t>
        </li>
      </ul>
      <t>It also defines the following terms:</t>
      <dl>
        <dt>Participant:</dt>
        <dd>
          <t>An agent or tool that takes part in a dialog. Each participant is a
workload with its own WIT.</t>
        </dd>
        <dt>Initiator:</dt>
        <dd>
          <t>The participant that proposes the dialog context in the request that
establishes the dialog. It is the principal of the dialog
<xref target="I-D.manyfolks-agentproto-arch"/>. The dialog context identifies it
by its WIMSE workload identifier.</t>
        </dd>
        <dt>Linked Dialog:</dt>
        <dd>
          <t>A new dialog, with a new dialog context, that a participant initiates
to continue a dialog it received.</t>
        </dd>
      </dl>
      <t>This document applies to participants that are WIMSE workloads. How a
client without a WIT, such as a user application, is identified in the
dialog context is left to the agent communication protocol.</t>
    </section>
    <section anchor="architecture">
      <name>Security Architecture</name>
      <figure anchor="fig-arch">
        <name>Security architecture</name>
        <artset>
          <artwork type="svg"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="496" width="536" viewBox="0 0 536 496" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
              <path d="M 8,32 L 8,80" fill="none" stroke="black"/>
              <path d="M 8,160 L 8,192" fill="none" stroke="black"/>
              <path d="M 8,256 L 8,400" fill="none" stroke="black"/>
              <path d="M 8,448 L 8,480" fill="none" stroke="black"/>
              <path d="M 56,88 L 56,152" fill="none" stroke="black"/>
              <path d="M 56,200 L 56,248" fill="none" stroke="black"/>
              <path d="M 56,408 L 56,440" fill="none" stroke="black"/>
              <path d="M 112,32 L 112,80" fill="none" stroke="black"/>
              <path d="M 144,32 L 144,80" fill="none" stroke="black"/>
              <path d="M 208,88 L 208,152" fill="none" stroke="black"/>
              <path d="M 288,32 L 288,80" fill="none" stroke="black"/>
              <path d="M 320,32 L 320,80" fill="none" stroke="black"/>
              <path d="M 408,88 L 408,152" fill="none" stroke="black"/>
              <path d="M 488,272 L 488,384" fill="none" stroke="black"/>
              <path d="M 504,32 L 504,80" fill="none" stroke="black"/>
              <path d="M 512,160 L 512,192" fill="none" stroke="black"/>
              <path d="M 512,256 L 512,400" fill="none" stroke="black"/>
              <path d="M 512,448 L 512,480" fill="none" stroke="black"/>
              <path d="M 8,32 L 112,32" fill="none" stroke="black"/>
              <path d="M 144,32 L 288,32" fill="none" stroke="black"/>
              <path d="M 320,32 L 504,32" fill="none" stroke="black"/>
              <path d="M 8,80 L 112,80" fill="none" stroke="black"/>
              <path d="M 144,80 L 288,80" fill="none" stroke="black"/>
              <path d="M 320,80 L 504,80" fill="none" stroke="black"/>
              <path d="M 8,160 L 512,160" fill="none" stroke="black"/>
              <path d="M 8,192 L 512,192" fill="none" stroke="black"/>
              <path d="M 8,256 L 512,256" fill="none" stroke="black"/>
              <path d="M 232,272 L 448,272" fill="none" stroke="black"/>
              <path d="M 464,272 L 488,272" fill="none" stroke="black"/>
              <path d="M 232,352 L 448,352" fill="none" stroke="black"/>
              <path d="M 464,352 L 488,352" fill="none" stroke="black"/>
              <path d="M 352,384 L 488,384" fill="none" stroke="black"/>
              <path d="M 8,400 L 512,400" fill="none" stroke="black"/>
              <path d="M 8,448 L 512,448" fill="none" stroke="black"/>
              <path d="M 8,480 L 512,480" fill="none" stroke="black"/>
              <polygon class="arrowhead" points="416,152 404,146.4 404,157.6" fill="black" transform="rotate(90,408,152)"/>
              <polygon class="arrowhead" points="240,352 228,346.4 228,357.6" fill="black" transform="rotate(180,232,352)"/>
              <polygon class="arrowhead" points="240,272 228,266.4 228,277.6" fill="black" transform="rotate(180,232,272)"/>
              <polygon class="arrowhead" points="216,152 204,146.4 204,157.6" fill="black" transform="rotate(90,208,152)"/>
              <polygon class="arrowhead" points="64,440 52,434.4 52,445.6" fill="black" transform="rotate(90,56,440)"/>
              <polygon class="arrowhead" points="64,248 52,242.4 52,253.6" fill="black" transform="rotate(90,56,248)"/>
              <polygon class="arrowhead" points="64,152 52,146.4 52,157.6" fill="black" transform="rotate(90,56,152)"/>
              <g class="text">
                <text x="32" y="52">WIT</text>
                <text x="76" y="52">issuer</text>
                <text x="200" y="52">Transaction</text>
                <text x="384" y="52">Authorization</text>
                <text x="468" y="52">server</text>
                <text x="176" y="68">Token</text>
                <text x="232" y="68">Service</text>
                <text x="80" y="116">WIT</text>
                <text x="264" y="116">transaction</text>
                <text x="336" y="116">token</text>
                <text x="440" y="116">grant</text>
                <text x="480" y="116">for</text>
                <text x="256" y="132">(tctx.dlg</text>
                <text x="304" y="132">=</text>
                <text x="328" y="132">D1)</text>
                <text x="448" y="132">another</text>
                <text x="508" y="132">domain</text>
                <text x="224" y="180">Participant</text>
                <text x="284" y="180">A2</text>
                <text x="332" y="180">(sender)</text>
                <text x="100" y="228">Request,</text>
                <text x="156" y="228">over</text>
                <text x="192" y="228">TLS</text>
                <text x="80" y="276">Dialog-Context:</text>
                <text x="168" y="276">dlg</text>
                <text x="192" y="276">=</text>
                <text x="212" y="276">D1</text>
                <text x="456" y="276">1</text>
                <text x="192" y="292">initiator</text>
                <text x="240" y="292">=</text>
                <text x="356" y="292">wimse://a.example/agent/a1</text>
                <text x="168" y="308">^</text>
                <text x="168" y="324">(2)</text>
                <text x="208" y="324">equal</text>
                <text x="168" y="340">v</text>
                <text x="60" y="356">Txn-Token:</text>
                <text x="148" y="356">tctx.dlg</text>
                <text x="192" y="356">=</text>
                <text x="212" y="356">D1</text>
                <text x="456" y="356">3</text>
                <text x="116" y="372">Workload-Identity-Token:</text>
                <text x="232" y="372">sub</text>
                <text x="256" y="372">=</text>
                <text x="372" y="372">wimse://a.example/agent/a2</text>
                <text x="56" y="388">Signature</text>
                <text x="108" y="388">or</text>
                <text x="140" y="388">WPT,</text>
                <text x="180" y="388">made</text>
                <text x="220" y="388">with</text>
                <text x="260" y="388">A2's</text>
                <text x="296" y="388">WIT</text>
                <text x="328" y="388">key</text>
                <text x="180" y="468">Next</text>
                <text x="248" y="468">participant</text>
                <text x="308" y="468">or</text>
                <text x="340" y="468">tool</text>
              </g>
            </svg>
          </artwork>
          <artwork type="ascii-art"><![CDATA[
+------------+   +-----------------+   +----------------------+
| WIT issuer |   | Transaction     |   | Authorization server |
|            |   | Token Service   |   |                      |
+------------+   +-----------------+   +----------------------+
      |                  |                        |
      | WIT              | transaction token      | grant for
      |                  | (tctx.dlg = D1)        | another domain
      v                  v                        v
+--------------------------------------------------------------+
|                     Participant A2 (sender)                  |
+--------------------------------------------------------------+
      |
      | Request, over TLS
      v
+--------------------------------------------------------------+
| Dialog-Context:  dlg = D1 <--------------------------(1)--+  |
|                  initiator = wimse://a.example/agent/a1   |  |
|                   ^                                       |  |
|                  (2) equal                                |  |
|                   v                                       |  |
| Txn-Token:  tctx.dlg = D1 <--------------------------(3)--+  |
| Workload-Identity-Token: sub = wimse://a.example/agent/a2 |  |
| Signature or WPT, made with A2's WIT key -----------------+  |
+--------------------------------------------------------------+
      |
      v
+--------------------------------------------------------------+
|                   Next participant or tool                   |
+--------------------------------------------------------------+
]]></artwork>
        </artset>
      </figure>
      <t>The figure shows three bindings:</t>
      <ol spacing="normal" type="1"><li>
          <t>The signature or WPT covers the dialog context.</t>
        </li>
        <li>
          <t>The transaction token records the same dialog identifier as the
dialog context.</t>
        </li>
        <li>
          <t>The signature or WPT covers the transaction token.</t>
        </li>
      </ol>
      <t>The agent communication protocol defines no credentials or signatures
of its own. It reuses WIMSE for workload identity and message
integrity, and OAuth for authorization. Each answers a different
question about a request: the WIMSE HTTP signature or WPT says who
sent it, the transaction token says what it may do, and the dialog
context says which dialog it belongs to.</t>
      <t>Each participant holds a WIT issued by its domain's WIT issuer. Each
hop proves possession of its WIT key for the message it sends, using
either the WIMSE HTTP signature <xref target="I-D.ietf-wimse-http-signature"/>, for
requests and responses, or the WPT <xref target="I-D.ietf-wimse-wpt"/>, for
requests only. Because the signature or WPT covers the dialog context,
a receiver can verify that the dialog context it received is the one
the sender signed, and that it was not changed in transit. The dialog
context therefore needs no signature of its own.</t>
      <t>Both proofs protect a single hop. For a receiver to verify which
participant initiated the dialog, the proofs of earlier hops need to
travel with the message (<xref target="multi-hop"/>).</t>
      <t>Where a deployment uses transaction tokens, the Transaction Token
Service records the dialog identifier in the token. Participants
forward the token within the trust domain, and a receiver rejects a
token issued for another dialog.</t>
      <t>At a trust boundary, a participant initiates a linked dialog, and
authorization moves to the other domain through identity chaining
<xref target="I-D.ietf-oauth-identity-chaining"/>. Neither the dialog identifier
nor the transaction token of the original domain crosses the boundary.</t>
    </section>
    <section anchor="dc-content">
      <name>Assumed Dialog Context Content</name>
      <t>This document relies on the following information in the dialog
context. The agent communication protocol defines the encoding and
any further content.</t>
      <dl>
        <dt>Dialog identifier (<tt>dlg</tt>):</dt>
        <dd>
          <t>Identifies the dialog. The initiator proposes it, and the server
that creates the dialog accepts it. The transaction token records it
in <tt>tctx.dlg</tt> (<xref target="tctx-dlg"/>).</t>
        </dd>
        <dt>Initiator:</dt>
        <dd>
          <t>The WIMSE workload identifier <xref target="I-D.ietf-wimse-identifier"/> of the
participant that initiated the dialog. A receiver checks that the
first proof in the chain was made by this workload (<xref target="verify"/>).</t>
        </dd>
      </dl>
      <t>The agent communication protocol will add more meta-data to the dialog
context. The WIMSE proof covers the whole <tt>Dialog-Context</tt> field, so it
also covers any meta-data added in the base spec and future
extensions.</t>
      <t>The dialog context does not carry credentials or tokens, which travel
in their own fields, nor the context an agent builds over the dialog.
Each participant knows only the hops it exchanges messages with; the
dialog context does not list participants.</t>
    </section>
    <section anchor="establish">
      <name>Dialog Establishment</name>
      <t>The initiator proposes a dialog context in its first request: a
<tt>Dialog-Context</tt> field with a new dialog identifier and the
initiator's WIMSE workload identifier, covered by the initiator's
WIMSE proof. The server checks that the initiator named in the field
equals the <tt>sub</tt> claim of the WIT used to verify the proof, and that
the dialog identifier is not already in use. It then creates the
dialog, or rejects the request.</t>
      <t>When it creates the dialog, the server returns the accepted dialog
context in its response, and the initiator checks that it matches the
proposed one. With the WIMSE HTTP signature, the server signs the
response, and the signature covers <tt>Dialog-Context</tt> (<xref target="http-sig"/>).
The WPT defines no response proof, so with the WPT the response is not
authenticated. The request can carry the first input of the dialog, so
establishing a dialog adds no round trip.</t>
      <t>The initiator proposes the dialog context so that its own proof covers
it from the first request, and a receiver several hops away can verify
that the initiator started the dialog (<xref target="multi-hop"/>). The server
still decides whether to create the dialog, and maintains its state.</t>
      <t>A participant that maintains no dialog state, such as a stateless tool,
creates no dialog. It receives the dialog context of the caller with
each request.</t>
    </section>
    <section anchor="overview">
      <name>Overview</name>
      <t><xref target="fig-agents"/> shows the agents in the example. All three are in
domain A. Agent A1 initiates dialog D1 with agent A2 (<xref target="establish"/>)
and delegates a task to A2, which calls a tool in D1.</t>
      <figure anchor="fig-agents">
        <name>Agents in the example</name>
        <artset>
          <artwork type="svg"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="208" width="472" viewBox="0 0 472 208" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
              <path d="M 8,48 L 8,192" fill="none" stroke="black"/>
              <path d="M 32,80 L 32,120" fill="none" stroke="black"/>
              <path d="M 104,80 L 104,112" fill="none" stroke="black"/>
              <path d="M 248,80 L 248,112" fill="none" stroke="black"/>
              <path d="M 320,80 L 320,112" fill="none" stroke="black"/>
              <path d="M 392,144 L 392,176" fill="none" stroke="black"/>
              <path d="M 432,96 L 432,136" fill="none" stroke="black"/>
              <path d="M 448,144 L 448,176" fill="none" stroke="black"/>
              <path d="M 464,48 L 464,192" fill="none" stroke="black"/>
              <path d="M 8,48 L 464,48" fill="none" stroke="black"/>
              <path d="M 32,80 L 104,80" fill="none" stroke="black"/>
              <path d="M 248,80 L 320,80" fill="none" stroke="black"/>
              <path d="M 112,96 L 240,96" fill="none" stroke="black"/>
              <path d="M 328,96 L 432,96" fill="none" stroke="black"/>
              <path d="M 32,112 L 96,112" fill="none" stroke="black"/>
              <path d="M 248,112 L 320,112" fill="none" stroke="black"/>
              <path d="M 392,144 L 448,144" fill="none" stroke="black"/>
              <path d="M 392,176 L 448,176" fill="none" stroke="black"/>
              <path d="M 8,192 L 464,192" fill="none" stroke="black"/>
              <polygon class="arrowhead" points="440,136 428,130.4 428,141.6" fill="black" transform="rotate(90,432,136)"/>
              <polygon class="arrowhead" points="248,96 236,90.4 236,101.6" fill="black" transform="rotate(0,240,96)"/>
              <g class="text">
                <text x="228" y="36">Domain</text>
                <text x="264" y="36">A</text>
                <text x="164" y="84">request,</text>
                <text x="212" y="84">D1</text>
                <text x="380" y="84">request,</text>
                <text x="428" y="84">D1</text>
                <text x="68" y="100">A1</text>
                <text x="284" y="100">A2</text>
                <text x="72" y="132">(initiator)</text>
                <text x="420" y="164">Tool</text>
              </g>
            </svg>
          </artwork>
          <artwork type="ascii-art"><![CDATA[
                         Domain A
+--------------------------------------------------------+
|                                                        |
|  +--------+   request, D1   +--------+   request, D1   |
|  |   A1   |---------------->|   A2   |-------------+   |
|  +--------+                 +--------+             |   |
|  (initiator)                                       v   |
|                                               +------+ |
|                                               | Tool | |
|                                               +------+ |
+--------------------------------------------------------+
]]></artwork>
        </artset>
      </figure>
      <t><xref target="fig-overview"/> shows the request from A2 to the tool.</t>
      <figure anchor="fig-overview">
        <name>A request bound to its dialog</name>
        <artwork><![CDATA[
POST /invoke HTTP/1.1
Dialog-Context: dlg=D1; initiator=wimse://a.example/agent/a1
Txn-Token: <transaction token with tctx.dlg = D1>
Content-Digest: sha-256=:<hash of the body>:
Workload-Identity-Token: <WIT with sub = wimse://a.example/agent/a2>
Signature-Input: wimse=("@method" "@path" "dialog-context"
    "txn-token" "content-digest" "workload-identity-token");...
Signature: wimse=:<signature made with A2's WIT key>:
]]></artwork>
      </figure>
      <t>Values are shown informally. The <tt>Dialog-Context</tt> syntax is a
placeholder (<xref target="intro"/>). The <tt>Signature-Input</tt> field lists what the
signature covers: the method, the path, the dialog context, the
transaction token, the body digest, and A2's WIT.</t>
      <t>The tool verifies the WIMSE proof with A2's WIT. The proof covers the
<tt>Dialog-Context</tt> field, so the dialog context has not changed on this
hop. The tool validates the transaction token and checks that its
dialog identifier equals the one in <tt>Dialog-Context</tt>. A token issued
for another dialog fails this check.</t>
      <t>The proof of a single hop shows who sent the request. It does not show
who initiated the dialog when the sender is not the initiator.
Verifying the initiator at a later hop requires the proofs of earlier
hops, as described in <xref target="multi-hop"/>.</t>
    </section>
    <section anchor="http-sig">
      <name>Dialog Context in WIMSE HTTP Signatures</name>
      <t>When a request carries the <tt>Dialog-Context</tt> field, the WIMSE HTTP
signature of the request <xref target="I-D.ietf-wimse-http-signature"/>, a profile
of HTTP Message Signatures <xref target="RFC9421"/>, <bcp14>MUST</bcp14> include
<tt>dialog-context</tt> in its covered components. This adds <tt>Dialog-Context</tt>
to the fields that the profile requires to be covered when present.</t>
      <t>When a response carries the <tt>Dialog-Context</tt> field and is signed, the
signature of the response <bcp14>MUST</bcp14> include <tt>dialog-context</tt> in its covered
components. The response signature also covers the method, path, and
nonce of the request it answers <xref target="I-D.ietf-wimse-http-signature"/>, so
it cannot be moved to another request. The requester <bcp14>MUST</bcp14> verify that
the <tt>Dialog-Context</tt> value in the response matches the one in its
request.</t>
      <t>A receiver <bcp14>MUST</bcp14> reject a request that carries <tt>Dialog-Context</tt> and a
WIMSE HTTP signature that does not cover it.</t>
      <t>A participant that forwards a request in the same dialog <bcp14>MUST NOT</bcp14>
change the <tt>Dialog-Context</tt> field, so that the proofs of earlier hops
verify against it (<xref target="multi-hop"/>).</t>
      <t>A repeated or malformed <tt>Dialog-Context</tt> field is handled as specified
for covered fields in <xref target="I-D.ietf-wimse-http-signature"/> and
<xref target="I-D.ietf-wimse-wpt"/>.</t>
    </section>
    <section anchor="wpt">
      <name>Dialog Context in the WIMSE Proof Token</name>
      <t>This document defines the following claim for the WPT:</t>
      <dl>
        <dt>dth:</dt>
        <dd>
          <t>The hash of the <tt>Dialog-Context</tt> field value, computed as specified
for the <tt>oth</tt> claim <xref target="I-D.ietf-wimse-wpt"/>. It is <bcp14>REQUIRED</bcp14> when the
request carries the <tt>Dialog-Context</tt> field.</t>
        </dd>
      </dl>
      <t>The WPT is signed with the sender's WIT key, and the signature covers
the <tt>dth</tt> claim. The dialog context is therefore part of what the
sender signs. When a request carries both a WPT and the
<tt>Dialog-Context</tt> field, the receiver verifies the WPT signature
<xref target="I-D.ietf-wimse-wpt"/> and checks that <tt>dth</tt> matches the hash of the
<tt>Dialog-Context</tt> field in the request. If the signature does not
verify, <tt>dth</tt> is missing, or the hash does not match, the receiver
<bcp14>MUST</bcp14> reject the request.</t>
    </section>
    <section anchor="multi-hop">
      <name>Multi-hop Provenance</name>
      <t>A WIMSE HTTP signature and a WPT each protect a single hop. A receiver
verifies the hop that sent the message. To verify which participant
initiated the dialog, and that no earlier hop altered the dialog
context, the receiver needs the proof of the initiator and of each
participant that forwarded the message.
<xref target="I-D.reddy-wimse-aggregate-signatures"/> specifies how the WIMSE HTTP
signatures of earlier hops travel with a message, and how they can be
aggregated into one signature as an optimization. Each of those
signatures covers the same <tt>Dialog-Context</tt> value, so a change by any
hop breaks the chain.</t>
      <t>Without the proofs of earlier hops, a receiver verifies only the
participant that sent the message. If that participant is not the
initiator, the receiver cannot tell whether the dialog context it
received is the one the initiator used. For example, the tool in
<xref target="fig-agents"/> can verify that A2 sent D1, but not that A1 initiated
D1. A transaction token, if used, does not help here: it shows that
the request is authorized for dialog D1, not who initiated D1.</t>
    </section>
    <section anchor="txn-token">
      <name>Dialog Identifier in Transaction Tokens</name>
      <t>This section applies to deployments that use transaction tokens.</t>
      <section anchor="tctx-dlg">
        <name>The dlg Member of tctx</name>
        <t>This document defines the following member of the <tt>tctx</tt> claim of a
transaction token:</t>
        <dl>
          <dt>dlg:</dt>
          <dd>
            <t>The dialog identifier of the dialog in which the transaction token
is used, as carried in the <tt>dlg</tt> field of the dialog context. String.</t>
          </dd>
        </dl>
        <t>The dialog identifier is part of the authorization context, and stays
unchanged for the life of the transaction. The transaction token
records only the dialog identifier, because it stays the same for the
life of the dialog. The rest of the dialog context, such as its state,
can change, and the WIMSE proof protects it instead.</t>
        <figure anchor="fig-txn">
          <name>Transaction token recording the dialog</name>
          <sourcecode type="json"><![CDATA[
{
  "txn": "97053963-771d-49cc-a4e3-20aad399c312",
  "sub": "user@a.example",
  "aud": "a.example",
  "scope": "trip.book",
  "tctx": {
    "dlg": "7f3c9a2e-5b1d-4e8a-9c6f-0d2b8e4a1f37"
  },
  "req_wl": "wimse://a.example/agent/a1"
}
]]></sourcecode>
        </figure>
      </section>
      <section anchor="txn-request">
        <name>Requesting the Token</name>
        <t>To get a transaction token for a dialog, a participant includes the
dialog identifier as a <tt>dlg</tt> member of the <tt>request_details</tt> parameter
of its token exchange request <xref target="RFC8693"/>. The TTS checks the request
against its local policy. If the check succeeds, the TTS issues a
transaction token with the dialog identifier in <tt>tctx.dlg</tt>.</t>
      </section>
      <section anchor="txn-forward">
        <name>Forwarding</name>
        <t>Participants forward the transaction token down the call chain together
with the dialog context. They do not forward access tokens
<xref target="I-D.ietf-wimse-aims"/>. A transaction token does not leave its trust
domain.</t>
        <t>A transaction token is short-lived, which limits how long a stale
authorization can be used. Revocation within that lifetime is
signaled through Shared Signals (<xref target="sec-revocation"/>).</t>
      </section>
      <section anchor="txn-check">
        <name>Receiver Check</name>
        <t>A receiver of a request that carries both a transaction token and a
<tt>Dialog-Context</tt> field <bcp14>MUST</bcp14> check that <tt>tctx.dlg</tt> equals the <tt>dlg</tt>
field of the dialog context, and <bcp14>MUST</bcp14> reject the request if it does
not. A receiver <bcp14>MUST</bcp14> reject a request that carries <tt>Dialog-Context</tt> and
a transaction token without <tt>tctx.dlg</tt>, or a transaction token with
<tt>tctx.dlg</tt> and no <tt>Dialog-Context</tt> field.</t>
      </section>
    </section>
    <section anchor="boundary">
      <name>Trust Boundaries and Identity Chaining</name>
      <t>A participant can initiate a linked dialog within a trust domain,
where local policy calls for it, and always initiates one at a trust
boundary, since a dialog does not cross a trust boundary. At the
boundary, authorization moves to the other domain through identity
chaining <xref target="I-D.ietf-oauth-identity-chaining"/>, so the dialog and the
authorization reset at the same point.</t>
      <t>In <xref target="fig-boundary"/>, A1 initiates dialog D1 with A2 and sends a
request in D1 (step 0, <xref target="establish"/>). A2 holds a domain A transaction
token that records D1.</t>
      <figure anchor="fig-boundary">
        <name>Linked dialog D2 at the domain boundary</name>
        <artset>
          <artwork type="svg"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="512" width="568" viewBox="0 0 568 512" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
              <path d="M 16,80 L 16,480" fill="none" stroke="black"/>
              <path d="M 80,80 L 80,480" fill="none" stroke="black"/>
              <path d="M 248,80 L 248,248" fill="none" stroke="black"/>
              <path d="M 248,360 L 248,480" fill="none" stroke="black"/>
              <path d="M 328,80 L 328,344" fill="none" stroke="black"/>
              <path d="M 328,360 L 328,480" fill="none" stroke="black"/>
              <path d="M 432,80 L 432,352" fill="none" stroke="black"/>
              <path d="M 432,384 L 432,480" fill="none" stroke="black"/>
              <path d="M 544,80 L 544,480" fill="none" stroke="black"/>
              <path d="M 24,128 L 72,128" fill="none" stroke="black"/>
              <path d="M 88,176 L 240,176" fill="none" stroke="black"/>
              <path d="M 88,208 L 240,208" fill="none" stroke="black"/>
              <path d="M 88,256 L 320,256" fill="none" stroke="black"/>
              <path d="M 88,288 L 320,288" fill="none" stroke="black"/>
              <path d="M 88,352 L 424,352" fill="none" stroke="black"/>
              <path d="M 440,432 L 536,432" fill="none" stroke="black"/>
              <path d="M 440,480 L 536,480" fill="none" stroke="black"/>
              <polygon class="arrowhead" points="544,432 532,426.4 532,437.6" fill="black" transform="rotate(0,536,432)"/>
              <polygon class="arrowhead" points="448,480 436,474.4 436,485.6" fill="black" transform="rotate(180,440,480)"/>
              <polygon class="arrowhead" points="432,352 420,346.4 420,357.6" fill="black" transform="rotate(0,424,352)"/>
              <polygon class="arrowhead" points="328,256 316,250.4 316,261.6" fill="black" transform="rotate(0,320,256)"/>
              <polygon class="arrowhead" points="248,176 236,170.4 236,181.6" fill="black" transform="rotate(0,240,176)"/>
              <polygon class="arrowhead" points="96,288 84,282.4 84,293.6" fill="black" transform="rotate(180,88,288)"/>
              <polygon class="arrowhead" points="96,208 84,202.4 84,213.6" fill="black" transform="rotate(180,88,208)"/>
              <polygon class="arrowhead" points="80,128 68,122.4 68,133.6" fill="black" transform="rotate(0,72,128)"/>
              <g class="text">
                <text x="116" y="36">Domain</text>
                <text x="152" y="36">A</text>
                <text x="288" y="36">:</text>
                <text x="420" y="36">Domain</text>
                <text x="456" y="36">B</text>
                <text x="288" y="52">:</text>
                <text x="12" y="68">A1</text>
                <text x="76" y="68">A2</text>
                <text x="236" y="68">AS</text>
                <text x="256" y="68">A</text>
                <text x="288" y="68">:</text>
                <text x="316" y="68">AS</text>
                <text x="336" y="68">B</text>
                <text x="428" y="68">B1</text>
                <text x="536" y="68">TTS</text>
                <text x="560" y="68">B</text>
                <text x="288" y="84">:</text>
                <text x="40" y="100">(0)</text>
                <text x="288" y="100">:</text>
                <text x="36" y="116">D1</text>
                <text x="288" y="116">:</text>
                <text x="288" y="132">:</text>
                <text x="288" y="148">:</text>
                <text x="104" y="164">(1)</text>
                <text x="136" y="164">txn</text>
                <text x="176" y="164">token</text>
                <text x="220" y="164">(D1)</text>
                <text x="288" y="164">:</text>
                <text x="288" y="180">:</text>
                <text x="104" y="196">JWT</text>
                <text x="144" y="196">grant</text>
                <text x="288" y="196">:</text>
                <text x="288" y="212">:</text>
                <text x="288" y="228">:</text>
                <text x="104" y="244">(2)</text>
                <text x="136" y="244">JWT</text>
                <text x="176" y="244">grant</text>
                <text x="288" y="244">:</text>
                <text x="116" y="276">access</text>
                <text x="168" y="276">token</text>
                <text x="248" y="276">|</text>
                <text x="288" y="276">:</text>
                <text x="248" y="308">|</text>
                <text x="288" y="308">:</text>
                <text x="104" y="324">(3)</text>
                <text x="156" y="324">request,</text>
                <text x="220" y="324">access</text>
                <text x="276" y="324">token,</text>
                <text x="184" y="340">Dialog-Context:</text>
                <text x="260" y="340">D2</text>
                <text x="288" y="340">:</text>
                <text x="288" y="372">:</text>
                <text x="400" y="372">[B1</text>
                <text x="448" y="372">creates</text>
                <text x="496" y="372">D2]</text>
                <text x="288" y="388">:</text>
                <text x="288" y="404">:</text>
                <text x="456" y="404">(4)</text>
                <text x="500" y="404">access</text>
                <text x="288" y="420">:</text>
                <text x="464" y="420">token</text>
                <text x="508" y="420">(D2)</text>
                <text x="288" y="436">:</text>
                <text x="288" y="452">:</text>
                <text x="456" y="452">txn</text>
                <text x="500" y="452">token,</text>
                <text x="288" y="468">:</text>
                <text x="488" y="468">tctx.dlg=D2</text>
                <text x="288" y="484">:</text>
              </g>
            </svg>
          </artwork>
          <artwork type="ascii-art"><![CDATA[
            Domain A                :             Domain B
                                    :
 A1      A2                  AS A   :  AS B          B1           TTS B
  |       |                    |    :    |            |             |
  | (0)   |                    |    :    |            |             |
  | D1    |                    |    :    |            |             |
  |------>|                    |    :    |            |             |
  |       |                    |    :    |            |             |
  |       | (1) txn token (D1) |    :    |            |             |
  |       |------------------->|    :    |            |             |
  |       | JWT grant          |    :    |            |             |
  |       |<-------------------|    :    |            |             |
  |       |                    |    :    |            |             |
  |       | (2) JWT grant      |    :    |            |             |
  |       |----------------------------->|            |             |
  |       | access token       |    :    |            |             |
  |       |<-----------------------------|            |             |
  |       |                    |    :    |            |             |
  |       | (3) request, access token,   |            |             |
  |       |     Dialog-Context: D2  :    |            |             |
  |       |------------------------------------------>|             |
  |       |                    |    :    |       [B1 creates D2]    |
  |       |                    |    :    |            |             |
  |       |                    |    :    |            | (4) access  |
  |       |                    |    :    |            | token (D2)  |
  |       |                    |    :    |            |------------>|
  |       |                    |    :    |            | txn token,  |
  |       |                    |    :    |            | tctx.dlg=D2 |
  |       |                    |    :    |            |<------------|
]]></artwork>
        </artset>
      </figure>
      <ol spacing="normal" type="1"><li>
          <t>A2 needs to call B1 in domain B. A dialog does not cross a trust
boundary, so A2 initiates a linked dialog D2 with B1. A2 sends its
transaction token, which records D1, to the authorization server of
domain A (AS A) and asks for a JWT authorization grant for domain
B. If the transaction token is valid, AS A issues the grant.</t>
        </li>
        <li>
          <t>A2 sends the grant to the authorization server of domain B (AS B)
<xref target="RFC7523"/>. AS B returns an access token for domain B.</t>
        </li>
        <li>
          <t>A2 sends a signed request to B1 carrying the access token, its
task, and a <tt>Dialog-Context</tt> field that proposes D2, with A2 as
initiator. B1 verifies A2's WIT and proof; this requires B1 to trust
the WIT issuer of domain A. B1 then checks the proposal and creates
D2 (<xref target="establish"/>).</t>
        </li>
        <li>
          <t>B1 sends the access token to the Transaction Token Service of
domain B (TTS B), with D2 in <tt>request_details</tt>. TTS B returns a
transaction token for domain B that records D2 in <tt>tctx.dlg</tt>. B1
uses this token for its own calls in domain B.</t>
        </li>
      </ol>
      <t>Neither D1 nor the transaction token of domain A reaches domain B. The
JWT authorization grant is exchanged for an access token of domain B,
and A2 establishes D2 in domain B with itself as initiator. Only A2
knows that D2 continues D1.</t>
    </section>
    <section anchor="verify">
      <name>Receiver Verification</name>
      <t>A receiver of a request that carries <tt>Dialog-Context</tt>:</t>
      <ol spacing="normal" type="1"><li>
          <t>Verifies the WIT and WIMSE proof of the sending hop, and that the
proof covers <tt>Dialog-Context</tt> (<xref target="http-sig"/>, <xref target="wpt"/>).</t>
        </li>
        <li>
          <t>If proofs of earlier hops are present, verifies each of them, and
that the <tt>sub</tt> of the WIT at the origin of the chain equals the
initiator named in the dialog context (<xref target="multi-hop"/>).</t>
        </li>
        <li>
          <t>If a transaction token is present, validates it and checks
<tt>tctx.dlg</tt> (<xref target="txn-check"/>).</t>
        </li>
      </ol>
      <t>If a check fails or cannot be completed, the receiver rejects the
request. Its error says which of the two happened. The error format is
defined by the agent communication protocol.</t>
    </section>
    <section anchor="properties">
      <name>Security Properties</name>
      <t>The binding in this document gives the dialog context the following
properties:</t>
      <dl>
        <dt>Origin:</dt>
        <dd>
          <t>A receiver can verify which participant initiated the dialog
(<xref target="multi-hop"/>).</t>
        </dd>
        <dt>Integrity:</dt>
        <dd>
          <t>A hop cannot change the dialog context without breaking a WIMSE
proof.</t>
        </dd>
        <dt>Sender binding:</dt>
        <dd>
          <t>A receiver learns which workload presented the transaction token,
and a party without a WIT cannot provide a valid WIMSE proof for it.</t>
        </dd>
        <dt>Dialog-bound authorization:</dt>
        <dd>
          <t>A transaction token issued for one dialog is rejected in another.</t>
        </dd>
        <dt>Response binding:</dt>
        <dd>
          <t>A signed response cannot be moved to another request, and it
carries the dialog context of its request.</t>
        </dd>
        <dt>Domain separation:</dt>
        <dd>
          <t>Neither the dialog identifier nor the transaction token of one
domain crosses a trust boundary.</t>
        </dd>
      </dl>
    </section>
    <section anchor="security">
      <name>Security Considerations</name>
      <section anchor="sec-binding">
        <name>Dialog Binding</name>
        <t>The WIMSE proof covers <tt>Dialog-Context</tt>, so a hop cannot change the
dialog context without detection. The transaction token records the
dialog identifier, so a token issued for one dialog cannot be used in
another. Both are needed to bind a request, its authorization, and its
dialog. This document does not define additional replay protection.
Deployments rely on the replay protection of the WIMSE proof mechanism
they use.</t>
        <t>The dialog identifier is not a secret; it grants nothing on its own.</t>
      </section>
      <section anchor="sec-response">
        <name>Responses</name>
        <t>An attacker that alters an unsigned response can change its result or
move it to another dialog. A response signed with the WIMSE HTTP
signature and covering <tt>Dialog-Context</tt> binds the result to the dialog
and to the request it answers. A requester can ask for a signed
response <xref target="I-D.ietf-wimse-http-signature"/>.</t>
      </section>
      <section anchor="sec-hops">
        <name>Earlier Hops</name>
        <t>Verifying only the sending hop does not detect an earlier hop that
changed the dialog context. Deployments that need this assurance use
the proofs of earlier hops (<xref target="multi-hop"/>).</t>
      </section>
      <section anchor="sec-revocation">
        <name>Revocation</name>
        <t>When the authorization behind a dialog is revoked, for example through
Shared Signals <xref target="I-D.ietf-wimse-aims"/>, participants stop relying on
transaction tokens and cached authorization decisions for that dialog.</t>
      </section>
    </section>
    <section anchor="privacy">
      <name>Privacy Considerations</name>
      <t>The dialog identifier in <tt>tctx.dlg</tt> is visible to every participant in
the trust domain that receives the transaction token, and links the
transactions of a dialog. This is the purpose of the dialog identifier
within a domain. It does not cross a trust boundary (<xref target="boundary"/>).</t>
      <t>When the proofs of earlier hops travel with a message (<xref target="multi-hop"/>),
each proof carries the WIT of its hop. A receiver then learns the
workload identity of every participant that forwarded the message, not
only the hop it received the message from.</t>
    </section>
    <section anchor="iana">
      <name>IANA Considerations</name>
      <section anchor="json-web-token-claims">
        <name>JSON Web Token Claims</name>
        <t>IANA is requested to register the following claim in the "JSON Web
Token Claims" registry established by <xref target="RFC7519"/>:</t>
        <ul spacing="normal">
          <li>
            <t>Claim Name: dth</t>
          </li>
          <li>
            <t>Claim Description: Hash of the Dialog-Context HTTP field</t>
          </li>
          <li>
            <t>Change Controller: IETF</t>
          </li>
          <li>
            <t>Specification Document(s): <xref target="wpt"/> of this document</t>
          </li>
        </ul>
      </section>
      <section anchor="transaction-token-context">
        <name>Transaction Token Context</name>
        <t>The <tt>dlg</tt> member of <tt>tctx</tt> is defined in <xref target="tctx-dlg"/>. No registry for
<tt>tctx</tt> members exists at the time of writing.</t>
      </section>
    </section>
  </middle>
  <back>
    <references anchor="sec-combined-references">
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <reference anchor="RFC2119">
          <front>
            <title>Key words for use in RFCs to Indicate Requirement Levels</title>
            <author fullname="S. Bradner" initials="S." surname="Bradner"/>
            <date month="March" year="1997"/>
            <abstract>
              <t>In many standards track documents several words are used to signify the requirements in the specification. These words are often capitalized. This document defines these words as they should be interpreted in IETF documents. This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="2119"/>
          <seriesInfo name="DOI" value="10.17487/RFC2119"/>
        </reference>
        <reference anchor="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="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="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="RFC9421">
          <front>
            <title>HTTP Message Signatures</title>
            <author fullname="A. Backman" initials="A." role="editor" surname="Backman"/>
            <author fullname="J. Richer" initials="J." role="editor" surname="Richer"/>
            <author fullname="M. Sporny" initials="M." surname="Sporny"/>
            <date month="February" year="2024"/>
            <abstract>
              <t>This document describes a mechanism for creating, encoding, and verifying digital signatures or message authentication codes over components of an HTTP message. This mechanism supports use cases where the full HTTP message may not be known to the signer and where the message may be transformed (e.g., by intermediaries) before reaching the verifier. This document also describes a means for requesting that a signature be applied to a subsequent HTTP message in an ongoing HTTP exchange.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9421"/>
          <seriesInfo name="DOI" value="10.17487/RFC9421"/>
        </reference>
        <reference anchor="I-D.ietf-wimse-workload-creds">
          <front>
            <title>WIMSE Workload Credentials</title>
            <author fullname="Brian Campbell" initials="B." surname="Campbell">
              <organization>Ping Identity</organization>
            </author>
            <author fullname="Joseph A. Salowey" initials="J. A." surname="Salowey">
              <organization>CyberArk</organization>
            </author>
            <author fullname="Arndt Schwenkschuster" initials="A." surname="Schwenkschuster">
              <organization>Defakto Security</organization>
            </author>
            <author fullname="Yaron Sheffer" initials="Y." surname="Sheffer">
              <organization>Intuit</organization>
            </author>
            <author fullname="Yaroslav Rosomakho" initials="Y." surname="Rosomakho">
              <organization>Zscaler</organization>
            </author>
            <date day="2" month="July" year="2026"/>
            <abstract>
              <t>   The WIMSE architecture defines authentication and authorization for
   software workloads in a variety of runtime environments, from the
   most basic ones up to complex multi-service, multi-cloud, multi-
   tenant deployments.

   This document defines the credentials that workloads use to represent
   their identity.  They can be used in various protocols to
   authenticate workloads to each other.  To use these credentials,
   workloads must provide proof of possession of the associated private
   key material, which is covered in other documents.  This document
   focuses on the credentials alone, independent of the proof-of-
   possession mechanism.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-wimse-workload-creds-02"/>
        </reference>
        <reference anchor="I-D.ietf-wimse-identifier">
          <front>
            <title>Workload Identifier</title>
            <author fullname="Yaroslav Rosomakho" initials="Y." surname="Rosomakho">
              <organization>Zscaler</organization>
            </author>
            <author fullname="Joseph A. Salowey" initials="J. A." surname="Salowey">
              <organization>Palo Alto Networks</organization>
            </author>
            <date day="23" month="October" year="2026"/>
            <abstract>
              <t>   This document defines a canonical identifier for workloads, referred
   to as the Workload Identifier.  A Workload Identifier is a URI that
   uniquely identifies a workload within the context of a specific trust
   domain.  This identifier can be embedded in Workload Identity
   Credentials, including X.509 certificates and JWT-based tokens, to
   support authentication, authorization, and policy enforcement across
   diverse systems.  The Workload Identifier format ensures
   interoperability, facilitates secure identity federation, and enables
   consistent identity semantics.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-wimse-identifier-04"/>
        </reference>
        <reference anchor="I-D.ietf-wimse-http-signature">
          <front>
            <title>WIMSE Workload-to-Workload Authentication with HTTP Signatures</title>
            <author fullname="Joseph A. Salowey" initials="J. A." surname="Salowey">
              <organization>Palo Alto Networks</organization>
            </author>
            <author fullname="Yaron Sheffer" initials="Y." surname="Sheffer">
              <organization>Independent</organization>
            </author>
            <date day="20" month="October" year="2026"/>
            <abstract>
              <t>   The WIMSE architecture defines authentication and authorization for
   software workloads in a variety of runtime environments, from the
   most basic ones to complex multi-service, multi-cloud, multi-tenant
   deployments.  This document defines one of the mechanisms to provide
   workload authentication, using HTTP Signatures.  While only
   applicable to HTTP traffic, the protocol provides end-to-end
   protection of requests (and optionally, responses), even when service
   traffic is not end-to-end encrypted, that is, when TLS proxies and
   load balancers are used.  Authentication is based on the Workload
   Identity Token (WIT).

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-wimse-http-signature-08"/>
        </reference>
        <reference anchor="I-D.ietf-wimse-wpt">
          <front>
            <title>WIMSE Workload Proof Token</title>
            <author fullname="Brian Campbell" initials="B." surname="Campbell">
              <organization>Ping Identity</organization>
            </author>
            <author fullname="Arndt Schwenkschuster" initials="A." surname="Schwenkschuster">
              <organization>Defakto Security</organization>
            </author>
            <date day="27" month="August" year="2026"/>
            <abstract>
              <t>   The WIMSE architecture defines authentication and authorization for
   software workloads in a variety of runtime environments, from basic
   deployments to complex multi-service, multi-cloud, multi-tenant
   systems.  This document specifies the Workload Proof Token (WPT), a
   mechanism for workloads to prove possession of the private key
   associated with a Workload Identity Token (WIT).  The WPT is a signed
   JWT that binds the workload's authentication to a specific HTTP
   request, providing application-layer proof of possession for
   workload-to-workload communication.  This specification is designed
   to work alongside the WIT credential format defined in draft-ietf-
   wimse-workload-creds and can be combined with other WIMSE protocols
   in multi-hop call chains.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-wimse-wpt-02"/>
        </reference>
        <reference anchor="I-D.ietf-oauth-transaction-tokens">
          <front>
            <title>Transaction Tokens</title>
            <author fullname="Atul Tulshibagwale" initials="A." surname="Tulshibagwale">
              <organization>CrowdStrike</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>Defakto Security</organization>
            </author>
            <date day="30" month="July" year="2026"/>
            <abstract>
              <t>   Transaction Tokens (Txn-Tokens) are designed to maintain and
   propagate user identity, workload identity and authorization context
   throughout the Call Chain within a trusted domain during the
   processing of external requests (e.g. such as API calls) or requests
   initiated internally within the Trust Domain.  Txn-Tokens ensure that
   this context is preserved throughout the Call Chain thereby enhancing
   security and consistency in complex, multi-service architectures.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-oauth-transaction-tokens-11"/>
        </reference>
        <reference anchor="I-D.ietf-oauth-identity-chaining">
          <front>
            <title>OAuth Identity and Authorization Chaining Across Domains</title>
            <author fullname="Arndt Schwenkschuster" initials="A." surname="Schwenkschuster">
              <organization>Defakto Security</organization>
            </author>
            <author fullname="Pieter Kasselman" initials="P." surname="Kasselman">
              <organization>Defakto Security</organization>
            </author>
            <author fullname="Kelley Burgin" initials="K." surname="Burgin">
              <organization>MITRE</organization>
            </author>
            <author fullname="Michael J. Jenkins" initials="M. J." surname="Jenkins">
              <organization>NSA-CCSS</organization>
            </author>
            <author fullname="Brian Campbell" initials="B." surname="Campbell">
              <organization>Ping Identity</organization>
            </author>
            <author fullname="Aaron Parecki" initials="A." surname="Parecki">
              <organization>Okta</organization>
            </author>
            <date day="19" month="July" year="2026"/>
            <abstract>
              <t>   This specification describes a mechanism for preserving identity and
   authorization information across trust domains that use the OAuth 2.0
   Framework.  A JSON Web Token (JWT) authorization grant, obtained
   through an intra-domain OAuth 2.0 Token Exchange, facilitates the
   cross-domain acquisition of an access token.  The relevant identity
   and authorization information is chained throughout the flow by being
   conveyed in the respective artifacts exchanged at each step of the
   process.  Chaining across multiple domains is achieved by using the
   same protocol every time a trust domain boundary is crossed.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-oauth-identity-chaining-17"/>
        </reference>
      </references>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <reference anchor="A2A" target="https://a2a-protocol.org/latest/specification/">
          <front>
            <title>Agent2Agent (A2A) Protocol Specification</title>
            <author>
              <organization/>
            </author>
            <date>n.d.</date>
          </front>
        </reference>
        <reference anchor="I-D.agentic-ai-usecases-requirements">
          <front>
            <title>Agentic AI Use Cases and Requirements</title>
            <author fullname="Tirumaleswar Reddy.K" initials="T." surname="Reddy.K">
              <organization>Nokia</organization>
            </author>
            <author fullname="Zaheduzzaman Sarker" initials="Z." surname="Sarker">
              <organization>Nokia</organization>
            </author>
            <author fullname="Kehan Yao" initials="K." surname="Yao">
              <organization>China Mobile</organization>
            </author>
            <date day="27" month="October" year="2026"/>
            <abstract>
              <t>   This document describes use cases for agentic AI communication
   systems and derives protocol requirements from those use cases.  The
   requirements are intended to guide IETF standardization work on
   protocols in the context of agent-to-agent communication, agent-to-
   tool communication, with focus on dialog management, transport,
   multimodal communication, communication security, agent identity and
   authentication.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-agentic-ai-usecases-requirements-05"/>
        </reference>
        <reference anchor="RFC7523">
          <front>
            <title>JSON Web Token (JWT) Profile for OAuth 2.0 Client Authentication and Authorization Grants</title>
            <author fullname="M. Jones" initials="M." surname="Jones"/>
            <author fullname="B. Campbell" initials="B." surname="Campbell"/>
            <author fullname="C. Mortimore" initials="C." surname="Mortimore"/>
            <date month="May" year="2015"/>
            <abstract>
              <t>This specification defines the use of a JSON Web Token (JWT) Bearer Token as a means for requesting an OAuth 2.0 access token as well as for client authentication.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7523"/>
          <seriesInfo name="DOI" value="10.17487/RFC7523"/>
        </reference>
        <reference anchor="I-D.ietf-wimse-arch">
          <front>
            <title>Workload Identity in a Multi System Environment (WIMSE) Architecture</title>
            <author fullname="Joseph A. Salowey" initials="J. A." surname="Salowey">
              <organization>Palo Alto Networks</organization>
            </author>
            <author fullname="Yaroslav Rosomakho" initials="Y." surname="Rosomakho">
              <organization>Zscaler</organization>
            </author>
            <author fullname="Hannes Tschofenig" initials="H." surname="Tschofenig">
              <organization>University of the Bundeswehr Munich</organization>
            </author>
            <date day="6" month="July" year="2026"/>
            <abstract>
              <t>   The increasing prevalence of cloud computing and micro service
   architectures has led to the rise of complex software functions being
   built and deployed as workloads, where a workload is defined as
   software executing for a specific purpose, potentially comprising one
   or more running instances.  This document discusses an architecture
   for designing and standardizing protocols and payloads for conveying
   workload identity and security context information.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-wimse-arch-08"/>
        </reference>
        <reference anchor="I-D.ietf-wimse-aims">
          <front>
            <title>AI Identity Management System</title>
            <author fullname="Pieter Kasselman" initials="P." surname="Kasselman">
              <organization>Defakto Security</organization>
            </author>
            <author fullname="Jeff Lombardo" initials="J." surname="Lombardo">
              <organization>AWS</organization>
            </author>
            <author fullname="Yaroslav Rosomakho" initials="Y." surname="Rosomakho">
              <organization>Zscaler</organization>
            </author>
            <author fullname="Brian Campbell" initials="B." surname="Campbell">
              <organization>Ping Identity</organization>
            </author>
            <author fullname="Nick Steele" initials="N." surname="Steele">
              <organization>OpenAI</organization>
            </author>
            <author fullname="Aaron Parecki" initials="A." surname="Parecki">
              <organization>Okta</organization>
            </author>
            <date day="15" month="September" year="2026"/>
            <abstract>
              <t>   This document proposes best practices for authentication and
   authorization of AI agent interactions.  It leverages existing
   standards such as the Workload Identity in Multi-System Environments
   (WIMSE) architecture and OAuth 2.0 family of specifications.  Rather
   than defining new protocols, this document describes how existing and
   widely deployed standards can be applied or extended to establish
   agent authentication and authorization.  By doing so, it aims to
   provide a framework within which to use existing standards, identify
   gaps and guide future standardization efforts for agent
   authentication and authorization.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-wimse-aims-00"/>
        </reference>
        <reference anchor="I-D.reddy-wimse-aggregate-signatures">
          <front>
            <title>Authenticated Provenance for WIMSE Delegation Chains</title>
            <author fullname="Tirumaleswar Reddy.K" initials="T." surname="Reddy.K">
              <organization>Nokia</organization>
            </author>
            <author fullname="Hannes Tschofenig" initials="H." surname="Tschofenig">
              <organization>University of the Bundeswehr Munich</organization>
            </author>
            <author fullname="Yaron Sheffer" initials="Y." surname="Sheffer">
              <organization>Intuit</organization>
            </author>
            <date day="28" month="September" year="2026"/>
            <abstract>
              <t>   A request and its response, passing through a chain of workloads, may
   need authenticated provenance: proof of which workloads participated
   and whether each changed the message.  The base WIMSE HTTP Message
   Signatures mechanism ([I-D.ietf-wimse-http-signature]) authenticates
   one workload's message to its immediate recipient and does not
   provide this across a chain.  This document establishes authenticated
   provenance using per-hop digests of what each hop received and
   forwarded; this alone detects an omitted hop that changed the
   message.  An aggregate signature closes the remaining gap, a hop that
   forwards the message unchanged, and keeps the signature close to the
   size of one signature regardless of chain length.  The mechanism
   works with any aggregate signature scheme.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-reddy-wimse-aggregate-signatures-01"/>
        </reference>
        <reference anchor="I-D.manyfolks-agentproto-arch">
          <front>
            <title>Architecture for AI Agent Communications on the Internet</title>
            <author fullname="Jonathan Rosenberg" initials="J." surname="Rosenberg">
              <organization>jdrosen.net</organization>
            </author>
            <author fullname="Zaheduzzaman Sarker" initials="Z." surname="Sarker">
              <organization>Nokia</organization>
            </author>
            <author fullname="Tirumaleswar Reddy.K" initials="T." surname="Reddy.K">
              <organization>Nokia</organization>
            </author>
            <author fullname="Kehan Yao" initials="K." surname="Yao">
              <organization>China Mobile</organization>
            </author>
            <author fullname="Dapeng Liu" initials="D." surname="Liu">
              <organization>Alibaba</organization>
            </author>
            <author fullname="Suresh Krishnan" initials="S." surname="Krishnan">
              <organization>Cisco</organization>
            </author>
            <date day="30" month="October" year="2026"/>
            <abstract>
              <t>   This document defines the terminology and architecture for AI agent
   communications protocols over the Internet.  It provides the
   foundational architectural elements for the Agent Communications
   Protocol (ACP) - also known as agentproto - a new protocol to be
   developed in the IETF.  ACP enables communication between user agent
   clients and AI agents, between AI Agents and other AI Agents, or
   between AI Agents and tools.  All three of these interaction patterns
   - and the many use cases therein - require a session-like protocol
   which handles lifecycle management, including creation, modification,
   deletion and so on - along with the exchange of input and output.
   These session-like associations can be extremely long lived - running
   for hours or even days - and span multiple IP hosts used by the both
   the principal and by the agent.  They can also be highly intermittent
   with asynchronous responses.  All of these mean a new type of
   protocol is needed.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-manyfolks-agentproto-arch-00"/>
        </reference>
      </references>
    </references>
    <?line 693?>

<section anchor="a2a">
      <name>Comparison with the A2A Context</name>
      <t>This appendix compares the context of A2A <xref target="A2A"/> with the dialog
context.</t>
      <table>
        <name>A2A context and dialog context</name>
        <thead>
          <tr>
            <th align="left"> </th>
            <th align="left">A2A contextId</th>
            <th align="left">Dialog context</th>
          </tr>
        </thead>
        <tbody>
          <tr>
            <td align="left">What it is</td>
            <td align="left">An opaque string grouping related tasks and messages</td>
            <td align="left">An identifier and the initiator</td>
          </tr>
          <tr>
            <td align="left">Who creates it</td>
            <td align="left">The server; a client-supplied value is discouraged</td>
            <td align="left">The initiator proposes it; the server checks the proposal and creates the dialog</td>
          </tr>
          <tr>
            <td align="left">Scope</td>
            <td align="left">One client and one server, a single hop</td>
            <td align="left">Spans hops, or continues through a linked dialog</td>
          </tr>
          <tr>
            <td align="left">Delegation</td>
            <td align="left">A new, unrelated context with the next agent</td>
            <td align="left">The same dialog, or a linked dialog</td>
          </tr>
          <tr>
            <td align="left">Across domains</td>
            <td align="left">No defined behavior; each agent starts a new context</td>
            <td align="left">Continues through a linked dialog, with authorization moved by identity chaining</td>
          </tr>
          <tr>
            <td align="left">Lifecycle</td>
            <td align="left">None at the context level; per task</td>
            <td align="left">Dialog-level</td>
          </tr>
          <tr>
            <td align="left">Integrity</td>
            <td align="left">Not covered by a signature</td>
            <td align="left">Covered by each hop's WIMSE proof</td>
          </tr>
          <tr>
            <td align="left">Origin</td>
            <td align="left">Does not name the client that started it</td>
            <td align="left">Names the initiator, verified against the first proof</td>
          </tr>
          <tr>
            <td align="left">Authorization</td>
            <td align="left">Not tied to tokens</td>
            <td align="left">Recorded in the transaction token</td>
          </tr>
        </tbody>
      </table>
    </section>
    <section numbered="false" anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>TODO.</t>
    </section>
  </back>
  <!-- ##markdown-source:
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
SsuAisRwoU+PviJS8Sk4Rys+k2arprtu3bm+YF6LhTe299ivaLEZb5ezEK2c
3UCKcpTe5Wcaqr0vLFK7aVtOGM3QZm9/dQR2Q1IPui1wiL9LZBeMjfxKzXoE
64o/uBtkxeR2AvSUYZXzgu6CxSbPTctsEKwGQvrJOzqhG7InLoDbwsACC85o
gGG7PZFe7nrIdY1uarsWJtyI4dNh7us54m6K/mwVUkzI9+xPInoYILHesrk2
4Y2EK2pEdRTpYrQ9rAJuFTiyD2xNHURK944lBKVzBMM1hHyLddz8n9yRE42k
zjaim5Oj10ddoslVqVgT//n0zWv5kz63TvRzLGkyYBXia7k3KlhZ1XqRk1xK
a6O4DMp6FTtuQhFPuGPfha0Gb5JMbhtQwWuG6e5bGi9f81f/NRf+yTE1qqz4
2+F+iMqnU+kbfdkIvsp6AD+rK2zVtV/J98f0+83ksdWme2Z/6py4zheDcD1Z
J+xgF2b2a5eX2EKx8MUjXLAeLgiZyNdVwA1etWRf4TkMf9mOcc4eVRhgLTSY
UlzRNR6P5TmoRr6segmElJsqqg45Ojzyle03u+pQuYI38omy/D25Wsq1CkU2
Jb55cwP/4p3PaW2Hv7RDiFt5SyPtk5NMuhsO/Vy3AqO//j+8fM/eEABg3OLl
t9VKAZmB9CSFSt++iL+AIGUPhoKF0YVk9rXu9RCRr8vrVD4kD8vdRi3oX6P3
STerjs2aigsz1/yBeWGDX2GlULPdDl8p87VVmen1Ef3BrljC0fWBWM8Fk78B
m83e8MpXarsJR2mPGbwB0sHY8teqjkIpLsvejuziMsfc5I3kestX347AZnKI
Tb5GCAEs6VYS8oAtskLjiK2i6K5xxJKYZTQezevKkztoXXWVV4Bukp88NV0W
4O7691RCZLp1R+663k71AV/G1r6UiYB7mc/1bDMrNMHFFRExoRcggIuv5Qql
Gppa/n5O+oCm8B4yTdHEd4uoqGoaN+A/cF9d4m8pYc2B07Evjws5TUZfeERA
MSFwzbK9UYHoFuWhSQncB44y33tDYjm614cOJ0EWb6DJWZ5biwTvO73nJn6Y
6mbq+2oDuxPNpnYfFfoBTWDgr9DZYsnf7jOV5Rolms6e7szBoOL7G98cv5mI
/wMzeY2TWnYAAA==

-->

</rfc>
