[OAUTH-WG] Re: [WIMSE] Re: Binding OAuth-authorized calls to specific tool-call arguments in agentic/MCP flows

Sangam Das <info@sangamdas.com> Tue, 01 September 2026 22:34 UTC

Return-Path: <info@sangamdas.com>
X-Original-To: oauth@mail2.ietf.org
Delivered-To: oauth@mail2.ietf.org
Received: from localhost (localhost [127.0.0.1]) by mail2.ietf.org (Postfix) with ESMTP id 262F81336B0CC for <oauth@mail2.ietf.org>; Tue, 1 Sep 2026 15:34:30 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ietf.org; s=ietf1; t=1788302070; bh=CeFGkUISQJjyfTNGMLudlFWZNVGXBgEkpJ7kcWB2wJM=; h=References:In-Reply-To:From:Date:Subject:To:Cc; b=sLByb2b1XMxjkCIET25L+dYxBLb0M7HC11JSobChgF7Ix8ib1ux5402Z8dN3X273U c8/4mt5onj4bk6CB48tOyKhh4ZCC5vOYXW8482zyWU0KezZNcxWCz6Ws/XzM65Pc7s QpT04FyaG1Vf1iwAxCk+cNRFjZdhpo3T7OzjFXlM=
X-Virus-Scanned: amavisd-new at ietf.org
X-Spam-Flag: NO
X-Spam-Score: -1.887
X-Spam-Level:
X-Spam-Status: No, score=-1.887 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, HTML_MESSAGE=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_NONE=0.001, T_KAM_HTML_FONT_INVALID=0.01] autolearn=unavailable autolearn_force=no
Authentication-Results: mail2.ietf.org (amavisd-new); dkim=pass (2048-bit key) header.d=sangamdas-com.20251104.gappssmtp.com
Received: from mail2.ietf.org ([166.84.6.31]) by localhost (mail2.ietf.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id SLQgUbENqjEb for <oauth@mail2.ietf.org>; Tue, 1 Sep 2026 15:34:29 -0700 (PDT)
Received: from mail-yx1-xb130.google.com (mail-yx1-xb130.google.com [IPv6:2607:f8b0:4864:20::b130]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits) key-exchange X25519 server-signature ECDSA (P-256) server-digest SHA256) (No client certificate requested) by mail2.ietf.org (Postfix) with ESMTPS id 0E3C81336B0C5 for <oauth@ietf.org>; Tue, 1 Sep 2026 15:34:29 -0700 (PDT)
Received: by mail-yx1-xb130.google.com with SMTP id 956f58d0204a3-66de7e0bc85so461681d50.2 for <oauth@ietf.org>; Tue, 01 Sep 2026 15:34:29 -0700 (PDT)
ARC-Seal: i=1; a=rsa-sha256; t=1788302062; cv=none; d=google.com; s=arc-20260327; b=WtI2aYXOy0Kda1eKTQY7M8OZEGaC1X++KbdZfuGtrpvXhgLV1RZaQrue/ggGVDGjWW S8nbjS454U5qQljPn+2pJyhR9mY1EtLHWjTn8GiVBWbLKo6eR3MUoSmCLrBWqUMzB9De PhmTxyovrTEKgMr23UwMBpw/vfZaqILhP85/1Cbd0/Ys81U06y0UAKroAfiFzoTiUaE2 BmqKBUDi2XuJcyRT5y40Q+4+O+opY7GBbP9fln4kftHPzB150MFXo67nDMcAEP15X6kz Zp3g4S/ws/2Oj4z2xcP/kA1UPVQrx1f34gIQMPwWCMI+W9PK+IJjRxgQAGRPgkAyNw3p ePAw==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20260327; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:dkim-signature; bh=CS0U4OyFZcljIHTv1IHS0/iKg/Se6n2iri4f2lQ/1zo=; fh=8qyb6T4JVEah6vkFjJDdEuYSFcwiQ1xqDqNPG6ZhZnU=; b=S739xyDoU9PFgyZ020CZqHGCzROkfM6Dx0MykYaJ1CshU2hVtqJOEACRRmEwupv05W IhqY1tNtl/VurMpOa0SmKg227kS43JWCXhrrrR0dIpMJ5wakxJvpauBKX6NvzHMV33/M wYiMk8foulgFdMGuNbjtjUPJQsi8gHwy/y88oi8pdzklLCZpAqA/jxa/05QZKgJVrdj8 fuwXCsEMXlIWP1H/ah7z0xdQSJCQl2kGhwKFHxrfYkX62HsasWvouWECXP//Evl0cNuW q9GMbeJqUm6PKCKjFQIJKn3czQNiB5gzBMYzyF5BX0nGAgx+W+6gLDaNwhqOjqY9dT0T qj3A==; darn=ietf.org
ARC-Authentication-Results: i=1; mx.google.com; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sangamdas-com.20251104.gappssmtp.com; s=20251104; t=1788302062; x=1788906862; darn=ietf.org; h=content-type:cc:to:subject:message-id:date:from:in-reply-to :references:mime-version:from:to:cc:subject:date:message-id:reply-to :content-type; bh=CS0U4OyFZcljIHTv1IHS0/iKg/Se6n2iri4f2lQ/1zo=; b=yjL8pEc847GcL3NJcHat2VvzSrL45CMEJMmk2oTKumwTCOzfSrsybhSwLxIR8U7Fni pqvpHMXTPpIfDzl0ThGgiKqYf7gcRYW0/j/VOC+bQqdkvoSPrAO+gBjcC2weLJ0Jxrn2 U0/JhDzBGJXN8MTgxS9DrYW0dEydpBwYYpePkwPcKEo2g866gsBE2gjrgy46uZ4M2SvF szSMAkBBdKwk1BICvLhl7TsWQVC7fxWGLr265YyeVv3xB43ycoej57OllmsnZo5jHNuG NMj/8Ky+z4ApKIJrDIr+xL5+P1yzfrXj+daPswCkZRVBooPsyqh7+B9C3a5CCJ1bMx2S CsRA==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1788302062; x=1788906862; h=content-type:cc:to:subject:message-id:date:from:in-reply-to :references:mime-version:x-gm-gg:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to:content-type; bh=CS0U4OyFZcljIHTv1IHS0/iKg/Se6n2iri4f2lQ/1zo=; b=IA9c2thTi8BERSHxZpztWorNV8mzlqIEHxAt1kBxjCXtjwfCi4U3mY1Lk16kg05WZ0 DwJq/fBF3G6ZI2HVSPhu6z6WavGpNfO0JRYbz7aeg9ROyzpeUqLSMaL2hPWxYYGGO86O GCG4tR3WJY/Mt2g5dTHk5TafOJ1ISEnePG5yqKfjZkJZYalQUQAh9eKfkAzvSdE0JQfq AMVAVRVaA9b08a14tKwWuM/VoDVrLPYvaelt2Ugz4tKXco7svDCXMvU8d+akI57X5mLN +UNdFWzcagCNjoPc2lwNftXnj5ORFbYBrFU4jncFg99uRZpGXr7bp9BzzxHyhsz4ILzP kQYA==
X-Forwarded-Encrypted: i=1; AKwUvBxbAfxD6AIO/lVreilrF12nWBfynGDG5oQVonOOsPCNuz2z5NsLtmVZOLcqXZGnCwYnNh/ncQ==@ietf.org
X-Gm-Message-State: AFuF++kyoupQKzdKAIWfUKWwl6811uFz9KeDPsTduYARK7joZGN73bZT RmpIgTRIxigshBeOAeXhix80jRUBegGqh/5PqfD7dM79DXAQjOWx3v5VxRmZnaJo2tkjLY2/v87 KpoTyymq4L6CU/FBmv3I/KBEGcVEJeKiQfCQRztdcvIM=
X-Gm-Gg: AYBFou0fM28DxJfsgGu7I1Rjn0BgFC1PTWSlNUnmXAfcDn/beit2ziTQlTlkfvi5YQ6 4sKklpjUPRgZ+6Px+r/RJ3wRInj0wPD6mfZWFkS/YzhHib811wLQmOC+cyE8pEMzLY9TaGaFEMS PF3i8WSxXrREk8RJsvU2toslYSRkwHc4Ej6EkylS4pc7nmB601gSsKwL9mC9/2V50rtK6UmBDOr 4gFFKOLQPglPyVl9V3OdZxctS4T2Tn6Ns9WvPWQPaegYC7g+RFBT829TuB8yYrY4X/gPiAMqpRZ 4DVnGSPixOEchheXMHXet1K/q1tmsJKVo8A38c32xtfMavVTDDMGK+W4HTzZuPiSp/LAgOxaCSx /oQ==
X-Received: by 2002:a53:c8c4:0:b0:66f:99a6:a36b with SMTP id 956f58d0204a3-66f9b8f1139mr129817d50.5.1788302060280; Tue, 01 Sep 2026 15:34:20 -0700 (PDT)
MIME-Version: 1.0
References: <CAHCJH6HA8EWiP63o+RcW4vum-xvZCob23GDYqgJZU3LjkcU2TA@mail.gmail.com> <VI0PR04MB11841BA3C26AAAC8B9CBA0B6E93A82@VI0PR04MB11841.eurprd04.prod.outlook.com> <CAHCJH6GBRzt6QL910BJb3nzqRdMzzcZprntHEu-P4N7-uwzkFg@mail.gmail.com> <SA1PR18MB608537CBACAC8F098359067DAAA82@SA1PR18MB6085.namprd18.prod.outlook.com>
In-Reply-To: <SA1PR18MB608537CBACAC8F098359067DAAA82@SA1PR18MB6085.namprd18.prod.outlook.com>
From: Sangam Das <info@sangamdas.com>
Date: Wed, 02 Sep 2026 04:04:08 +0530
X-Gm-Features: AcwNN1VhiIVC8_T1Dd9RUwae9U60sm-mQZrEXV1ePaAfuOyiwJyt_18z2s80pcU
Message-ID: <CAHCJH6FL2WQ359UOPbdtSdWYqwpr-_Nm5--A9BzNJ0NeBzSW1A@mail.gmail.com>
To: "Raut, Ashay" <asharaut@amazon.com>
Content-Type: multipart/alternative; boundary="0000000000000e054a065a738550"
Message-ID-Hash: DQNTHH6RWSG7P7NXNTELIPISGNE6J5JF
X-Message-ID-Hash: DQNTHH6RWSG7P7NXNTELIPISGNE6J5JF
X-MailFrom: info@sangamdas.com
X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; emergency; loop; banned-address; member-moderation; header-match-oauth.ietf.org-0; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; digests; suspicious-header
CC: Yaron ZEHAVI <yaron.zehavi@rbinternational.com>, "oauth@ietf.org" <oauth@ietf.org>, "wimse@ietf.org" <wimse@ietf.org>
X-Mailman-Version: 3.3.9rc6
Precedence: list
Subject: [OAUTH-WG] Re: [WIMSE] Re: Binding OAuth-authorized calls to specific tool-call arguments in agentic/MCP flows
List-Id: OAUTH WG <oauth.ietf.org>
Archived-At: <https://mailarchive.ietf.org/arch/msg/oauth/4qZ4lxSnZYyjt5nVzu3_vwlyEqg>
List-Archive: <https://mailarchive.ietf.org/arch/browse/oauth>
List-Help: <mailto:oauth-request@ietf.org?subject=help>
List-Owner: <mailto:oauth-owner@ietf.org>
List-Post: <mailto:oauth@ietf.org>
List-Subscribe: <mailto:oauth-join@ietf.org>
List-Unsubscribe: <mailto:oauth-leave@ietf.org>

Dear Ashley,

Thank you — that is the distinction I was after.
I agree with your proposed host rule as the right shape:

A conforming host MUST NOT invoke a tool sink unless the finalized
parameter digest matches an authorized policy assertion.
Two qualifications I would keep explicit, so the assertion cannot be the
model block in another envelope:

1. The policy assertion MUST be established by a source other than the live
tool payload (user/policy/prior validated state). Matching a digest of
values that were copied from the same untrusted emission is not an
independent decision.

2. “Tool sink” includes the first local dispatch — function table, MCP
client tools/call, computer-use submit — not only a downstream RS.
Equivalent paths that can produce the same effect MUST see the same check.

Your point on tctx plus agentic_ctx is the complementary half: once the
host has allowed a call, propagating those claims lets later services
authorize the same act rather than a mutated one. That is defense in depth
on the chain. It does not replace the host MUST at the first sink.

If it is useful, I can try a one-paragraph “host conformance” note that
sits next to the txn-token-for-agents text rather than as a separate model.
Happy to stay in your vocabulary (tctx, digest, policy assertion, sink)
instead of mine.
Thanks again for the precise read.
Sangam





On Wed, 2 Sep 2026 at 12:35 AM, Raut, Ashay <asharaut@amazon.com> wrote:

>
>    -
>
>    So the issue is not that model-generated values can never become
>    authorized. It is that the same untrusted output should not effectively
>    define both the act and its own authority without an independent validation
>    step.
>
> Agree with this statement here.
>
>
>
>    -
>
>    the concrete Candidate Act remains non-effective until independently
>    authorized act-bound state is verified at the boundary capable of creating
>    the external effect, and equivalent execution paths cannot bypass that
>    boundary.
>
> Fair call out. It’s almost like we need spec to say, “A conforming host
> implementation MUST NOT invoke a tool sink unless the finalized parameter
> digest matches an authorized policy assertion”.
>
> On side note, you can pass Txn token’s ​ tctx​ claims along with
> agentic_context​ so that deep down call chains can do fine grained
> authorization to enable defense in depth and additional checks for agent
> initiated actions. Refer to
> https://www.ietf.org/archive/id/draft-araut-oauth-transaction-tokens-for-agents-02.html
>
>
> Ashay
>
> Get Outlook for Mac <https://aka.ms/GetOutlookForMac>
> *From: *Sangam Das <info@sangamdas.com>
> *Date: *Tuesday, September 1, 2026 at 3:32 AM
> *To: *Yaron ZEHAVI <yaron.zehavi@rbinternational.com>
> *Cc: *oauth@ietf.org <oauth@ietf.org>; wimse@ietf.org <wimse@ietf.org>
> *Subject: *[EXTERNAL] [WIMSE] Re: [OAUTH-WG] Binding OAuth-authorized
> calls to specific tool-call arguments in agentic/MCP flows
>
> *CAUTION*: This email originated from outside of the organization. Do not
> click links or open attachments unless you can confirm the sender and know
> the content is safe.
>
> Hi Yaron,
>
> Agreed on the payment example.
>
> If a client already has a concrete intent — Merchant A, EUR 123.50, that
> IBAN — puts those values into authorization_details, and the Resource
> Server compares the actual POST /payments against the approved values,
> RFC 9396 is doing exactly what it was designed to do. I am not identifying
> a gap in that pattern.
>
> The distinction I am trying to understand is between *expressiveness of
> the authority* and *how a dynamically generated invocation becomes
> authorized and eventually effective*.
>
> There seem to be three separate questions.
>
> First, who establishes the authoritative values?
>
> In an agent loop, the concrete {tool, arguments} may originate only after
> the model executes:
>
> standing/delegated authority
> → model emits {name, arguments}
> → host considers invoke(name, arguments)
>
> RAR can represent those arguments precisely. But copying the same
> untrusted model-generated arguments into a finer-grained authorization
> object does not by itself establish an independent authorization decision.
> There still needs to be some trusted basis — user intent, policy, prior
> validated state, or another authority source — against which that concrete
> Candidate Act is approved.
>
> So the issue is not that model-generated values can never become
> authorized. It is that the same untrusted output should not effectively
> define both the act and its own authority without an independent validation
> step.
>
> Second, reusable authority and per-invocation authority are different
> deployment shapes.
>
> A host may already possess authority permitting use of a tool/API across
> multiple calls. RAR can express a much narrower per-call grant, but
> obtaining such a grant after each model emission is itself an additional
> authorization lifecycle. RFC 9396 does not by itself require a host holding
> reusable authority to stop before each invoke() and obtain or construct
> act-specific authority.
>
> Third, there is the effectuation boundary.
>
> Even where exact arguments are authorized, the property I am exploring is:
>
>    - verify the finalized live arguments against the act that was
>    actually validated;
>    - verify current authority and the intended effectuation sink;
>    - handle concurrent/replayed use appropriately;
>    - and only then permit the external consequence.
>
> This also matters for sinks that are not naturally OAuth Resource Servers,
> such as local function dispatch, computer-use submission, local
> persistent-state writes, or other host-controlled effects.
>
> I have also been looking at Transaction Tokens and
> draft-niyikiza-oauth-attenuating-agent-tokens. They clearly cover parts
> of this space already — including transaction context, tool/argument
> constraints, per-invocation PoP, audience binding, and replay controls — so
> I would not claim OAuth work stops at coarse resource/action scope.
>
> The residual invariant I am trying to identify is broader:
>
> the concrete Candidate Act remains non-effective until independently
> authorized act-bound state is verified at the boundary capable of creating
> the external effect, and equivalent execution paths cannot bypass that
> boundary.
>
> If the OAuth view is that this last property belongs entirely to the
> host/resource implementation, with OAuth providing the sufficiently
> specific authority object, that is itself a useful answer. If it belongs
> partly in OAuth, then I think the interesting question becomes where the
> trustworthy act-specific authorization originates and how it is carried to
> the final effectuation point.
>
> Thanks — your example helped me separate these issues much more precisely.
>
> Sangam
>
>
> On Tue, 1 Sep 2026 at 3:35 PM, Yaron ZEHAVI <
> yaron.zehavi@rbinternational.com> wrote:
>
> Dear Sangdam,
>
> Thanks for sharing.
>
>
>
> I believe effective enforcement depends in a large part on how specific
> and fine-grained the approved authority is.
>
> For example in RFC 9396 is this RAR example:
>
> {
>
>       "type": "payment_initiation",
>
>       "actions": [
>
>          "initiate",
>
>          "status",
>
>          "cancel"
>
>       ],
>
>       "locations": [
>
>          "https://example.com/payments"
>
>       ],
>
>       "instructedAmount": {
>
>          "currency": "EUR",
>
>          "amount": "123.50"
>
>       },
>
>       "creditorName": "Merchant A",
>
>       "creditorAccount": {
>
>          "iban": "DE02100100109307118603"
>
>       },
>
>       "remittanceInformationUnstructured": "Ref Number Merchant"
>
>    }
>
>
>
> Which defines an exact payment amount and beneficiary.
>
> A resource server can leverage these to deny a request with non-matching
> arguments.
>
>
>
> Could you please explain what gaps you identify, which cannot be mitigated
> with fine-grained authority properties?
>
>
>
> Regards,
>
> Yaron
>
>
>
>
>
> Classification: CONFIDENTIAL
>
> *From:* Sangam Das <info@sangamdas.com>
> *Sent:* Tuesday, September 1, 2026 9:52 AM
> *To:* oauth@ietf.org
> *Cc:* wimse@ietf.org
> *Subject:* [OAUTH-WG] Binding OAuth-authorized calls to specific
> tool-call arguments in agentic/MCP flows
>
>
>
> You don't often get email from info@sangamdas.com. Learn why this is
> important <https://aka.ms/LearnAboutSenderIdentification>
>
> This message is from an external sender - be cautious, particularly with
> links and attachments.
>
>
>
> Hi all,
>
> A question prompted by watching how MCP/tool-use agents actually fail in
> practice:
>
> DPoP sender-constrains a token to a key. RAR and ID-JAG can scope a token
> to a resource and a set of permitted actions. But once an agent holds a
> valid token, none of these constrain the *specific call* it's about to
> make — the tool name and arguments the model just emitted. A
> prompt-injected or poisoned-context agent can hold a fully valid,
> correctly-scoped token and still invoke the right tool with
> attacker-controlled arguments, and OAuth has no visibility into that
> argument payload at all.
>
> Is there existing or in-flight work that binds authorization to the
> content of a specific call (e.g., a digest of the tool name + arguments)
> rather than just to the resource/scope class — something closer to a
> per-invocation proof tying a grant to *this exact call*, not *this class
> of calls*? Or is this considered out of scope for OAuth/WIMSE and better
> handled at the host-application layer?
>
> I*'ve written up one possible approach in more detail as *
> *draft-das-agentic-tool-binding-02** ("tool_use Is Not invoke(): Binding
> Execution-Finality to Agentic Tool-Call Interfaces and MCP"), if useful as
> a starting point rather than a proposal: *
> *https://datatracker.ietf.org/doc/draft-das-agentic-tool-binding/02/*
> <https://datatracker.ietf.org/doc/draft-das-agentic-tool-binding/02/>
>
> (Note: this builds on architecture covered by my pending patent
> applications, disclosed per RFC 8179 for transparency — flagging this now
> rather than later.)
>
> Mainly interested in whether this gap is already solved somewhere I'm
> missing.
>
> Thanks,
> Sangam
> This message and any attachment ("the Message") are confidential. If you
> have received the Message in error, please notify the sender immediately
> and delete the Message from your system, any use of the Message is
> forbidden. Correspondence via e-mail is primarily for information purposes.
> RBI neither makes nor accepts legally binding statements via e-mail unless
> explicitly agreed otherwise. Information pursuant to § 14 Austrian
> Companies Code: Raiffeisen Bank International AG; Registered Office: Am
> Stadtpark 9
> <https://www.google.com/maps/search/Am+Stadtpark+9?entry=gmail&source=g>,
> 1030 Vienna, Austria; Company Register Number: FN 122119m at the Commercial
> Court of Vienna (Handelsgericht Wien).
>
>