[OAUTH-WG] Re: Comments on draft-gerber-oauth-deferred-token-response: delegation verifiability during the pending window
Frederik Krogsdal Jacobsen <frederik.krogsdal@idura.eu> Wed, 29 July 2026 07:06 UTC
Return-Path: <frederik.krogsdal@idura.eu>
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 5361D1203EE2D for <oauth@mail2.ietf.org>; Wed, 29 Jul 2026 00:06:43 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ietf.org; s=ietf1; t=1785308803; bh=l90PrmRpL+cuHHGMfJ07y/G0IQ5qf8dWNsYnyG75j24=; h=References:In-Reply-To:From:Date:Subject:To:Cc; b=DJQhPmP8ngaiMzIDSzSRCO+dd4zEnE5795XXpF2sBzIxQeUlQ7zRukMoNL34SnoaI C2I3Qg5uRPfXDX9lnZ5oeDHC+Uo0vfRxNmK/lqI5HN7AowJ9u81H6D28jOabIEGs3E wYe/V/2Hpaogd35LDCTUYzbB34kBi1bHtqafn94o=
X-Virus-Scanned: amavisd-new at ietf.org
X-Spam-Flag: NO
X-Spam-Score: -2.099
X-Spam-Level:
X-Spam-Status: No, score=-2.099 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] autolearn=ham autolearn_force=no
Authentication-Results: mail2.ietf.org (amavisd-new); dkim=pass (2048-bit key) header.d=idura.eu
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 YbR5796MDdKH for <oauth@mail2.ietf.org>; Wed, 29 Jul 2026 00:06:41 -0700 (PDT)
Received: from mail-ua1-x936.google.com (mail-ua1-x936.google.com [IPv6:2607:f8b0:4864:20::936]) (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 DC5F01203EE1E for <oauth@ietf.org>; Wed, 29 Jul 2026 00:06:40 -0700 (PDT)
Received: by mail-ua1-x936.google.com with SMTP id a1e0cc1a2514c-9690c99c917so198687241.2 for <oauth@ietf.org>; Wed, 29 Jul 2026 00:06:40 -0700 (PDT)
ARC-Seal: i=1; a=rsa-sha256; t=1785308800; cv=none; d=google.com; s=arc-20260327; b=KV5a8xxhL7/nbA+HzJ1xNEPeozNsjUwF+xW5t3BsZ2TGPDIh+8gli7fxEn8KOzyftn pqK8C0PyWSJSU72sZnDFY9FP8DwLKE5n2Pu++OuA6uJ88BtRVRiQmGxPAqQR+v1fheIk aPQG1rfC6EDM2d+3L8EtCEN3F7voomLc0xM//bT1izMM0fQkHccVMeOuVVD/gAennMlS 2wB35VFkBSODD7VS21MmXXm4wmABIkcQBJXXeCaf/ApKvSVqlwqOR14pUtZEqjUGEmAW LEibZbFAVOi22HWmPb/hRoBcTeR9IT/dQMdqe8vig4+ZN3lnUbfqY2YzKBXmuwvUJRBV K2QQ==
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=yQZE8A91Kuodn0w/S3J5mDr2PuV3mjJzltrUK4jQ/2Y=; fh=HHU3s27JMVeYyXI0Vp/Swm/0S063cq7sbCOM6xbmB7M=; b=q5PBPqdmdbw8MhAk6qdvdP/0Rv2deYsD4cpTUfG7BRBOtf42AVTX7s7C12Jj9ZZNz2 vk7EkgMIvWJGUWQQXGSzDZdt9FkyVmfRpAHzbP1kHYXLhSlfBmuSWRx3amdX8fTXEA4D CohL1aAn4R9kLrohZcIUszjUQ0CTQY1uChwufLO1LELj5xqIyfOoNjWbZ910M6wsx/sw +KVDjlOQ97ESU0jrQG2R5UNnUtC8c4cotZ8ZEshyZPAUXrrM2zEs0w2zgSh84nentdXQ 3wDhPdWUuQceRmJ+Rf3k1RXSy7AG6J/MXg2HsTbBFRIS/+C2vzQvI7+9lOkwU6Ldsv9z tcFw==; darn=ietf.org
ARC-Authentication-Results: i=1; mx.google.com; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=idura.eu; s=google; t=1785308800; x=1785913600; 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=yQZE8A91Kuodn0w/S3J5mDr2PuV3mjJzltrUK4jQ/2Y=; b=OQZPZnbHXULf75o27BBy5lIBFhHHKJjFcB51ZcOcI51KgzmpSezJtumA+7qU7m1GKY scyqZei4W05pY/LMK+5QmQPMdoy1GCmSfl3VlNyKH6ef9BPqiGHjMaH24zprxZ25w05w NmmmOZXVCPdepo/dQhSUYoGCXhfWLySz3ek0v3qk+Mn5N382XWky7v7IAvv2tlyG1dkc rXXDhxZzhab+ljX6Y8KrDaVmGxL9DzRq5rO5YZMSsuJ63j0LWz6lVvFvYZItHDMTNt2a +3qO/K22AzG8KjidCXh3VzKUiyoER5q+WQO08I56dBsGAZjd9w3xv3Oyi+UoE/eNqrYZ mpNQ==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1785308800; x=1785913600; 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=yQZE8A91Kuodn0w/S3J5mDr2PuV3mjJzltrUK4jQ/2Y=; b=FP6FRScHuxp6Rqs4S/fAhGdUT7wuMuK6s3ras9TeLgKO8iZSzIHH8l9z1O9k9EPtjc VoQRLLwzotnx2di1cEXTGuTM1fN/faXTGQXEmgEUKrpCzGGSAEJb5h3juL6uHmvmG5fc HwSIXrz+QOn7n6mmJcuaBmAHPS13oIyjITy5444O8FxEdNyO6/6u8EN7LAI+oX5v+wvA Ikm3gsfxSfCnvoLLTS46TnIJo9CGhzhC/HvVFypbGSaTxBcfKj5/R2cvbn4fEGMeLuIK qoRyo4qGcQfcMJoyIUjlKfOZZJ4PBonNku8kbSzjlrS4OpvzDm4arpmNeSghj0KeAZ6n 80yg==
X-Forwarded-Encrypted: i=1; AHgh+RpbInguxekiMe4SFALEqj8y1FkYb/WTeYbklSv+Iuf8PQoL+NTnKkXgrro1CFaeSiqNgD0t8A==@ietf.org
X-Gm-Message-State: AOJu0Yx3xPcDn0HZHHscmsx3durbuQP6imyeiaYPMrEdSUsGE1m8BJzz 5cTx0YdqiH/UDvDpKnd4y9vletM1v+FzryclP9tpU1sEsd3sWDN3ZclUyvLPiGngy46BGKA094u Ir/8+XEu+1FKS/8Jqqwbidykr4J/ksl0dxsdgvT2KPnb124V5Y1jn
X-Gm-Gg: AR+sD12Eic6JLpXwfVA56w0d8BRmAwJUPIfEbsix9QqcXFXY80sk+4DC2e54YrfVE4U 2yhZOFEcSqPXHeI+7ss0WXxXJSlQBy0hx4j7Hky4BK7d0tC0Pdex4M5KqccSmICgyOU5EBYhkKH 5e7W6ZvoHoGQNQiML3Bru95xZkTFb8XAaUmssoAW3UTSXqBkqQPreYGQw7+EzXd/bHL1S8xwCuA 8NlVkhPglP5C7r2siTy42k1t2js2UQ9eLSlCuSqE1itpTVsKI5XvCApujDcWDPQkEhqkVMxmtnR U/Td0YKFmGlzE6kJFb5z/fvk5qoSIVA28TOIVx8N8tz161Y=
X-Received: by 2002:a05:6102:915:b0:738:9bf0:f80c with SMTP id ada2fe7eead31-754a0380a11mr2649237137.9.1785308800029; Wed, 29 Jul 2026 00:06:40 -0700 (PDT)
MIME-Version: 1.0
References: <VTMwcLgAbFmakTQ6wuUa0xitP58EKmY9kHNArNvX0iBU2AQ1HX5MYfM5LOuWmEqgenryI0Yw85UZrZEuq_NKx-9y02hw9uLh_mOR8ef_89U=@scorautomation.com> <CAPVrLW0xuhY+nH1h6aMtOWx+zvziyLCe20ANeP_gtdA8DDM_mQ@mail.gmail.com> <XapSJwqIH2whfy0Y20oWjogltd3MrMAMr7xYebMvBpxt_NWaaD7aR3_cdKpxzB0a59-8DjKG6hXoXx5WEDv6otmAmhLGOwoqnqtt_NhY5Do=@scorautomation.com> <CAMQcq-Y4bVLziPAZfe4mhuMsAKpM+KS1hjqBjtiVmRBhdunxPg@mail.gmail.com> <XV2wiUuIgYHRSxpUWjKb8RMz75VNVtYwPkrN5DEILryIsAUpyDygiW4u0UfVjAPs_hsS2SE41hLBQIa6vlnDxbqqet7zaeZXbEmQfLABZFA=@scorautomation.com> <CAMQcq-baCtdjjvSDs6CoNW2JM5mz3PPW=q_OPWODLb6-5ux4iA@mail.gmail.com> <R1FhBZXmJhRu8gJTVD87xjDpT5uJC1ij_fmHH_XA38xxGFxB4fqiA3edt02GrgAARvayLHj1dbmYerP9JsY8Gln7dqvE_XEZtD-IWtlyw8A=@scorautomation.com>
In-Reply-To: <R1FhBZXmJhRu8gJTVD87xjDpT5uJC1ij_fmHH_XA38xxGFxB4fqiA3edt02GrgAARvayLHj1dbmYerP9JsY8Gln7dqvE_XEZtD-IWtlyw8A=@scorautomation.com>
From: Frederik Krogsdal Jacobsen <frederik.krogsdal@idura.eu>
Date: Wed, 29 Jul 2026 09:06:29 +0200
X-Gm-Features: AUfX_my3TcJIvXRhzbDikdU8y6YUah5GvYz2JWfE-64ham3CpK-cgTEjup2qPsA
Message-ID: <CAMQcq-Z26hWd09SUyrLMwzZeWRz2s=a9iNH83eim+TbcYSrGzg@mail.gmail.com>
To: mitch@scorautomation.com
Content-Type: multipart/alternative; boundary="000000000000d72a890657ba9815"
Message-ID-Hash: TPXKKR6SPEAFQNT44QXE5QI6X4GCLFQU
X-Message-ID-Hash: TPXKKR6SPEAFQNT44QXE5QI6X4GCLFQU
X-MailFrom: frederik.krogsdal@idura.eu
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: mitch=40scorautomation.com@dmarc.ietf.org, Karl McGuinness <me@karlmcguinness.com>, "oauth@ietf.org" <oauth@ietf.org>
X-Mailman-Version: 3.3.9rc6
Precedence: list
Subject: [OAUTH-WG] Re: Comments on draft-gerber-oauth-deferred-token-response: delegation verifiability during the pending window
List-Id: OAUTH WG <oauth.ietf.org>
Archived-At: <https://mailarchive.ietf.org/arch/msg/oauth/gii0XTdlXUWywZq5Y2NARIinnag>
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 Mitch,
I think this is another case where having a distinction between clients and
client instances would be helpful. But since there is currently no
standardized way to make that distinction, I get why you would need a way
to revoke the specific grant without revoking the entire permission set of
the client.
Good point about returning the delegation as a revokable credential. What's
not clear to me is where the revocation list would be hosted? It sounds
like the initiating entity/end user would need somewhere to host it outside
of the control of the client.
This has the same problem as the Delegate SD-JWT draft regarding
distribution of revocation information. Perhaps it would make sense to try
to define a common solution for this?
I think this is kind of orthogonal to DTR, so it probably fits into either
the Delegate SD-JWT draft or as a separate document.
Cheers,
Frederik
On Tue, 28 Jul 2026 at 13:50, <mitch@scorautomation.com> wrote:
> Frederik,
>
> Agreed on both counts. There is no initiating entity in the cron job case,
> and anything requiring a third party to contact the AS directly belongs in
> a profile rather than in DTR itself. I am not proposing a change to the
> draft.
>
> Where I would push back is on the binary between a client that behaves
> correctly and one that is compromised, because the agent deployments I am
> looking at do not sit at either pole.
>
> Two cases:
>
> 1. The initiating entity generally cannot revoke the client. When a user
> delegates a task to a hosted agent platform, the OAuth client is the
> platform's registration, not the user's. The user has no ability to revoke
> it, and should not, since revoking it would break every other tenant on
> that platform. The only authority the user can withdraw is their own grant.
> So "just revoke the client's permissions" is not available to the party who
> actually wants to stop the transaction.
>
> 2. Clients are not so much compromised as steered. A prompt injected agent
> misbehaves on one task while continuing to run others correctly. Revocation
> at client granularity is the wrong blast radius for that failure mode.
>
> Both point at the same thing. For a client serving many principals at
> once, the unit of authority is not the client, it is the individual
> delegation. And DTR is where that matters most, because deferral opens a
> window between request and issuance during which delegation state can
> change and the AS has no way to notice.
>
> On the objection that this requires a direct channel to the AS, I do not
> think it does. If the delegation is a signed credential with a published
> revocation status, the AS can check that status at issuance, in the same
> shape as a status list or OCSP. The initiating entity revokes its own
> credential, the AS checks again at issuance, and no new endpoint or new
> relationship between the initiating entity and the AS is needed.
>
> That is a profile, and I would be glad to write it up as one if there is
> interest, or to be told it is out of scope here.
>
> Mitch
>
>
>
>
> Sent from Proton Mail <https://proton.me/mail/home> for iOS.
>
>
> -------- Original Message --------
> On Tuesday, 07/28/26 at 05:21 Frederik Krogsdal Jacobsen <
> frederik.krogsdal@idura.eu> wrote:
>
> Hi Mitchell,
>
> Thanks for the additional explanation and use cases!
>
> The use cases you mention all have in common that they start with what I
> will call an "initiating entity" that wants to do something, then later
> changes its mind and is no longer in control of the client.
> Crucially, the initiating entity is not the same entity as the one that is
> deferred to (otherwise it could just deny the request in the deferral
> itself), and it is not the client (otherwise it could just use the
> cancellation endpoint already in DTR).
>
> In general there is no separate initiating entity though, as we also
> consider e.g. automated workflows (it might just be a cron job or something
> similar that does not have any kind of agency to change its mind).
> I think this would need to be defined in a higher-level profile, since it
> requires some way for the initiating entity to contact the AS directly,
> i.e. without involving the client.
>
> I'm also not sure it really makes sense to distinguish the client and the
> initiating entity using it. If your client is compromised, there's
> generally not a lot you can do to prevent it from misbehaving other than
> revoking its permissions.
> If we assume that the client is well-behaved, I think a lot of these could
> be solved by the client just giving the initiating entity the ability to
> cancel in its application code, which will then make the client cancel the
> flow.
> If the assumption is that the client is malicious, are there any cases
> where the initiating entity would cancel just the one transaction and not
> revoke the permissions of the client?
> I don't think I quite understand which threat model would lead to this
> outcome.
>
> Cheers,
> Frederik
>
> On Thu, 23 Jul 2026 at 17:42, <mitch@scorautomation.com> wrote:
>
>>
>> Hi Frederik,
>>
>> Both takeaways sound right to me, and a subject linked cancellation path
>> in particular would close the gap I was pointing at. Since you asked about
>> uses, here are three concrete scenarios from the agent deployment side, all
>> the same shape: the principal's intent changes during the pending window,
>> and today the principal has no path of their own.
>>
>> 1. Agent trading. A human authorizes an AI agent to execute a position on
>> a regulated prediction market. Approval lands at hour 2, the token redeems
>> at hour 12. At hour 7 conditions change and the human wants out. The
>> cancellation token doesn't help them, the client holds it, and a
>> compromised or simply autonomous agent has no reason to use it. CAEP
>> doesn't fire either, the account is fine, only the intent changed. The
>> human's only path today is whatever support surface the AS offers.
>>
>> 2. Enterprise delegation. An employee authorizes an agent to act in a
>> procurement negotiation, then is reassigned mid window. Account termination
>> would surface via SSF/CAEP, but voluntary reassignment or withdrawal is not
>> an account state event. The subject needs a first class way to say this
>> specific grant no longer stands.
>>
>> 3. Consumer purchases. A user approves an agent purchase flow, sleeps on
>> it, and changes their mind before the merchant's approval workflow
>> completes. Chargeback style remediation after redemption is expensive for
>> everyone. Cancellation by the subject before redemption is cheap.
>>
>> The common requirements these imply: the cancellation path must be
>> exercisable by the subject rather than the client, must not depend on the
>> client cooperating, and must be distinguishable from account level signals,
>> withdrawal of one grant, not a change in account state.
>>
>> On where it lives: I think you're right that the endpoint itself may be
>> profile territory, OIDC or otherwise, while DTR's job is to guarantee the
>> extension point exists, a defined way for the AS to check subject
>> cancellation state before releasing the token at redemption. That keeps the
>> substrate grant agnostic and lets profiles define how subject intent is
>> expressed. For what it's worth, the layered work Karl and I have been
>> discussing treats the subject's grant and its withdrawal as signed
>> artifacts verified alongside redemption, which would compose naturally with
>> a subject linked cancellation check in DTR: the endpoint handles the in
>> band case, the artifact handles verifiability across trust boundaries.
>> Happy to write up the use cases in more detail if that's useful for the
>> draft.
>>
>>
>> Mitchell Ross
>> SignedByMe
>>
>>
>>
>>
>>
>> -------- Original Message --------
>> On Thursday, 07/23/26 at 10:12 Frederik Krogsdal Jacobsen <
>> frederik.krogsdal@idura.eu> wrote:
>>
>> Hi Mitchell and Karl,
>>
>> Thanks for thinking this through.
>>
>> My takeaway from this is that there are two things we should think about
>> in DTR:
>>
>> 1. Make sure there are adequate extension points for SSF/CAEP
>> profiles.
>> 2. Consider supporting a separate cancellation endpoint, perhaps
>> linked to the subject itself. I think this may possibly be use-case
>> specific and belong in an OpenID Connect profile for DTR, but I'm not 100%
>> sure I understand the uses yet.
>>
>> Cheers,
>> Frederik
>>
>> On Wed, 22 Jul 2026 at 23:44, <mitch=40scorautomation.com@dmarc.ietf.org>
>> wrote:
>>
>>> Hi Karl,
>>>
>>> Thanks. I accept this reframing. Keeping the substrate grant agnostic
>>> and locating delegation authority in compositional profiles is the right
>>> architecture; my points are better read as requirements on the composition
>>> hooks than as changes to DTR, and on that reading DTR already leaves the
>>> room. The Actor Profile family is close to what I was hoping existed, actor
>>> signed per hop authority in Proofs especially. I'll study all three drafts
>>> properly.
>>>
>>> One observation on the remaining delta, which you flagged first: the
>>> composition currently routes exactly one question back through AS memory,
>>> freshness. The authority chain verifies against independent trust roots,
>>> but its currency delegates to introspection. So (1) and (2) from my
>>> original mail are addressed by composition, while (3) survives it: the
>>> principal still holds no first class revocation object, and withdrawal of
>>> intent routes through the issuer's surface.
>>>
>>> A companion status mechanism could take the same shape as the delegation
>>> itself: a principal signed status object published to a queryable status
>>> source, verified against the same trust root as the proof chain, with no
>>> issuer in the path. The tradeoff doesn't disappear, currency becomes cache
>>> bounded against the status source, essentially the status list tradeoff,
>>> but revocation becomes a principal operation, which is what closes point
>>> (3). The status source could be any of the shapes already in this thread: a
>>> status list, a federation endpoint, or another queryable transport. The
>>> property that matters is that publication is permissionless for the
>>> principal.
>>>
>>> On your request for a reference: SignedByMe (where I work) has built a
>>> system for AI agent delegation that implements one instantiation of this
>>> pattern, a principal signed delegation artifact, a principal published
>>> revocation object, and verifier side checking of both. I'm preparing a
>>> technical writeup with a JOSE serialization and will share it with the list
>>> shortly so there's something concrete to compare against Proofs. We're also
>>> evaluating DTR's deferral semantics for our own async approval flow and
>>> would report implementation experience back to the list if that
>>> materializes.
>>>
>>> I'd welcome a follow up conversation on whether a principal published
>>> status mechanism is the right follow on to Proofs, and where that work
>>> would live.
>>>
>>> Best,
>>> Mitchell Ross
>>>
>>>
>>>
>>> On Wednesday, July 22nd, 2026 at 12:56 AM, Karl McGuinness <
>>> me@karlmcguinness.com> wrote:
>>>
>>> Hi Mitchell,
>>>
>>> Thanks for raising this concern. My read is that your three points are
>>> real and that they land at the composition layer above DTR rather than in
>>> DTR itself. DTR is designed as a transport substrate; the
>>> delegation-authority questions layer on top rather than modify it.
>>>
>>> DTR's job is the async transport: request, defer, poll, redeem, with
>>> sender-constraining and cancellation. It deliberately does not define what
>>> authority the deferral code represents, how that authority is expressed, or
>>> how it's verified beyond the DPoP key binding. That's a design choice IMHO:
>>> keeping the transport grant-agnostic lets it carry approval flows whose
>>> credential shapes and verification models differ, without the substrate
>>> needing to know about them.
>>>
>>> Your three concerns are all credential-shape and verification-model
>>> concerns: (1) resolves to "make the delegation a signed artifact," (2) to
>>> "make authority verifiable independently of AS state," and (3) partly to
>>> "make revocation an artifact-holder operation." None require DTR to change;
>>> they require the substrate to leave room for compositional profiles to
>>> define signed delegation artifacts, principal-controlled key material, and
>>> independent revocation surfaces. That's the pattern the substrate is
>>> designed for.
>>>
>>> *Existence proof: the Actor Profile family*
>>>
>>> I've been publishing an actor-side delegation family that layers this
>>> kind of authority chain on top of OAuth token issuance (not specifically
>>> DTR, but structurally compatible):
>>>
>>> - draft-mcguinness-oauth-actor-profile
>>> <https://datatracker.ietf.org/doc/draft-mcguinness-oauth-actor-profile/> defines
>>> a visible act chain for delegation hops.
>>> - draft-mcguinness-oauth-actor-receipts
>>> <https://datatracker.ietf.org/doc/draft-mcguinness-oauth-actor-receipts/> adds
>>> AS-signed per-hop provenance.
>>> - draft-mcguinness-oauth-actor-proofs
>>> <https://datatracker.ietf.org/doc/draft-mcguinness-oauth-actor-proofs/> adds
>>> actor-signed per-hop authority.
>>>
>>> Mapped to your requirements: the principal signs an Actor Proof carrying
>>> the target binding ("scopes") and JWT exp ("expiry"). At redemption,
>>> the client polls with the deferral_code and a DPoP proof (per DTR
>>> §5.6); the resource server independently validates the token signature
>>> (issuer trust), the DPoP proof (current-hop possession), and the
>>> actor-signature chain (delegation authority) against distinct trust roots.
>>> Proofs travel alongside the OAuth request and are preserved into the issued
>>> token, or are returned via introspection for opaque tokens. Delegation
>>> authority is verified as a signature chain, not by consulting AS memory.
>>>
>>> Your "revocation handle" is the gap I flagged: the current Proofs draft
>>> explicitly places per-proof online revocation outside its scope and
>>> delegates freshness to AS introspection. A companion status mechanism would
>>> close it, but that's follow-on work.
>>>
>>> Other compositional shapes are equally viable: OpenID Federation entity
>>> statements offer a different lens on the same problem, and verifiable
>>> credential approaches offer another. On the AuthZEN interop point you
>>> raised, AROP (openid/authzen#531
>>> <https://github.com/openid/authzen/pull/531>) is a published
>>> composition of DTR + RAR + ARAP for AuthZEN-driven access requests, a
>>> concrete working example of the same composability. The specific choice of
>>> profile matters less than the substrate being composable enough for
>>> multiple viable answers to exist. For DTR itself, the *interesting
>>> question is whether the composition hooks are open, not which profile is
>>> picked*.
>>>
>>> *Why DTR already accommodates this*
>>>
>>> DTR doesn't restrict originating-request parameters (those are the
>>> underlying grant type's rules) and doesn't shape the token issued in the
>>> polling response (that's the issuing profile's job). A profile carrying a
>>> signed delegation via RAR (RFC 9396
>>> <https://datatracker.ietf.org/doc/html/rfc9396>) authorization_details or
>>> a dedicated parameter fits on the request today, and the AS can embed the
>>> delegation as a claim in the issued token, or expose it via introspection
>>> for opaque tokens. No DTR changes required. The substrate posture that
>>> makes DTR grant-agnostic is what makes it composable at both ends.
>>>
>>> Happy to dig into this as a follow-up conversation. If you have other
>>> delegation-artifact work you think is useful for your concerns, I'd welcome
>>> the reference so I can compare.
>>>
>>> -Karl
>>>
>>>
>>> _______________________________________________
>>> OAuth mailing list -- oauth@ietf.org
>>> To unsubscribe send an email to oauth-leave@ietf.org
>>>
>>
- [OAUTH-WG] Comments on draft-gerber-oauth-deferre… mitch
- [OAUTH-WG] Re: Comments on draft-gerber-oauth-def… Karl McGuinness
- [OAUTH-WG] Re: Comments on draft-gerber-oauth-def… mitch
- [OAUTH-WG] Re: Comments on draft-gerber-oauth-def… Frederik Krogsdal Jacobsen
- [OAUTH-WG] Re: Comments on draft-gerber-oauth-def… mitch
- [OAUTH-WG] Re: Comments on draft-gerber-oauth-def… Frederik Krogsdal Jacobsen
- [OAUTH-WG] Re: Comments on draft-gerber-oauth-def… mitch
- [OAUTH-WG] Re: Comments on draft-gerber-oauth-def… Frederik Krogsdal Jacobsen
- [OAUTH-WG] Re: Comments on draft-gerber-oauth-def… Mohamad Khalil Yossif
- [OAUTH-WG] Re: Comments on draft-gerber-oauth-def… Frederik Krogsdal Jacobsen
- [OAUTH-WG] Re: Comments on draft-gerber-oauth-def… Mohamad Khalil Yossif