[OAUTH-WG] New I-D: Identity Continuation Assertion for OAuth 2.0 Token Exchange (request for review)
Karl McGuinness <me@karlmcguinness.com> Tue, 04 August 2026 23:03 UTC
Return-Path: <me@karlmcguinness.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 430B5123BA174 for <oauth@mail2.ietf.org>; Tue, 4 Aug 2026 16:03:42 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ietf.org; s=ietf1; t=1785884622; bh=4W7J5KuhXe0k792Zce3r6+8EmDIOR+3MX9jMl7Cq9r0=; h=References:In-Reply-To:From:Date:Subject:To; b=ECSxkPeYgYmpa6VU6X2tCzEqBXEoBUTRzARNzX3w+6dZWyO8RwFNCHnJcVVXvOEjC BWYFT64RNquyFy473wGYUtPv4NUb3Q0PWwqUXw2cGGsyDTxpRw2Szf1fzXHaKJiMBy zodSfzUUjpZEVesRaAPPrjJNHZVaHY5D8J3SrqzE=
X-Virus-Scanned: amavisd-new at ietf.org
X-Spam-Flag: NO
X-Spam-Score: -1.839
X-Spam-Level:
X-Spam-Status: No, score=-1.839 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, HTML_OBFUSCATE_05_10=0.26, 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=karlmcguinness.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 slGtvXqzAefZ for <oauth@mail2.ietf.org>; Tue, 4 Aug 2026 16:03:41 -0700 (PDT)
Received: from mail-wr1-x42f.google.com (mail-wr1-x42f.google.com [IPv6:2a00:1450:4864:20::42f]) (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 64C7E123BA16D for <oauth@ietf.org>; Tue, 4 Aug 2026 16:03:41 -0700 (PDT)
Received: by mail-wr1-x42f.google.com with SMTP id ffacd0b85a97d-47f904e80eeso259435f8f.1 for <oauth@ietf.org>; Tue, 04 Aug 2026 16:03:41 -0700 (PDT)
ARC-Seal: i=1; a=rsa-sha256; t=1785884620; cv=none; d=google.com; s=arc-20260327; b=Pvvk2Qx6r3dwCFdMtZ+QH3J8oR6oo4bHstIuMaJPJJT1vEIo6LiZhmCeJ5ae7tkGte VpwN9mgGcmIvuHOf0MGGKeP5Cai2EtOzT5XQ95prCRh4Cao6io9V7SqhOvGb7KKxSUj1 8O0ZYYmsyZ8oVjhTBTgA110pqy4QrfM//s34eJBE/yPYcSXCZrB9ROS/eE2yylEy9Q2n bQ3wh2FpnurpO6sA2raDE5lPkclM+/aabTRyq1bkdW4FYqO5z8yIhynT6RQtvUR1Xwon MyQhIShgPg1MSvGAsbSMZ2vqQgcG4rbSoJwxdXf0vFNrJsAN29o37hwe4ezQ2fWPl/72 TTgQ==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20260327; h=to:subject:message-id:date:from:in-reply-to:references:mime-version :dkim-signature; bh=a0cy3IUliZbZKSRC9wo0NhXd2fk5q+sJGcYAbMBs6BM=; fh=HRwJNtTTtPgtfgvXyPaPq+Te1JrkxlJZMfmgN30AIzQ=; b=K8as5VXACDz2bZHAyijXWZgaVgq4C1C/UsZYHiwaPEIscMm2J5jh5T8UdFCriIxl4J vtg/Z+tt7I7JBUdjQX+1MDGdfJdJ7aYO8C8cTFe08rCiRqjFui0r/chyh7BZm5smGsUF mA1SEdwJC4GLPSqF3tzIBVo/frjRgrfy7UG4b0n8GaL7Wf1BSYo2njG/SCmuCd6s0ZrO Tdv3Zbv54Mer1rpHJUNP9wYwWLvVwHZNhGCeC7boxWgjm2jR3YUjPCZgzQ7CZwDBDaf+ E0Yl0TEqWxQuOyVrWGCe6RL54l4kfNe/ufP7iTzZOhWlH5Fq4HupWilBvk8n+41UhIEt sJZQ==; darn=ietf.org
ARC-Authentication-Results: i=1; mx.google.com; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=karlmcguinness.com; s=google; t=1785884620; x=1786489420; darn=ietf.org; h=content-type:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to :content-type; bh=a0cy3IUliZbZKSRC9wo0NhXd2fk5q+sJGcYAbMBs6BM=; b=Kmiby/haDqv8DpZl8+hOmvTiK2ytzA3AdmCH4/xlJRzwqVgXjYWlHhC8gCk2mgEK1O Fh66o2yluANqkS0WGWosEMREaqu4DGv6Hm6TU6R51nzoyefNsgmz80E8I8bBI8mjkgmA CgkzJJWNno6iFpVAL28ru9pzro+mMl5g8v8OBpgO9zN7W6tb53FokhxUqO60CaW0nqAN Y+CIsBIkwvXurdikSi0iShptL/OkXHtl6y4vjrGQ+4TZNz/EaZjr78CZSBmTnIkhiyxs omUrSsV3PGtR8+nJc9N1N5WFPeeRAToF8q+IufDbqNSakKwLBk7uxKozQ1t2LKzXOFoJ rwPg==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1785884620; x=1786489420; h=content-type: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=a0cy3IUliZbZKSRC9wo0NhXd2fk5q+sJGcYAbMBs6BM=; b=Doeu9E4/dj7Ju1OKY3TPpwKS2RsnIQjDiv3lQrf5E/xVX4osbTyUlusj4bSAilBywB 2H3aUeRYCWkrxFfsTBSWgnwAzLj0ZrXtACm+AWlrodgRjMAlQuJ2/B/MVCIKfMgt3kuP E7f5m/TBrIvUpWGHdW2fe/zc3/ZkTpLpTL2rNAJP05NjNh4DrBS675W59CNV+IT4q9ro W4IFih+f3lYxX1IR56uwHolZ+wAFl57zaoISGOGmYEsZk690Ubp1SBUSVH4bMpS1y2Un PUatJ2rk85wVuiF+NKGCiDCHVQLPp8IP8mPX5gZjHQVJIfG1B5cGa/7SZkpc6N9bBmOU 6meQ==
X-Gm-Message-State: AOJu0YxZj3VCtz0sRIMWLIJ0a/vlP82Lyl7JEXlTu6rdJFKx7X71EgfJ MN1INJ6xavM33Dc80n2Xt6hH6XT5OR5X4vnxa6olXhMgJRc1wVYiVrKyA8568klhQQDbGrB/CHV JL/FJvP4UHxlzc5dONoHw+Rk3wRGY+WXNA8BB7IpS2d+ekwuYsDEYxracoQ==
X-Gm-Gg: AR+sD11MWhUqcF0gVddFUyv4XBUcxD0EbgNY/O2kTO6Yn5NMQDV+3D4urUlp9jolWuc K7TRKcrbAtj8CC2goxh6fHQvPbEoZIWKxMEJX2O0nrq8gsQubq2784PK72pBHwUpQocGtnu5NYW bLisqGRLbc3HWTbLBBLEiGPdlRM73tq6S2dxKweB50+vSbBbmh2OZchq2Qg8FnJLZWWpy9yPwiQ SCaNwM2gV3H/dg87HEGZA/nkgU8Oo+o9yoP7z1lp/WtpfdVdCwUJKgYqlYedizs+6duWwpkRAfW IYvrnFl3GHR79zCkQEu1jPIhvOCE+1kfyG+IsQHmbc+1GCw8STt5fPUIl8/Bil0xJmQQDeWOZtY tj7BYaBMnR8yXpwynXrFYeoKztbf9QiPyjUv/h4jn/OH4TNtGZeySYtOY71puLoueCbo80LmeiK 1j8X8b0TNIlg==
X-Received: by 2002:a05:6000:1208:b0:47f:6fe0:294a with SMTP id ffacd0b85a97d-47fec62b8d5mr3067426f8f.23.1785884620312; Tue, 04 Aug 2026 16:03:40 -0700 (PDT)
MIME-Version: 1.0
References: <178577782564.1908637.17541848751068279521@dt-datatracker-d4d6ff9d9-fsx7d>
In-Reply-To: <178577782564.1908637.17541848751068279521@dt-datatracker-d4d6ff9d9-fsx7d>
From: Karl McGuinness <me@karlmcguinness.com>
Date: Tue, 04 Aug 2026 16:03:28 -0700
X-Gm-Features: AUfX_mwhBmAm-18aKc1C_LssI_wgE6rq9tDIuW0YliGHBKUUkQgv0aUGAQrYQ0Y
Message-ID: <CAPVrLW1dPqf+B=r7FaKY3ysZUwzCGt=2w8ju-_cU9yeSqC21-g@mail.gmail.com>
To: oauth@ietf.org
Content-Type: multipart/alternative; boundary="00000000000067616a065840aae2"
Message-ID-Hash: QH4CZBD2UY5UG7HW7UD2WJXNAXNJROUX
X-Message-ID-Hash: QH4CZBD2UY5UG7HW7UD2WJXNAXNJROUX
X-MailFrom: me@karlmcguinness.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
X-Mailman-Version: 3.3.9rc6
Precedence: list
Subject: [OAUTH-WG] New I-D: Identity Continuation Assertion for OAuth 2.0 Token Exchange (request for review)
List-Id: OAUTH WG <oauth.ietf.org>
Archived-At: <https://mailarchive.ietf.org/arch/msg/oauth/Zk2xUUcoauU4tLShl-82l2YkR4k>
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 all, I've posted a new individual Internet-Draft, Identity Continuation Assertion <https://datatracker.ietf.org/doc/draft-mcguinness-oauth-id-continuation-assertion/> (ICA), and would welcome the group's review. Agents and long-running jobs increasingly keep working on a user's behalf, calling one service after another across trust domains. Often the user is not present at the hop to authorize the next step. Sometimes they have gone offline. Other times they are online, but a downstream service-to-service call has no user-agent in the path. Either way, redirecting the user's browser to the identity provider for a fresh grant is not an option. This came up in the ID-JAG discussion of public agents behind an API gateway or proxy (issue #114 <https://github.com/oauth-wg/oauth-identity-assertion-authz-grant/issues/114>). I had sketched the idea earlier, framing re-subjecting across a boundary as a mint rather than an attenuation <https://notes.karlmcguinness.com/notes/the-identity-continuation-assertion/>, and that discussion suggested writing it up. At such a hop, the service continuing the work holds none of the user's credentials. Worse, where the identity provider gives each service its own pairwise identifier for the user, a downstream service cannot even name the user to the next one. The tempting shortcut is to keep a token and replay it, or to hand an intermediary a broad, long-lived credential. Both recreate the classic confused-deputy problem. A shared or public component now holds standing authority it can be tricked into using for the wrong user, the wrong resource, or beyond its task. The receiving service, seeing a valid token, cannot tell legitimate continuation from misuse. Instead of carrying a token forward, ICA has each boundary ask the identity provider to mint a fresh one. A service presents a short-lived, sender-constrained (DPoP-bound) assertion as the subject_token in an RFC 8693 token exchange. The identity provider validates it and issues the next token, an audience-scoped ID-JAG <https://datatracker.ietf.org/doc/draft-ietf-oauth-identity-assertion-authz-grant/>, for the downstream service. The link between hops is a non-bearer handle that the receiving service binds to its own authorization state, so a copied handle is useless to anyone else. Chains root in a grant the identity provider already holds for the user, such as a refresh token or an OIDC or SAML session. Each hop is then a fresh authorization decision, bounded by what was authorized up front, not an inherited standing permission. For the client that starts a chain, nothing changes. It obtains an ordinary first ID-JAG, with no ICA-specific machinery. The new work falls on the identity provider and any receiving service that chooses to support continuation, so adoption is incremental. ICA is meant to complement related efforts, not compete with them. draft-zhu-oauth-async-delegation <https://datatracker.ietf.org/doc/draft-zhu-oauth-async-delegation/> (Delegated Refresh Tokens) keeps one authorization server minting for the same user from a stored, rotating refresh token. ICA handles the different case where the user is unchanged but the audience changes. The two compose, because a delegated refresh token can be the grant a continuation chain roots in. Several drafts already describe how to represent and verify the chain of actors a delegated request passes through. These include draft-mcguinness-oauth-actor-profile <https://datatracker.ietf.org/doc/draft-mcguinness-oauth-actor-profile/> with its actor receipts and actor proofs companions, and draft-mw-oauth-actor-chain <https://datatracker.ietf.org/doc/draft-mw-oauth-actor-chain/>. They build on RFC 8693's act claim. But act, and the actor_token that produces it, convey the actor's identity as a bearer assertion, so AFAIK none defines how the actor making a request proves possession of its own key. ICA has to take a position on that, since it binds each assertion to the calling actor's own key. These efforts would benefit from a shared approach rather than each solving it separately, and I would welcome discussion on whether that is worth doing and where it should live. I would value the group's input on a few specific questions. - Is a fresh mint at the identity provider at every boundary the right model, or is that per-hop round-trip too costly for some deployments? - Acceptance of a hop is attested within the accepting domain rather than verified by the identity provider, so is that trust boundary acceptable, and how should it be hardened? - And do others see this same cross-domain continuation gap in agentic or multi-hop deployments, or are they solving it another way? Thanks, Karl McGuinness ---------- Forwarded message --------- From: <internet-drafts@ietf.org> Date: Mon, Aug 3, 2026 at 10:23 AM Subject: New Version Notification for draft-mcguinness-oauth-id-continuation-assertion-00.txt To: Karl McGuinness <public@karlmcguinness.com> A new version of Internet-Draft draft-mcguinness-oauth-id-continuation-assertion-00.txt has been successfully submitted by Karl McGuinness and posted to the IETF repository. Name: draft-mcguinness-oauth-id-continuation-assertion Revision: 00 Title: Identity Continuation Assertion for OAuth 2.0 Token Exchange Date: 2026-08-03 Group: Individual Submission Pages: 60 URL: https://www.ietf.org/archive/id/draft-mcguinness-oauth-id-continuation-assertion-00.txt Status: https://datatracker.ietf.org/doc/draft-mcguinness-oauth-id-continuation-assertion/ HTML: https://www.ietf.org/archive/id/draft-mcguinness-oauth-id-continuation-assertion-00.html HTMLized: https://datatracker.ietf.org/doc/html/draft-mcguinness-oauth-id-continuation-assertion Abstract: This document defines the Identity Continuation Assertion, a short- lived, sender-constrained JWT used as an OAuth 2.0 Token Exchange subject token. It lets an Identity Provider (IdP) issue an onward Identity Assertion JWT Authorization Grant (ID-JAG) when a user's request crosses service boundaries after the user is no longer present. The profile targets deployments in which several Resource Authorization Servers trust one IdP and use audience-local subject identifiers that only the IdP can resolve. It complements offline attenuation for intra-domain fan-out that does not change the subject. The IETF Secretariat
- [OAUTH-WG] New I-D: Identity Continuation Asserti… Karl McGuinness
- [OAUTH-WG] Re: New I-D: Identity Continuation Ass… Mohamad Khalil Yossif
- [OAUTH-WG] Re: New I-D: Identity Continuation Ass… Karl McGuinness
- [OAUTH-WG] Re: New I-D: Identity Continuation Ass… Mohamad Khalil Yossif