[OAUTH-WG] Re: New I-D: Identity Continuation Assertion for OAuth 2.0 Token Exchange (request for review)

Karl McGuinness <me@karlmcguinness.com> Wed, 05 August 2026 17:30 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 A5F5A1243DE72 for <oauth@mail2.ietf.org>; Wed, 5 Aug 2026 10:30:24 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ietf.org; s=ietf1; t=1785951024; bh=hvNV7GBaA9y8qB841NDPUgAryqZVFKMkVoPVfBzkrcY=; h=References:In-Reply-To:From:Date:Subject:To:Cc; b=Dq25e3GShRPyHs2VAqTd0ovLAKEWKfTqo5EBHKlcF4thaV9GD+IXNAhHah6DIAuDK mdOKpUgYpB8Q6q21SzRs1aMZwaMPAmC/Ygn16UXxWSMDpy8rNfqaDev6Z3WLFu73XN UU9M8D5ohFPJxpp0BWu6y39Bt3e5DAp8Gj8FK5cc=
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 FqAZjwDvmhK2 for <oauth@mail2.ietf.org>; Wed, 5 Aug 2026 10:30:24 -0700 (PDT)
Received: from mail-wm1-x32c.google.com (mail-wm1-x32c.google.com [IPv6:2a00:1450:4864:20::32c]) (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 EF0D41243DE6B for <oauth@ietf.org>; Wed, 5 Aug 2026 10:30:23 -0700 (PDT)
Received: by mail-wm1-x32c.google.com with SMTP id 5b1f17b1804b1-4953e04ef16so12297975e9.2 for <oauth@ietf.org>; Wed, 05 Aug 2026 10:30:23 -0700 (PDT)
ARC-Seal: i=1; a=rsa-sha256; t=1785951023; cv=none; d=google.com; s=arc-20260327; b=KiGZ1uFv+jxth9lNWYRecYVY+xLP866UGE+OiQt0aG/h92sU659R9Oqnd276gVnscg ObFQttY47Av3cByxDV00zQenMq5j9IDE9s2sF6gqN1XfN0H0D42LS7oKCYLCr9LHVlQI ACHWT2PapxNwQmEH5S+7Gj7mVsqNvbVodytkbIESnA//Rc8/vKmwLs+AY5Hd/MF2/gpT krLirI5T9B2Mo6TtMhbFvtOWpx8mAVnIUqONtroU+plvT31dNDS6HBpsB8/z1g5YRzUe ZlspinIhVMsVH3WFeqbsY0OzLatGPC+E9eIZQ3ji4osytvLQ2M3IaqSe+4e7/IA+VFZ+ eSyg==
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=A3EvbKiPqhGrwlr5E6cj9EL9VDAMCxcV3ZnL/JZGWoM=; fh=k4gO8uJPLEl6D+T1nqyexptLzPWcziatZ35ElX0FcYM=; b=CLDepqYuxAgySqDmS3mthLIaANz6ogIsy0pANIi7UMK2h6fJYXRW0cwzDrWrXJ0/+c zqO3iDmAr0G1/C+8nSsmZlerAtggvZFUGDiIf7uPY+VsRAnG34PW98HrPWLmpvcGteOq sMzaMY8WpsOc9NFAUYeVaz0RqZ9R2T6WXtSXD+Rdos4L285YuL2EbKW4pCbMK5LturDl 4Ysc8DHBrfaNoVlrRuT/dueUl4E8NLQYLHyggb9Y8NPonUw8Fb1mHzOPrnFcY3FyDTpX Tt3VENZBjOwXjuG5h7f6nARADjZX9WZxGrfV6aVC4kaVsKO/bNnKaEunUL0R6BCjxkvq BJ1g==; 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=1785951023; x=1786555823; 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=A3EvbKiPqhGrwlr5E6cj9EL9VDAMCxcV3ZnL/JZGWoM=; b=UUsZBZujiJ+GCbuZ/Zg+n3ci6fu9eYA8TLjW89Pbep+v/sDskCYy4IXpAG1ARq2kOa T8sPYQ0AIWKQTjrcFtp625BHMROE2qJZEXIqbSs3pKUz73JneWwwfYoHLiQPg7N2p5Bd FPioJhsYwxK3QtmoSYpYfxgIvcux+XpLhf2cSgzT803sf+PFWAMsCbAzNGF+nm9MkF9q dxrMs0Rfjfhqgt1Uv9FOYlhsf5yjrA1MPBNtGVHh/604XkZ2A2kEkkoV96/H3Gvp8AgI yPFNbLuJzCsmADtPqLpf+StHESWdA7w53+moZZvfZTo/ge2KwLcqGKdj+52VqancYbuc ymJw==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1785951023; x=1786555823; 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=A3EvbKiPqhGrwlr5E6cj9EL9VDAMCxcV3ZnL/JZGWoM=; b=hfcW13/IB5wYnWqoQvzYec+N9Zlj+yqPLUYWC+8atKtumx3tb8X69N5AIdwBJUPvOu UuLQYS2EzyIFctuZXy44vROkSrdPU+j5ypw+FQSJjSY6Cv3K4UvHXWDvmp/2dODx7zPf hTmLiZhOEsm3d6KHBnKUtDetcxNcr+2mE7Sn3dPiCBlrH05gjsR4HKGacnqs5D6MpgbY yIJxQqDzb1Tbd4hi14wHWSoB8mCdDqegrr8XW3vdl46F0rMaWHISqN++Pv2e0OjacAFA dm6Bt86FkjhvMKyZkUupmzbnVtWyFrOOH0fCJo36PYy/jSca+e5F0asCswxCi6LTvqFy bqig==
X-Gm-Message-State: AOJu0Yx2jBtpOV3CbccqFy1zrH0PkPBrEvHr5TD11/j469VK+uNqT/2/ B6vqdAxDK8m3V+HgxXHoy369st4SekwtPpweHvZ+QdnFoLpSj5EMPzwUCh+J3FMANaapu4pq66v XsT28988EjN9q/oQp9+MVGH0ZsX10YW5SEVnRIm6J2nBeQYSHklt+K17+lA==
X-Gm-Gg: AR+sD13+UPvMLummNndTk22KGsNd4p2SYVz9tsXM5LOtZ5KY0nFxk69b1+gk6FRynzF 6eDpuXWJxYbrbbhSEe36DgzPDWeDkbwHssW7UResvefNQfY6nDB71nuWCtJFUM+h26DyM05MNsI k+wc82S6PBe14/YKeWF+4oNsY/qP2KDpJ+xHoZMfQUx+QV1GPg8TW+PIxK9NMs1snOEkHQBys42 uYlLnitfPsf9n2H0tNPUVed56eY7sDz9Qwgxka5mSraaat1s2JQ4Rf447REy/lTHclyDzVe5jTO zrHG28//Bhg6l7iDmF2aCfOsi1B69+o2nNelBTGgYpaETUyx+ukfXI+eVadTX6krih7TBzxylnZ gy+HsATMNJgmOMM5v6tgxi5uk24nIVb/GqsQqECtd+UH94g5A9G1V8Fed0ixxrHeENnJuiVzmBB Cg27aq2a47cg==
X-Received: by 2002:a05:600c:c490:b0:493:c337:db0e with SMTP id 5b1f17b1804b1-4994e7ece20mr111597745e9.18.1785951022590; Wed, 05 Aug 2026 10:30:22 -0700 (PDT)
MIME-Version: 1.0
References: <3E646F58-52F1-4FA7-B875-47528D43D1AD@yuthent.com>
In-Reply-To: <3E646F58-52F1-4FA7-B875-47528D43D1AD@yuthent.com>
From: Karl McGuinness <me@karlmcguinness.com>
Date: Wed, 05 Aug 2026 10:30:10 -0700
X-Gm-Features: AUfX_mx-KZb46vPypOsrA6dASw7pMaD6wUnZz3mDY-yCAcHCCuYJIRj8j4xNdsQ
Message-ID: <CAPVrLW15O0ZC1N8hFNij1Oxv4rzpi5HBCY4=papOCNiFQ4Rj8w@mail.gmail.com>
To: Mohamad Khalil Yossif <mohamad@yuthent.com>
Content-Type: multipart/alternative; boundary="00000000000049bd6b0658502028"
Message-ID-Hash: SVVNSWLLYK46VMEJWP6MTVGKSVKIJ5IB
X-Message-ID-Hash: SVVNSWLLYK46VMEJWP6MTVGKSVKIJ5IB
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
CC: oauth@ietf.org
X-Mailman-Version: 3.3.9rc6
Precedence: list
Subject: [OAUTH-WG] Re: 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/6Cy-d3fDPFMUnMAbuWxbCo0EZTY>
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>

Mohamad,

Thank you for this, and no rush on the revision. I'm glad George connected
the threads. Your two questions draw the boundary more sharply than my
draft currently does.

The short version first: identity continuity is in scope for ICA.
Authorization continuity, carrying the decision itself forward, is out of
scope by design. Execution-time evidence was never in ICA's frame at all.
Each belongs in its own artifact. I'll make that boundary explicit in the
next revision so there is something stable to cite.

On your first question, the answer depends on which artifact you mean. The
Identity Continuation Assertion, the artifact a service presents at the
mint, carries no scopes, action classes, or constraint sets. The ID-JAGs on
either side of it can carry scopes and authorization_details, both the
grant that starts a chain and the one each mint produces, but those are the
identity provider's fresh per-hop decisions, not authorization state
carried forward from the upstream domain. That's the choice behind "a mint
rather than an attenuation": there is nothing in the assertion to
attenuate, so every hop is a fresh mint. Section 4 of the draft says it
directly. The mint is still bounded by the grant the chain roots in, the
identity provider's policy on who may continue, and revocation.

On your second question, I keep coming back to SSO, because it is the core
model behind ID-JAG and Cross App Access (XAA). Federation has always made
this split: the assertion carries who the user is into a new domain,
sometimes with attributes that inform the local decision, and the receiving
domain decides what the user may do there. The assertion is an input to
that decision, not the decision itself. ICA extends that split to the hops
a redirect cannot reach. Chains literally root in a grant or session the
identity provider already holds, the OIDC or SAML session itself among
them, and each mint continues the identity, with permissions decided fresh
at every hop. The identity provider is still not a bystander: it gates each
mint and shapes what may be requested of the next domain, while the
receiving authorization server makes the final decision for its own domain.
Two authorities, each deciding what is theirs to decide.

The comparison breaks in one important place, which is where working-group
discussion is most valuable. Classic SSO made its split with the human
present at each new domain, consenting at a screen. ICA extends it to the
hops where the human is absent by construction, so what the split leaves to
local policy carries more weight than it ever did in browser SSO. The draft
answers half of it: the root-chain envelope, whose every dimension is an
establishment-time ceiling that later policy may narrow but never broaden.
The other half is open item 9 in Appendix C, whether the envelope should
expose a testable representation of the authorization ceiling, and whether
that representation is scopes, an authorization detail, or something
policy-bound. If you read the open items, that one is closest to your
territory.

Your four-hop agent is a good test of what that leaves open. The identity
provider polices who may continue the chain and for how long, and it can
end the chain at the next mint. What nothing in the chain checks is whether
the fourth hop still matches what the human agreed to at the start. The
chain carries who is acting and what each domain may be asked. It does not
carry what the human approved to be done, which I think is the seam you
were pointing at.

Your agent-mandate-problem draft names that missing layer at T0: the
constraint set a human signs before the agent acts. To your closing
question: ICA does not carry constraint information across the mint, and
does not already answer what your draft states. That layer needs its own
artifact. Mission-Bound Authorization
<https://github.com/mcguinness/mission-bound-authorization> is one
approach: it governs the approved work itself, carrying the constraints,
approval evidence, and lifecycle independently of the identity chain.

PSEA sits at a third point. Where a mandate captures what was approved at
T0, PSEA produces evidence that a particular execution was authorized at
the moment it occurred. And you said it yourself with the offline user:
PSEA covers the hop where the human is present to prove it, ICA the hop
where they are not. Correct me if I have any of that wrong.

So I don't see competing approaches. I see three layers that compose:

   - identity continuity (ICA, issuing ID-JAGs): who is acting, and how
   that identity legitimately continues across domains,
   - authorization continuity (your mandate layer, with
   draft-mcguinness-oauth-mission
   <https://datatracker.ietf.org/doc/draft-mcguinness-oauth-mission/> as
   one proposed mechanism): what work remains authorized, under which
   constraints, on whose approval, and
   - execution-time evidence (PSEA): proof a specific action was authorized
   when it happened.

Each answers a question the others don't, and one artifact trying to carry
all three would do each job worse.

-Karl