[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). > >
- [OAUTH-WG] Binding OAuth-authorized calls to spec… Sangam Das
- [OAUTH-WG] Re: Binding OAuth-authorized calls to … Yaron ZEHAVI
- [OAUTH-WG] Re: Binding OAuth-authorized calls to … Sangam Das
- [OAUTH-WG] Re: [WIMSE] Re: Binding OAuth-authoriz… Raut, Ashay
- [OAUTH-WG] Re: [WIMSE] Re: Binding OAuth-authoriz… Sangam Das
- [OAUTH-WG] Re: Binding OAuth-authorized calls to … Yaron ZEHAVI
- [OAUTH-WG] Re: Binding OAuth-authorized calls to … Sangam Das
- [OAUTH-WG] Re: Binding OAuth-authorized calls to … Jijie Wei
- [OAUTH-WG] Re: [WIMSE] Re: Binding OAuth-authoriz… Sangam Das
- [OAUTH-WG] Re: [WIMSE] Binding OAuth-authorized c… Sangam Das
- [OAUTH-WG] Re: [WIMSE] Binding OAuth-authorized c… Sangam Das
- [OAUTH-WG] Re: [WIMSE] Binding OAuth-authorized c… Sangam Das
- [OAUTH-WG] Re: Binding OAuth-authorized calls to … Jijie Wei
- [OAUTH-WG] Re: [WIMSE] Re: Binding OAuth-authoriz… Mohamad Khalil Yossif
- [OAUTH-WG] Re: [WIMSE] Re: Binding OAuth-authoriz… Sangam Das
- [OAUTH-WG] Re: [WIMSE] Binding OAuth-authorized c… Kieran Sweeney