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

Sangam Das <info@sangamdas.com> Tue, 01 September 2026 22:32 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 1DB9D133698CE for <oauth@mail2.ietf.org>; Tue, 1 Sep 2026 15:32:48 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ietf.org; s=ietf1; t=1788301968; bh=3K7Ncr8rFq5i8Wc1FesqbG4oqCLgJ5xJOiofLPMO4eM=; h=References:In-Reply-To:From:Date:Subject:To:Cc; b=DcOpi6jCNVsSMk8gpF6GQVE38eSDKEXgXlfo7su2AV1OEG1yM5X03XbMuS4ivl9oA BV7jqIOf0pM4hz9PxUNO4Ajm6HojO1by/tcHvGtQRagrtH+zYABckLr/hFHaLjGJJ0 mvYsUr9fbHH6F/xPdfsIXKSutw2xLWLHnVMHJIEY=
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=ham 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 kfNu9UHwtZCz for <oauth@mail2.ietf.org>; Tue, 1 Sep 2026 15:32:46 -0700 (PDT)
Received: from mail-yx1-xb12f.google.com (mail-yx1-xb12f.google.com [IPv6:2607:f8b0:4864:20::b12f]) (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 8ECDE133698C7 for <oauth@ietf.org>; Tue, 1 Sep 2026 15:32:46 -0700 (PDT)
Received: by mail-yx1-xb12f.google.com with SMTP id 956f58d0204a3-66e64e6e3fbso473924d50.2 for <oauth@ietf.org>; Tue, 01 Sep 2026 15:32:46 -0700 (PDT)
ARC-Seal: i=1; a=rsa-sha256; t=1788301966; cv=none; d=google.com; s=arc-20260327; b=NlRp69NUunBtu8PM1QPTnHEqLAdZfFL4FxnSrZ/CZZGKTFUCyIu2Gsw1LGATNqCvTk IyOmsPsiYb1+h9Fpq+h3oBFAVmupz9pMVM/0LJHZcnL04DaCYZwJlYbo5QVpqz07y8Au fV7GFfLHUDnTf3sEMQpsxjfqccploiY240M94Lcm47cAwIGnHsTd5MObZWEYWFkfudst R9Wrv440804P45Ci/H/kNdvDt/fCTmtCgWGZtmJeohDD75hWqdL+j8T7RRMnS6DBsn0/ rh6pQHabWMB+WXXUcPbAhBS15GOlItCHKUYOfCe3mGVqZMBJ5tVQwv2Qae31MdobXABc Fxkw==
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=BuqestlihqsWsB6ZdYlyASdkn4ECSUlJMvPrHVwFs/Q=; fh=LLMLe30J5Z8IzDsMi24wPeJVO3wuWVvzqC9hQXQ1Roo=; b=CYlQl5gRgpVi2G8N7NWtHcFeTDx/Q4Q4pgpVSfQHOa8exH5i/KFPJ1giI9ciU6t5ff UyzsKc/R33gtfsC+5ZoZ512Alh0BYh6R8e+txOucZ1sB2niwa0J/cLwT+nX7ydiBtDFP CTpmNkSf7QMkZVI7a8fu7CY5gEAS3++nq3jTbw3jZjvVgJYLuhhFyjhaRKoqEPfAMAVz FMKIFDLuCVtAcTs/R5BOxCB/0pIoPEnWBEqHTBhGaEN/1tqSqQBVd3d1fHzfyMXciYFp 5Le4D7MTWuiDohULMRnB6t6kvhxQN8I+6kct7KmYBAyEi+MN8ZdEGwEp6yayPdQDCGb/ U73A==; 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=1788301966; x=1788906766; 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=BuqestlihqsWsB6ZdYlyASdkn4ECSUlJMvPrHVwFs/Q=; b=uqGBanq604wr6rqNTr+F3d7gUvSLH2F5E0gDm0MXX1f4q9C5YgSl44/qOzFO4i/m0L 026QQsayBgmIQcjcD1hSv5uL+lu8uHwcGomNoJWd99INBrTAdz0kQ7h8+5o/nQmuQ4Ob xvn9e993l5ifVDT3fvbwrGTi1ZGiTM0xYs9nJqpi2aKmM3BxjdUViR95NHbRXnWHJYJ+ J+i1h8E5e7mBvqXij3r9nWpnTx2aGNot09bGH/UdsI3dNN0YnxR+PfwtKXs/PmayxeKK Ljofw28tBpCvEfboZoqpnqTV9LTIU4xUo4DYP68s/eHDjKDANXJ18f0QkrmnWdNUJtWo 9VqQ==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1788301966; x=1788906766; 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=BuqestlihqsWsB6ZdYlyASdkn4ECSUlJMvPrHVwFs/Q=; b=XEPfoQy5ZYEKn4avi9evY6+IuT5ZM2QM6CH6vhaOK8Ch3SbmoN1y1aGfF/ogWbxill D4qKiqWUuZiUINnQa3GQ/3tlI3Rpjb5EOefqMXFfFXvghr96lXdBtLLjZgQOBy6UndUT dF4UtsKDWiIHHHxTCuT1fFltjvs0U9pt7VZeQm4a9EXhJrbd4UE7675wKt51HHEkTasT 3DucXtMnzQM5QLQeilU6yc5nRhU7JXemjwP8cheVWHKwA0SFPohjHzd0MsOeSMZ0Qo6E uoHULMkqwilo3J6gFubY/BII62hCFA5fnPAU+YVm2YtMgQWQjbDFtdYg9uFjpMqA38BA 3/ng==
X-Gm-Message-State: AFuF++meqwqw57oiUNBUGKZ2xeG+i9iWt6ghAGat/CsDntv1JVDG5kjl 0Vl7h+6V46bsSeI5wL4y2poZ+hPahSLBjAKJGUYE0WTOF/Du4PvXiMD+cxf9Cmem18PSgnpZXhD aMjJDUc8R2sFe+tVm1ymhq+4dVjJhUNIQ1/VFqabAMzs=
X-Gm-Gg: AYBFou3HupyV1+BygcdJdcppmJ15ofD+KQYvGhG/CNl/e58vqYv6kTQUcjjXomkrx6c UrjIyPdl2ZkU/dZjAzbfIdm6UESi/KtR8rsj+axd6xjcvx5fe6wEmhdPHDorNOa8Deczv667vDQ uCXNk2FaFvQI8Uaw5arnA3J4AqKdhY8sodxFEZXkDmlg7DvqzSDTSA+QWWoWBEpEap/fCObl0a8 OIEGZWSpxzlwZUopo7Bzq2qf/mOq/V9ybTfKmbz8cIx1yVG1ApNHdJYuL4A/vXzj08SWz5w1agM sK893OPSRNRle7Ob3tM0+Fa5W6ygBcPVzdR7SGtIYKhlaFjFBYlwhjN6TmlizvmETHDxZD+xOjH Eng==
X-Received: by 2002:a05:690e:4143:b0:66f:8255:9f3d with SMTP id 956f58d0204a3-66f9b9326bfmr163985d50.7.1788301965675; Tue, 01 Sep 2026 15:32:45 -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> <VI0PR04MB1184126154C049260324E1D1193A82@VI0PR04MB11841.eurprd04.prod.outlook.com>
In-Reply-To: <VI0PR04MB1184126154C049260324E1D1193A82@VI0PR04MB11841.eurprd04.prod.outlook.com>
From: Sangam Das <info@sangamdas.com>
Date: Wed, 02 Sep 2026 04:02:33 +0530
X-Gm-Features: AcwNN1WIw1VjEGjr4eued5v2VKc6TWClFnBQkcM2GFb7NgtoaPWSF8hhNZ8lcu4
Message-ID: <CAHCJH6FHs9kesV=betszFbr89n-uRiB5rqJBrARcMnLm38uzNQ@mail.gmail.com>
To: Yaron ZEHAVI <yaron.zehavi@rbinternational.com>
Content-Type: multipart/alternative; boundary="0000000000006a61e2065a737fb2"
Message-ID-Hash: JAUYF4UAF6BEGKGVLVYDHVHPEDXTYG3B
X-Message-ID-Hash: JAUYF4UAF6BEGKGVLVYDHVHPEDXTYG3B
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: "oauth@ietf.org" <oauth@ietf.org>, "wimse@ietf.org" <wimse@ietf.org>, Karl McGuinness <me@karlmcguinness.com>, "ogazitt@gmail.com" <ogazitt@gmail.com>
X-Mailman-Version: 3.3.9rc6
Precedence: list
Subject: [OAUTH-WG] 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/ccP0EHFMZX0rDUp_IGLgirhgoWQ>
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 Yaron,

Thank you — that framing helps.
I agree that per-emission user consent is the wrong gate. A standing,
user-approved mission (or equivalent intent object) is the right place for
durable authority and constraints. Evaluating later fine-grained requests
against that mission, with AuthZEN at issuance or exchange, is a coherent
way to downscope without consent fatigue. I would treat that mission as the
independent authority source in the first question, not as something the
model is allowed to write.

Where I still want to be precise is when the evaluation is allowed to be
skipped.
If the host already holds a mission-bound token and the model emits {name,
arguments}, there are two deployments:

A. Host always token-exchanges / re-issues against current mission + live
arguments, then invokes only with the new token.
B. Host invokes with the token it already has, because the tool is in
mission scope.
A is the path you describe. It can address question 2, and
AuthZEN-on-issuance is the decision point for that new token.

B is the loop most tool hosts run today. Mission constraints never see the
live arguments unless something on the host (or at the sink) compares them.
Token issuance work does not run on that path.
Karl’s mission draft itself separates those: baseline bounds are token
lifetime and carried constraints; point-of-use evaluation against current
mission state before execute is an additional runtime profile. That runtime
check is question 3.
Ashay put the host form of it as:
MUST NOT invoke a tool sink unless the finalized parameter digest matches
an authorized policy assertion.

If the policy assertion is the approved mission (or a token derived from
it), and the digest is over the live arguments, that is A even when the
host does not go back to the AS — or it is an explicit deny on B.
So I do not see mission / AuthZEN and that host rule as competing paths.
Mission is where trustworthy act-specific authority originates. The
host/sink rule is how it is applied at the boundary that can create the
effect, including local dispatch that is not an OAuth RS.
If the WG view is “conforming agent hosts are deployment A; B is
non-conforming,” that is a clean answer. I would just want that stated,
because B is what Claude/ChatGPT/MCP loops do unless someone wraps invoke().
Thanks,
Sangam


On Wed, 2 Sep 2026 at 3:43 AM, Yaron ZEHAVI <
yaron.zehavi@rbinternational.com> wrote:

> Thanks for the quick response Sangram,
>
>
>
> I agree model generated output brought on every request to user’s approval
> as the sole enforcement gate presents high friction leading to
> consent-fatigue risks.
>
>
>
> There’s emerging work around first approving a higher level intent /
> mission which contains authority and constraints which may then serve as
> guardrails for fine-grained requests, serving as an additional enforcement
> gate which can reject, approve or approach user for approval.
>
> One example is Karl Mcguinness’ work on mission bound authorization
> <https://github.com/mcguinness/mission-bound-authorization>.
>
>
>
> An enforcement gate based on approved intent could enable lowering tokens
> authority and lifetime while raising the fine-grained authorization detail,
> effectively having clients make more frequent requests which are then
> evaluated against current state of agent, user and the standing mission’s
> authority.
>
>
>
> This could address the 2nd and 3rd questions you’ve named, while avoiding
> unwanted user-friction as not every client request would require user
> approval.
>
>
>
> I share your concern that these challenges are not yet sufficiently
> addressed, but see the work around approved intent / mission as well as
> policy-driven authorization decision (e.g: Omri Gazitt’s drafts on AuthZEN
> Profile for OAuth 2.0 Token Issuance / exchange) as a good path forward.
>
>
>
> Regards,
>
> Yaron
>
>
>
> Classification: CONFIDENTIAL
>
> *From:* Sangam Das <info@sangamdas.com>
>
> *Sent:* Tuesday, September 1, 2026 12:32 PM
> *To:* Yaron ZEHAVI <yaron.zehavi@rbinternational.com>
> *Cc:* oauth@ietf.org; wimse@ietf.org
> *Subject:* Re: [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 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).
>
> 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).
>