[OAUTH-WG] Re: Question on ID-JAG topology: Public Agent + API Gateway / MCP Proxy scenario

Eric Leleu <eric.leleu@graviteesource.com> Sun, 26 July 2026 20:04 UTC

Return-Path: <eric.leleu@graviteesource.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 47E9011EEC989 for <oauth@mail2.ietf.org>; Sun, 26 Jul 2026 13:04:22 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ietf.org; s=ietf1; t=1785096262; bh=MGmVwMAlsG/LgcL25tA07759Mh0Lt2n4t/9GJ03pfiI=; h=References:In-Reply-To:From:Date:Subject:To:Cc; b=DnADEvDL4Jysiws0frCNLywpONqqS8cWiq3xFzUktRUp06JKcOJb0QroStd/hAnIy sPl/JiIPdI1NrxSRS5p1IpWI6e2XyhRCEPuAgRYMVdvBCL/RhYjrqz3wPoDaG7joqz 5Seo+Ax3ztlrFiTp6Ru4hBLuQofE3A4cbpswekdM=
X-Virus-Scanned: amavisd-new at ietf.org
X-Spam-Flag: NO
X-Spam-Score: -2.089
X-Spam-Level:
X-Spam-Status: No, score=-2.089 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, HTML_MESSAGE=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-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=graviteesource.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 fkZJu1Sh_WdX for <oauth@mail2.ietf.org>; Sun, 26 Jul 2026 13:04:20 -0700 (PDT)
Received: from mail-ed1-x52d.google.com (mail-ed1-x52d.google.com [IPv6:2a00:1450:4864:20::52d]) (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 1866811EEC974 for <oauth@ietf.org>; Sun, 26 Jul 2026 13:04:19 -0700 (PDT)
Received: by mail-ed1-x52d.google.com with SMTP id 4fb4d7f45d1cf-69ea0595598so2085727a12.0 for <oauth@ietf.org>; Sun, 26 Jul 2026 13:04:19 -0700 (PDT)
ARC-Seal: i=1; a=rsa-sha256; t=1785096259; cv=none; d=google.com; s=arc-20260327; b=ROFTXdAoyr4qkD4hrtlxP1zXRIQlvIdYuxSL/IajFLtsUhya1n7RoQAjBbcjojxjuu z5W8DVKvG41qN9Nq1gsxi2pCrGnxGbaYUhdLh/SU3lMPb7EH5t+5dLiXG7/NUfU/6GLx 0zfFqPXzADhFgohgv4h2eqonzug8WFVLNNXNdvMpQlOix4ftIeppWN1UONL0AMffxtld a8m49gv3EryRBQnYE+wuV2dAv1M38FtFkfKimWvdwB92VzIUbT7EBoFyQghg0UZtBNAo aqolYrgo14Qx+z7SIi6l7lkt+ejP1cUi85ttgCfFxYRXOn61zgPWl1XObN/uAzD+ates 4UgQ==
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=ptLM/2risclDVoJDt+xeJAZiIIk7b4SjlVyL/moowCs=; fh=NanZFUAROMOkojrK7HDc9TMr8E6hlDd/BhZNaUfxLnI=; b=V6icuHEEyU02LvfxpIsvA6hdCrik9tARvvLVeik12PCmXfFkckKjL5psHHTeCKsB42 M0XThTZPHhRWvmrzK4VZSqKxYRRxMUXhddC8heUqhGIkH2b9C4akZhNKvPn+VahNMsgj fBYFMhNiIn+IMXuzGWfuM4yL3543+hyP9YtZVDD8MszvpaN7rkt2GrLgIvjJSycEvMxs aKpJn55prgh8u4xI95cf6+3dAwc0Gth30aILZ33vLCUw8zzGsgof/owEzRtZ5OwPJwMv YnM1KRXfmPaYMwQnoPBFLZgQivaSa+rVLEKXT/3l3Tdmbaa4YRSD/rozMEkbHDz/Mw4m TYSQ==; darn=ietf.org
ARC-Authentication-Results: i=1; mx.google.com; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=graviteesource.com; s=google; t=1785096259; x=1785701059; 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=ptLM/2risclDVoJDt+xeJAZiIIk7b4SjlVyL/moowCs=; b=JZ+s6T7y/2vrN1ordFamAKltNBElkduXr5TtDMiPLr34UzfdVu56UadWAci+1HOHvV K86pg+WOYY0q+w9O8ZNM/60ku2jWxONU3ntxdjvkHEY25KzBghyF3axB6oOpvLAsGQnb 2YO63x4wXKRVOSSMwC7nHihghL3wemEECcaDyM4ZnQj6Rmx7Q/QIjZ0Y1mtDFm4IbeDd nsp5MZ/BJju/O/f6iKZRH4kFtGZxde39+4s+8s4nJGPLBE/lMwehUZkOVxGSVjL5A1Cu 6HXisQveNtOevy75NxsMOeYrF7tJ/RnNgdFqSJjvMHcofcpbvPDOGOw/uT5Pz7lzbU1s Y0lA==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1785096259; x=1785701059; 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=ptLM/2risclDVoJDt+xeJAZiIIk7b4SjlVyL/moowCs=; b=evA79g0P0Z4P58eGtBpqsF7TJw6d5CayGGRP8x4wbcloYncxgtFLqgZ1Y/fi6ePR7h 0MFYNVHxTrSG3Yt7ZtOUNWVf2YKXEYbl4Brm5W8EGbWRWC2K9w3muvSexT3PBEsXBerS MsM6KGf5wUPW7cs+FFv1JqNpGciXFC/Hltrh30FUaRqXr6ViZx12WrdHl5G2wPOyVxwh ONbVjWp6WcLdONEOPgK0eLTsIsyBQCmTf0hmCeuuhex+ZIY291hk1dNkGIJ51t6Dnyfx z7n1DTf5ee13DmIhGRMTcIcvNns1k/2iAG+u/ac+Us/9nj1vhgBQ1/NFlV/zbiv02Vx3 UGMQ==
X-Forwarded-Encrypted: i=1; AHgh+RquIm22zcDRue+o7CMRAJ+zvKm+uIw0PQWAaaq5h/7WDrusxfg4viUiQiJjxfejTYrHPo1sbw==@ietf.org
X-Gm-Message-State: AOJu0YyOspikGsucY8wyBnq61EtQhw/WW7Q5paBkre+XUY8jM8quODlI UEByaob8TCadCNfQGercs6FCI9OgeG1Qr/eBKS+6Hkbedh0V8HJL4bj56wTT1jTt1qnB4nomPwG 4fVTxNVbqTNfVjiTKq5JX5powyFjFzp2PdbNzHJY2XQ==
X-Gm-Gg: AR+sD10meHyB77466uqQCwc2EKzfmH4tai9D127eJGtbiP6K3ERjm6vo20bCRrEgNq1 659PsDlHjaHj17k6hZl0p8l4TL4+mgjckGasrG5XF5CrHYgKaj5X9hW+ezeceSrvvJBAzxrcQ/b lwSUSSZDCiGtULwXoFZty+5atDwFEU6ylE1D84X9v2qX/XVnTgwLW0apA9cYhl6cGtXpkILLmq9 n//Ukm1XDMr47DNcMDT1sKsxNVR0gXomSD8n/pyYq6JMD07lvK1PCiUTCEcgO5sagL1DrSc75rZ w8gLuPwC20gmQqg=
X-Received: by 2002:a05:6402:51ca:b0:699:6415:5b91 with SMTP id 4fb4d7f45d1cf-69fc115a35fmr2340306a12.23.1785096258229; Sun, 26 Jul 2026 13:04:18 -0700 (PDT)
MIME-Version: 1.0
References: <CAMM5n7w-CFEUSNQBKcopmeu7qenvVr_R-btQMYa29JAiyOvcSw@mail.gmail.com> <Gv_xNENanFNpCGf1PlE-6FhPPrAb27XsQFOZmDfZYIyiPaJAd36FSuE5LI3uMllc98ffw6vNr_CBoRaEs_EFCJk6QLifiU3yqzjYklvweck=@proton.me> <CAPVrLW3SUzJfxjM7P-3F8zqnmtWoG=6mELQ9OcmpPpcOF3ENEQ@mail.gmail.com> <CAMM5n7wXsu3i+Ch-gS+gDeJN0D8VJCH-Z1Q9epwcEH-zOJbr3A@mail.gmail.com> <NLIphYTuGVD_ZqD6BQNNBW-Ch5COwhJxH4dGMGtl1n46y6KzY5mSZK4mY6GCuvrrXZda223dGrr2FO-Z1wUTAvaU3fuc5ssZ8nKL96psCJ4=@proton.me> <CAH8kd8T2yduwX8=ve_23a06mnN+sw8_wqccHM-voP3bvrOacPA@mail.gmail.com> <0mIKidCQfLI40qLXGigH-qqaLN-BA7nIpOL0P_ELkjlSt3tk5_l_bfkj8lVsXFGfxZUg-2ScX4HMkK1nrduybXhtOHRjAbTFopZGKp5VQ3o=@proton.me>
In-Reply-To: <0mIKidCQfLI40qLXGigH-qqaLN-BA7nIpOL0P_ELkjlSt3tk5_l_bfkj8lVsXFGfxZUg-2ScX4HMkK1nrduybXhtOHRjAbTFopZGKp5VQ3o=@proton.me>
From: Eric Leleu <eric.leleu@graviteesource.com>
Date: Sun, 26 Jul 2026 22:04:05 +0200
X-Gm-Features: AUfX_myspR7-xJdjGwFtAxxiiDSey5WefP5GRSE993i8-RslicWHDDukiupv5Fo
Message-ID: <CAMM5n7y+dJjRXs0UYauidU+TbAcepzu79cJN_GNmzp-uK-EK1g@mail.gmail.com>
To: morganLR <morganLR=40proton.me@dmarc.ietf.org>
Content-Type: multipart/alternative; boundary="0000000000005cade10657891ce3"
Message-ID-Hash: MIH5ODV3YWUEHK3MXFYM6EWNOM2UHBSP
X-Message-ID-Hash: MIH5ODV3YWUEHK3MXFYM6EWNOM2UHBSP
X-MailFrom: eric.leleu@graviteesource.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: Karl McGuinness <me@karlmcguinness.com>, oauth <oauth@ietf.org>
X-Mailman-Version: 3.3.9rc6
Precedence: list
Subject: [OAUTH-WG] Re: Question on ID-JAG topology: Public Agent + API Gateway / MCP Proxy scenario
List-Id: OAUTH WG <oauth.ietf.org>
Archived-At: <https://mailarchive.ietf.org/arch/msg/oauth/sZ-s20aQjNVQXYBIMvuifX-C-pw>
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>

Hi Max, Morgan, and Karl,

Thank you all for the valuable feedback.

Following Morgan's suggestion, I’ve opened two issues regarding this use
case:

   -

   On the oauth-identity-assertion-authz-grant GitHub repository [1]
   -

   As a proposed use case in draft-chen-oauth-agent-authz-use-cases [2]

Karl*, *I reviewed your *Identity Continuation Assertion* proposal, and it
addresses this issue nicely. I particularly like that it keeps the ID Token
on the client side rather than forwarding it to an unintended audience.

Max*,* Your proposal around the elicitation flow seems to solve the
immediate issue of granting access to upstream servers. However, as Morgan
pointed out, we lose visibility into the delegation chain, which isn't
ideal (even if it might be the best available workaround given the current
state of the draft).

Best regards,
[1]
https://github.com/oauth-wg/oauth-identity-assertion-authz-grant/issues/114
[2] https://github.com/Maisy-ML/Agent-Authorization-Use-Cases/issues/16

Le ven. 24 juil. 2026 à 21:02, morganLR <morganLR=40proton.me@dmarc.ietf.org>
a écrit :

> Max,
>
> This is a useful decomposition, and I think your own parenthetical
> identifies the crux: the workaround makes the gateway the subject, and
> everything upstream of it sees only the gateway. That is not an
> implementation wrinkle, it is the general behavior of re-subjecting
> intermediaries: each mediation hop that acquires authority under its own
> identity collapses the chain behind it, and whatever the deployment needed
> the chain for (per-agent policy, audit attribution, differential
> revocation) has to be reconstructed some other way.
>
> The actor_token idea does help, but it is worth being precise about what
> it buys and what it costs. It records one hop: agent plus gateway, bound at
> mint time. Generalized to deeper topologies (agent behind agent behind
> gateway, which is the ordinary MCP composition case), it becomes stacked
> act semantics minted by the IdP per hop, which means the IdP is the
> recorder of the chain and every extension of the chain is a round-trip to
> it. That is a coherent architecture, and for the fullest articulation of it
> I would point at Karl's Identity Continuation Assertion note, which works
> out the caller-pushed, control-plane-resident version of exactly this
> direction, including its revocation story. The trade is then explicit:
> chain state lives at the control plane, per-agent visibility is restored to
> the IdP, and the chain's length is priced in round-trips.
>
> One assumption in the scenario deserves flagging, because it is where the
> hard version of the problem lives: the construction works because the
> agent, the gateway, and the upstream all sit in one IdP's orbit, so the
> actor_token is validatable by its own issuer. When the gateway and the
> agent belong to different organizations (the multi-vendor gateway case,
> which the DMSC BoF decks this week treated as the normal deployment),
> validating that actor_token is itself the cross-domain trust-establishment
> question, and we are back at the cold-start gap the use-cases draft now
> names in UC5.
>
> Which is my main suggestion: this thread has produced better deployment
> evidence for that gap than anything currently in the draft. Meiling has
> opened issues #17 (UC5 alignment) and #18 (the cross-organizational
> companion case) on the use-cases repository; the gateway-collapse
> observation and the one-orbit assumption both belong there as recorded
> evidence, and I would encourage you to add them. The mechanism questions
> will sort themselves out per draft; the requirements record is what seems
> to be collecting this year
>
> Morgan
> On Thursday, July 23rd, 2026 at 12:34 AM, Max Gerber <mgerber=
> 40twilio.com@dmarc.ietf.org> wrote:
>
> Thinking out loud: One way to do this today is for the MCP Gateway to
> *also* act as a client to the IDP, requiring the end user to log in to
> both the Gateway and the Agent. This can be done with URL Elicitation in
> the MCP space, or if the Gateway runs its own OAuth AS as a shim. The Agent
> gets a regular access token, and the Gateway gets an ID Token with the
> Gateway client as the audience.
>
> When the Agent makes requests to the Gateway, the Gateway can use the ID
> Token to retrieve an ID-JAG for the upstream MCP AS. This ID-JAG will only
> identify the Gateway client, not the Agent itself. This would make the
> Gateway responsible for access control decisions & auditing, and it cuts
> off the IDP from observing per-Agent behavior - which undoes a lot of the
> benefits of ID-JAG in the first place.
>
> Would having the Gateway pass in the Agent's access token as an
> `actor_token` in the token exchange request to the IDP help here? That
> would give the IDP a mechanism to identify the Agent (and also bind both
> the Agent identity + Gateway identity within the ID-JAG). Actor tokens are
> deliberately out of scope of the ID-JAG spec, but they could be defined in
> a future profile.
>
> On Thu, Jul 23, 2026 at 3:58 AM morganLR <morganLR=
> 40proton.me@dmarc.ietf.org> wrote:
>
>> Eric,
>>
>> Good question, it is my understanding that the two paths you named do
>> different jobs, so I'd suggest both, in this order given the timing this
>> week.
>>
>> 1. GitHub issue against the ID-JAG repo, today if you can. That's the
>> right vehicle for the narrow question: does ID-JAG address this topology,
>> or is it out of scope by design?
>>
>> 2. The use-case record, for the broader point. The chairs have been clear
>> that use cases and requirements come before mechanism selection, and there
>> is an active collection effort (draft-chen-oauth-agent-authz-use-cases is
>> the current gathering point).
>>
>> 3. If you want it durable under your own name, a short individual
>> problem-statement I-D is always an option.
>>
>> Happy to look over the issue text before you file it if that's useful.
>>
>> Best,
>> Morgan
>> On Wednesday, July 22nd, 2026 at 2:12 PM, Eric Leleu <eric.leleu=
>> 40graviteesource.com@dmarc.ietf.org> wrote:
>>
>> Morgan, Karl,
>>
>> Thank you both for the detailed and thoughtful responses. I'll block out
>> time to properly go through the references you both pointed to.
>>
>> Morgan, one practical question on process: you mentioned this topology
>> deserves to be in the record the working group is building this week.
>> I'm not familiar with the actual procedure for that. Should I open a
>> GitHub issue against the ID-JAG repo, or write it up as a separate
>> use-case/problem statement?
>> If the latter, where should that go? Happy to follow whichever path is
>> expected.
>>
>> Thanks again,
>> Eric
>>
>> Le mer. 22 juil. 2026 à 18:44, Karl McGuinness <me@karlmcguinness.com> a
>> écrit :
>>
>>> Extending ID-JAG to support public clients is an open topic for
>>> discussion. I encourage you to read these issues and chime in with
>>> additional use cases, concerns, or feedback
>>>
>>>
>>> https://github.com/oauth-wg/oauth-identity-assertion-authz-grant/issues/85
>>>
>>> https://github.com/oauth-wg/oauth-identity-assertion-authz-grant/issues/113
>>>
>>> The gateway scenario you outlined is similar to one where folks need to
>>> make a second hop after exchanging the ID-JAG for an access token and no
>>> longer have access to the original identity assertion to obtain a new
>>> ID-JAG. I've been exploring this scenario as an identity continuation
>>> pattern (
>>> https://notes.karlmcguinness.com/notes/identity-continuation-assertion/)
>>> A key premise of ID-JAG is that re-subjecting across trust domains is a
>>> mint and not an attenuation (
>>> https://notes.karlmcguinness.com/notes/re-subjecting-is-a-mint-not-an-attenuation/
>>> ). This may not be relevant to your specific gateway deployment
>>> scenarios, but it is common in deployments where a gateway fronts existing
>>> SaaS apps for example.
>>>
>>> I'm not super happy with the solution I arrived at (
>>> https://mcguinness.github.io/draft-mcguinness-oauth-id-continuation-assertion/draft-mcguinness-oauth-id-continuation-assertion.html
>>> and for this reason I haven't submitted it yet as an I-D because it still
>>> needs workshopping. I'm sharing this only to see if it aligns with your use
>>> case. I expect smarter people will find better solutions as this particular
>>> solution isn't pretty.
>>>
>>> For scenarios that don't need re-subjecting then an attentuation based
>>> soluton may be attractive but that it outside the scope of the ID-JAG
>>> profile.
>>>
>>> -Karl
>>>
>>>
>>>
>>>
>>> On Wed, Jul 22, 2026 at 8:58 AM morganLR <morganLR=
>>> 40proton.me@dmarc.ietf.org> wrote:
>>>
>>>> Eric,
>>>>
>>>> The dilemma is real and I do not think you missed a mechanism. It is
>>>> worth naming why it arises structurally: an identity assertion is
>>>> audience-locked to the party it was issued to, and delegation through an
>>>> intermediary requires either re-minting at the issuer or a way for the
>>>> intermediary's participation to be first-class in the exchange. Section
>>>> 4.3.3 as written admits neither, so every gateway hop reproduces your
>>>> dilemma.
>>>>
>>>> Two resolution families exist, and the draft could name which it
>>>> intends.
>>>>
>>>> Within the current model, RFC 8693 already has the missing piece: the
>>>> actor_token. A composite exchange where the gateway authenticates as
>>>> itself, presents the agent's assertion as subject_token and its own
>>>> credential as actor_token, and the IdP applies the audience check to the
>>>> subject token's original audience while separately authorizing the actor as
>>>> a registered intermediary for that audience, resolves your topology without
>>>> new machinery. The cost is that the IdP must now hold policy about which
>>>> intermediaries may act for which clients, and the exchange remains a
>>>> per-upstream, per-hop round trip to the IdP: the gateway mints one ID-JAG
>>>> per upstream AS, on the critical path.
>>>>
>>>> The other family carries the delegation as a verifiable artifact
>>>> instead of re-minting it: the agent delegates narrowed authority to the
>>>> gateway in a form the upstream can verify directly against the original
>>>> issuer's key, so the intermediary attenuates rather than exchanges, and no
>>>> per-hop trip to the IdP exists. That property class (attenuation verifiable
>>>> from the artifact alone, no runtime callback to the issuing side,
>>>> possession bound at each hop) is what R1, R3, and R4 in
>>>> draft-reece-wimse-cross-org-delegation describe, and gateway aggregation is
>>>> among the cleanest motivating topologies for it.
>>>>
>>>> Either way, your topology deserves to be in the record the working
>>>> group is building this week: the chairs have asked for use cases and
>>>> problem statements before solutions, and agent-behind-gateway with a
>>>> public-client agent is arguably the most common deployment shape MCP has
>>>> produced. I would encourage writing it up exactly as you have here.
>>>>
>>>> Morgan
>>>>
>>>> On Wednesday, July 22nd, 2026 at 7:23 AM, Eric Leleu <eric.leleu=
>>>> 40graviteesource.com@dmarc.ietf.org> wrote:
>>>>
>>>> Hi all,
>>>>
>>>> I'd like to raise a topology question about the ID-JAG draft
>>>> (draft-ietf-oauth-identity-assertion-authz-grant) that I expect to come up
>>>> often as agentic/MCP deployments grow, and I don't think the current text
>>>> resolves it from my understanding.
>>>>
>>>> Topology Description:
>>>> ----------------------------
>>>>
>>>> - An AI coding agent (e.g. Claude Code) acts as an MCP Client. It is
>>>> registered at the enterprise IdP as a *public* client (native/CLI app,
>>>> PKCE, no client secret).
>>>> - The agent authenticates directly against the enterprise IdP. As per
>>>> OIDC Core, the resulting ID Token's `aud` is the agent's own client_id. In
>>>> the same flow the agent also obtains an access token whose
>>>> audience/resource is an MCP Gateway sitting in front of it.
>>>> - The MCP Gateway aggregates several upstream MCP servers. Each
>>>> upstream server is protected by its own Resource Authorization Server, and
>>>> each of those independently trusts the same enterprise IdP.
>>>> - Per ID-JAG, to reach a given upstream server the Gateway needs an
>>>> access token minted through the ID-JAG flow: Token Exchange at the IdP to
>>>> mint an ID-JAG (aud = upstream AS) and then execute JWT-Bearer redemption
>>>> at that AS.
>>>>
>>>> The conflict :
>>>> -----------------
>>>>
>>>> Section 4.3.3 [1], "IdP Token Exchange Processing Rules", requires that
>>>> when the subject_token presented in the Token Exchange call is an identity
>>>> assertion (ID Token), "the IdP MUST validate the assertion and MUST
>>>> validate that the audience of the assertion (e.g. the aud claim of the ID
>>>> Token or SAML Audience) matches the client_id of the client authentication
>>>> of the request". In the Gateway topology above, this rule creates a dilemma
>>>> where neither party can execute the exchange:
>>>>
>>>>
>>>> 1. The agent is the audience of the ID Token, but the agent has no
>>>> reason to call Token Exchange itself — it doesn't know which upstream
>>>> AS/audience a given MCP tool call needs, and as a public client it's also
>>>> not well positioned to be trusted with that capability directly. As defined
>>>> in the draft "this specification SHOULD only be supported for confidential
>>>> clients."
>>>> 2. The Gateway is the party that actually needs the ID-JAG (it knows
>>>> the target upstream AS), and it is the Gateway that would authenticate the
>>>> Token Exchange call. But the ID Token's `aud` is the agent's client_id, not
>>>> the Gateway's. Per the mandatory audience check above, the IdP must reject
>>>> that exchange no matter how the ID Token reaches the Gateway (forwarded by
>>>> the agent or otherwise).
>>>>
>>>>
>>>> From my understanding, neither party in this agent-to-gateway
>>>> architecture can legally execute the ID-JAG exchange under the current
>>>> specification.
>>>>
>>>>
>>>> Did I miss a mechanism already defined in the draft (or in
>>>> draft-ietf-oauth-identity-chaining) to handle this delegation/proxy pattern?
>>>> Is there ongoing work to address multi-hop or API Gateway patterns
>>>> where the identity assertion's audience differs from the calling proxy's
>>>> client_id?
>>>>
>>>>
>>>> Thanks,
>>>> Eric
>>>>
>>>>
>>>> [1]
>>>> https://datatracker.ietf.org/doc/html/draft-ietf-oauth-identity-assertion-authz-grant#name-processing-rules
>>>>
>>>> --
>>>>
>>>>
>>>>
>>>> Eric LELEU
>>>>
>>>> Staff Software Engineer
>>>>
>>>> E eric.leleu@graviteesource.com <your.name@graviteesource.com>
>>>>
>>>> Hold Nothing Back
>>>> <http://youtube.com/c/Graviteesource?sub_confirmation=1>
>>>> <https://www.linkedin.com/company/gravitee-io>
>>>>
>>>>
>>>> _______________________________________________
>>>> OAuth mailing list -- oauth@ietf.org
>>>> To unsubscribe send an email to oauth-leave@ietf.org
>>>>
>>>
>>
>> --
>>
>>
>>
>> Eric LELEU
>>
>> Staff Software Engineer / AM Teach Lead
>>
>> E eric.leleu@graviteesource.com <your.name@graviteesource.com>
>>
>> Hold Nothing Back
>> <http://youtube.com/c/Graviteesource?sub_confirmation=1>
>> <https://www.linkedin.com/company/gravitee-io>
>>
>>
>> _______________________________________________
>> OAuth mailing list -- oauth@ietf.org
>> To unsubscribe send an email to oauth-leave@ietf.org
>>
>
>

-- 




Eric LELEU

Staff Software Engineer / AM Tech Lead

E eric.leleu@graviteesource.com <your.name@graviteesource.com>

Hold Nothing Back
<http://youtube.com/c/Graviteesource?sub_confirmation=1>
<https://www.linkedin.com/company/gravitee-io>