[OAUTH-WG] Re: draft-ietf-oauth-sd-jwt-vc-18 early Httpdir review
Brian Campbell <bcampbell@pingidentity.com> Fri, 14 August 2026 20:20 UTC
Return-Path: <bcampbell@pingidentity.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 C8DE612A09288 for <oauth@mail2.ietf.org>; Fri, 14 Aug 2026 13:20:35 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ietf.org; s=ietf1; t=1786738835; bh=m59PfLK/x0cZWaoL64ET/lKgqPBYh21mmwfxwPN+oJk=; h=References:In-Reply-To:From:Date:Subject:To:Cc; b=r388/ZTRiwUHrt2DfmMQYgPgQD4ZrbDqhnryHMacRV3QsSyr0NOniGNC741aU8vn2 ZrBjo/c79jzi98xFC/sgIpw1Xte4SQp1Z1gHZO2YuHxhbnuj5H/+0pANKPKdvwHO51 FyQeyTiEc8uI4OLPPsqWoEDbBTHc0tKPtQmsPlVA=
X-Virus-Scanned: amavisd-new at ietf.org
X-Spam-Flag: NO
X-Spam-Score: -2.097
X-Spam-Level:
X-Spam-Status: No, score=-2.097 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_NONE=0.001] autolearn=ham autolearn_force=no
Authentication-Results: mail2.ietf.org (amavisd-new); dkim=pass (2048-bit key) header.d=pingidentity.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 Un-9a_xnEzrK for <oauth@mail2.ietf.org>; Fri, 14 Aug 2026 13:20:34 -0700 (PDT)
Received: from mail-vk1-xa31.google.com (mail-vk1-xa31.google.com [IPv6:2607:f8b0:4864:20::a31]) (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 C53B212A0927E for <oauth@ietf.org>; Fri, 14 Aug 2026 13:20:34 -0700 (PDT)
Received: by mail-vk1-xa31.google.com with SMTP id 71dfb90a1353d-5bfbbe5220dso749036e0c.1 for <oauth@ietf.org>; Fri, 14 Aug 2026 13:20:34 -0700 (PDT)
ARC-Seal: i=1; a=rsa-sha256; t=1786738828; cv=none; d=google.com; s=arc-20260327; b=FZAsp/wab7s+VTVhV7azs3yDyLdTCJcGPqwmkEte5UgjUZeRkPcdIbZsKzUUa/bxCL yFc6A9NVs+gTdccNUEvaOdWmw4MBzhoC2NcoHAB6+GLbd1pA86zXuY8VkMkpI32O1DgA mXzWwHqpwUk0Cg/rSNFG790gC+fC7GEQYfW0GHpOtKDWOVztWEG+7Sl7jJR+xLr7aRAu z1fFoGePeLWMNWpFKO/CYslaTL5XOFl0Ub3IZsjYHIqbXc7Xs8iZtNo6aauiBgQxP1go ULDeWbtHba06it8NaSnbzx+ckhySNh2ggtuvIJYmCARCH1xBRIuK1qdufzUjpMLUIHN2 VNyA==
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=ogKLCQbl1RUJabSCUWovMCbUtVJgpJ9yV8fdxI6OXz4=; fh=F5MHdRJ0mMr4CmuK6+0P2UR1fnLnoWz1WTWHmX4nyhA=; b=ccX2lUiXW0gzLpPBK6uylRfrAFqpAowlFUgBR3s3y8uTlMT52l1H9mDvFk2hlJ5X+1 MbqUmDDXeyBzZsK1fxMBvHKH2SOA9/GiGzxcU65K6zHynaMAiBGBbuwDVb3EI32dQOU/ lkR0QS8e87eIqTB3EogV21iF8JCONsPMJvhZ4UTx7RjTeJ7Fe6tezlkBDQNGiZI7sNJJ 6brckD8ftZS6x32w8DQ2zC5ISBGQNn8dudPg9PUSCtcAeS9D6E5cJyWR54ZE7NSs05xu tjL6oSdJMXbOVwT0crEtBiiXUDc7jc/kHAZZr/v4p/2yNCYbZ30X+4PADL9ZdiE6FdWO 4M2g==; darn=ietf.org
ARC-Authentication-Results: i=1; mx.google.com; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=pingidentity.com; s=google; t=1786738828; x=1787343628; 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=ogKLCQbl1RUJabSCUWovMCbUtVJgpJ9yV8fdxI6OXz4=; b=PWoo2oNq1a+3+c35U2TBKvz7Ss8gXe6qxRqVe0dytZwysW7jp6+MU5POPxyrgpDmJ9 zGbnpqnjDO+uLg9WOimMHB8R81dDow7ws/HWyZllawKfLDJtbB4mHaxoVskATfmfvdYo QRa5G4zZYYhIJ/HRa2EgwIjXjYpDoArch8G6GPTPlWxj12YYVMgZ7P33EajVx1LE96F6 5+ir9TuyYsMkCB4roU6cE0LSi3Lv1cjZbTubccdPGAl07kqHB5D9mkeB9q7dDjSStoZ1 NufS6ymq52ixOhSh+MsJzcr9DFvod5qgyPThcJYKbNa0WXG/G9qrukxwXgkwSE/sK58G RDlQ==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1786738828; x=1787343628; 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=ogKLCQbl1RUJabSCUWovMCbUtVJgpJ9yV8fdxI6OXz4=; b=Wq+wpuOfFbekfWLE1fBRYf31yzt3AH/CPCjoVkb6pfMXMtQZxxu+fy2PgEKVGMSpNy rRYkJ8l29LTSkaweehpODstxCRTlqJyJLHbFRJxyy+ONY1J6I3OPZrJ+mKROgDpECCV1 DOe9HIp861jRWW8OPMA+9PR9yO+qKe6LeprxImkQR+iW/Vb+xJqoVp90xkQqZUIwapSH 51xKRUSQrlrv8ZS/iXfzpnnEA5c2sKcbgFH7tIV36NvGPQ/55hpY3MFuXhACiFfoIy64 0IPgDNhSu5EXTwATBNWE7oZefKKchw06558KCPzz+QcT4ebLehrYUgWf1be1AM703B1O PE/Q==
X-Forwarded-Encrypted: i=1; AHgh+RovxyMPdqUx+HWlBQYN0Sa/5kWfFk1LdR0GATYEwa5zQFq3sksG6bhmH7imww4GGs/QDEw5LQ==@ietf.org
X-Gm-Message-State: AOJu0YzIf+9Fsob9Xks8i6iJ2uJE4N+8EuGLkJZw10sl0lG0JWnB0xO6 G8zNRTse8seqMysW/fYSSoLUzcTssD2GPxxnvtcF/K5EQVeA04hiuVRD5pwIy14YJn3yRRZpWhb O/jvps235SUlz+S4t7f4KI/Ft///ksdxxYC2CzC7UN4BMPRQ7nUkm5UuUD5hrXzzN9n/7xjsUYy ZD9VKk5Lr/Lte7DQ==
X-Gm-Gg: AR+sD12vJ0899ji6Wc1sS+p9ZG8iVZW/lxyTz6C5KlK4AfixrR+IS06Q5OL5F4DRkvf g5zMCMKH0tPJ8S9ZOSdy71XKfsFjVL4/QEkFAoM9BokiT239HAKeWjbixpdg5rDnOj3f++4ZKp6 ehcGj9OoEnXS73kUFk17nlrPOrGE1/ud2Ep7wey1wacb3oSPc4w1CKZ4Hbb1uRL5TKP4ACcNpOc b/mU759F3FhlO6SoASMwfSpt0T/HRaXqY0sU1bYaCXfwU6rvxAu04arX0C/q94fqs4+GSyqleMW HGxDpNTloxVB9XVmdOP5h5/DAKDv5BcI457VgCv4GT97xbJYB4pD6MA2OOQlZGOkogS8z+DOVCV bltQQs6rMZWij2aGaa/e6uQc4C0i6J6v36GO6QoOogXtz5xRfzh8z7kX1eMeh/w==
X-Received: by 2002:a05:6122:d91:b0:5bf:6734:ff8b with SMTP id 71dfb90a1353d-5c592abeb63mr1175076e0c.8.1786738827993; Fri, 14 Aug 2026 13:20:27 -0700 (PDT)
MIME-Version: 1.0
References: <178660190568.84505.3815749571005067589@dt-datatracker-559c48c7fb-jvzsw>
In-Reply-To: <178660190568.84505.3815749571005067589@dt-datatracker-559c48c7fb-jvzsw>
From: Brian Campbell <bcampbell@pingidentity.com>
Date: Fri, 14 Aug 2026 14:20:01 -0600
X-Gm-Features: AcwNN1WdoJVPGl7SEv0IysLBQ3TgabZsmjn7O4vZ1NTFd8BuowNneARTYR2UEHo
Message-ID: <CA+k3eCTTXJydcWi87Ktoqtc5k9ed-oeUJbAMZFxsSCKb+otfYQ@mail.gmail.com>
To: Mark Nottingham <mnot@mnot.net>
Content-Type: multipart/alternative; boundary="00000000000026366c0659078d96"
Message-ID-Hash: PSFLRUMZ2DBSPPQBJX63WAXIEEXYUNFY
X-Message-ID-Hash: PSFLRUMZ2DBSPPQBJX63WAXIEEXYUNFY
X-MailFrom: bcampbell@pingidentity.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: ietf-http-wg@w3.org, draft-ietf-oauth-sd-jwt-vc.all@ietf.org, oauth@ietf.org
X-Mailman-Version: 3.3.9rc6
Precedence: list
Subject: [OAUTH-WG] Re: draft-ietf-oauth-sd-jwt-vc-18 early Httpdir review
List-Id: OAUTH WG <oauth.ietf.org>
Archived-At: <https://mailarchive.ietf.org/arch/msg/oauth/dfnha_5m3_v62skUqVDHMd_yI4Q>
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>
Thanks Mark (and AI) for the review. Daniel (and AI) created this PR https://github.com/oauth-wg/oauth-sd-jwt-vc/pull/422 addressing the feedback. I (without AI) reviewed it and merged the changes, which will be in the next (-19) revision of the draft. On Thu, Aug 13, 2026 at 12:18 AM Mark Nottingham via Datatracker < noreply@ietf.org> wrote: > Document: draft-ietf-oauth-sd-jwt-vc > Title: SD-JWT-based Verifiable Digital Credentials (SD-JWT VC) > Reviewer: Mark Nottingham > Review result: Almost Ready > > *[Drafted with AI assistance from a structured review run over the > document and > the WG's record, then reviewed and edited by me.]* > > The draft is reasonable where it touches HTTP. It uses GET throughout, > puts key > material behind HTTPS rather than in the DNS, and uses the > discovery-document-plus-links pattern RFC 9205 recommends. The > `.well-known` > construction in Section 3 is correct. > > The problem is that it specifies requests but is almost silent about > responses. > It defines four fetches -- the `/.well-known/jwt-vc-issuer` document, > `jwks_uri`, Type Metadata from `vct` and `extends`, and the logo / > background / > SVG-template `uri`s -- and gives partial HTTP behaviour for two. Issues 1 > to 5 > all follow from that. > > This WG has already done most of the relevant analysis in > draft-ietf-oauth-client-id-metadata-document: redirects, server-side > request > forgery (SSRF) and special-use addresses, HTTPS versus `data:`, cache > headers. > > # Issues > > **1. Redirect handling is unspecified** > > "redirect" and "3xx" don't appear in the document. RFC 9205 Section 4.6.1 > asks > applications to say whether redirects are followed, because user agents > may or > may not follow them. > > Section 6.1 specifies a check performed *before* the request -- "Before > making > a request to the JWT VC Issuer Metadata endpoint, the Holder or Verifier > MUST > validate the URL...". A 3xx arrives after that check has passed. > > The document needs to say (probably globally) whether redirects are > followed > and under what constraints, and apply the Section 6.1 validation to each > URL > actually connected to, not just the first. > > **2. Rendering URIs are underspecified** > > The rendering URIs get very little specified HTTP behaviour: no method, > status, > media type, size or time bound, no scheme constraint. Is an `http:` logo > URI > conformant? Section 4.5.1.2.2 covers references out of the SVG -- > "consuming > applications MUST ensure that references to external resources (images, > etc.) > from within the SVG cannot be used to track users or the usage of > credentials" > -- but says nothing about the fetch of the SVG itself. Section 7.4 is > scoped to > the Type Metadata document, not the resources it points at. > > Restating Section 6.1's requirements once, generally, for every URL the > specification causes a Consumer to dereference would some of this. > Constraining > the rendering URIs to `https:` or `data:` would also help. > > **3. Pinning success to 200.** > > Sections 3.2 and 4.3.1 both say "A successful response MUST use an HTTP 200 > status code". RFC 9205 Section 3.1 asks applications not to overlay the > semantics of generic protocol elements. > > Instead, describe the semantics -- a representation of the metadata > resource, > retrieved with GET -- rather than pinning a status code. > > **4. The caching rule is incomplete.** > > Otherwise, the Consumer MUST use the Cache-Control header of the HTTP > response to determine how long the metadata can be cached. > > Cache-Control isn't the only input to the HTTP caching model. Point at RFC > 9111 > instead. Also tell publishers to send an explicit freshness lifetime, and > say > whether the integrity-keyed indefinite cache overrides origin directives > such > as `no-store`. > > **5. The integrity mechanism is specified by reference to an algorithm that > fails cross-origin.** > > Section 5 requires a Consumer to "MUST verify the integrity of the > retrieved > document as defined in Section 3.3.5 of [W3C.SRI]". Step 3 of that > algorithm is > "If response is not eligible for integrity validation, return false", and > Section 3.3.2 makes eligibility depend on the response being same-origin or > CORS-permitted. Every URL this document integrity-checks is cross-origin by > construction, and CORS is never mentioned. > > So in a browser-hosted wallet the cited algorithm returns false, Section > 5's > MUST fails, and Section 4.7 rejects the credential. In a native consumer > there's no Fetch response and no loading origin, so step 3 has no meaning > and > every implementer will quietly skip it. > > If browsers are in scope, this needs an `Access-Control-Allow-Origin` > requirement on the fetched documents. If not, cite SRI for the syntax of > the > integrity-metadata string and specify the digest comparison in your own > words. > Note also that the cited section doesn't survive into SRI 2, so the > reference > is to a form of the algorithm current SRI no longer contains. > > **6. `vc+sd-jwt` is now assigned to someone else.** > > Section 2.2.1 says "both vc+sd-jwt and dc+sd-jwt should be accepted as the > value of the typ header for a reasonable transitional period". Is this > intended > to go into the permanent RFC, or will it be removed? > > # Comments > > - No normative reference to RFC 9110 or RFC 9111, though the document > specifies > GET, status codes, a content type and `Cache-Control` behaviour. Same for > RFC > 3986, given Section 3's "scheme, host and, optionally, port number and path > components, but no query or fragment components". > > - `jwks_uri` is defined and never specified: no method, status code, > content > type, caching or integrity, and Section 6.1 doesn't reach it. If that's > deliberate deferral to RFC 7517, say so. > > - `nosniff` and `Content-Security-Policy` appear nowhere. RFC 9205 Section > 4.13 > names them as response-side mitigations for the active-content risk > Sections > 4.5.1.2.2 and 6.5 address entirely on the client side. Your resources > remain > reachable by a browser whether or not that's intended. > > - No response message appears anywhere: Figures 12 and 13 are two-line > requests, Figures 14, 15 and 17 are bare JSON. RFC 9205 Section 4.1 asks > for > both request and response with complete header sections. RFC 8414 Section > 3.2 > and RFC 9728 Section 3.2 both show one, and it's the artefact that would > have > surfaced issues 3 and 5. > > - Distinct media types for the two metadata documents over > `application/json` > would have been nice, per RFC 9205 Section 4.8, but I see this was raised > in > issue #388. > > - Section 6.1 uses "internal" three times and defines it nowhere. > draft-ietf-oauth-client-id-metadata-document cites RFC 6890 for the same > requirement. > > # Nits > > - Section 1.3 uses the pre-RFC 8174 boilerplate. Note there is a lowercase > "should" in Section 2.2.1. > > Cheers, > > > -- _CONFIDENTIALITY NOTICE: This email may contain confidential and privileged material for the sole use of the intended recipient(s). Any review, use, distribution or disclosure by others is strictly prohibited. If you have received this communication in error, please notify the sender immediately by e-mail and delete the message and any file attachments from your computer. Thank you._
- [OAUTH-WG] draft-ietf-oauth-sd-jwt-vc-18 early Ht… Mark Nottingham via Datatracker
- [OAUTH-WG] Re: draft-ietf-oauth-sd-jwt-vc-18 earl… Brian Campbell
- [OAUTH-WG] Re: draft-ietf-oauth-sd-jwt-vc-18 earl… Mark Nottingham