Pieter, yes this is the proposal. Using a more explicit naming convention
would better highlight the potential 1:N relationship, such as
'canonical_spiffe_id' or 'spiffe_id_prefix'.

Takahiko, I agree that the specification can explicitly allow wildcards and
define restrictions; however, I still favor explicit naming.

Le mar. 24 févr. 2026 à 13:07, Takahiko Kawasaki <[email protected]> a
écrit :

> Considering that, in X.509 certificates for websites, hostnames containing
> a wildcard (e.g., *.example.com) can be set in the Subject / Common Name
> or Subject Alternative Name / dNSName, I do not think it would be
> particularly unnatural to allow a wildcard in the final path segment of the
> spiffe_id client metadata.
>
> To support wildcard behavior, X.509 certificates do not define separate
> field names such as “Common Name Prefix” or “dNSName Prefix”; instead, they
> simply use the existing Common Name and dNSName fields as they are.
>
> The following two requirements regarding wildcards described in Section
> 6.3, "Matching the DNS Domain Name Portion," of RFC 9525 Service Identity
> in TLS (https://www.rfc-editor.org/rfc/rfc9525.html#section-6.3) may
> serve as useful references:
>
> - There is only one wildcard character.
> - The wildcard character appears only as the complete content of the
> left-most label.
>
> If we align with these requirements, we could define the requirements for
> cases where the spiffe_id client metadata contains a wildcard as follows:
>
> - There is only one wildcard character.
> - The wildcard character appears only as the last path segment.
>
> According to the SPIFFE ID specification (
> https://github.com/spiffe/spiffe/blob/main/standards/SPIFFE-ID.md), path
> segments in a SPIFFE ID "contain only letters, numbers, dots, dashes, and
> underscores ([a-zA-Z0-9._-])." However, the wildcard discussed here applies
> to the value of the client metadata.
>
>
> On Tue, Feb 24, 2026 at 8:21 PM Pieter Kasselman <[email protected]>
> wrote:
>
>> Thanks Aaron, Eric and Emelia
>>
>> Aaron, the wildcarding is not a SPIFFE construct, it is meant as a way to
>> say "SPIFFE IDs starting with this trust domain and path should be allowed
>> to present their credentials when using the client_id", thereby creating a
>> one (client_id) to many (instance id) mapping. SPIFFE identifiers are
>> hierarchical, and one way in which they can be used to become increasingly
>> specific as additional path elements are added (this is deployment
>> specific). The choice of how to construct a SPIFFE ID is up to a deployment.
>>
>> Emelia, Eric, if I understand your proposal correctly, your suggesting
>> that instead of using wildcarding (which can also be problematic), create
>> an additional metadata item like "spiffe_instance_prefix" for cases where
>> that kind of 1:many mapping  is desirable/feasible and keep it
>> separate from the "spiffe_id" which always provides a 1:1 mapping?
>>
>> Cheers
>>
>> Pieter
>>
>> On Tue, Feb 24, 2026 at 8:54 AM Eric Leleu <[email protected]>
>> wrote:
>>
>>> Hi,
>>>
>>> I agree with Emelia, if the metadata document has to provide a base URI
>>> for the spiffe identifiers it may be more appropriate to name it explicitly.
>>>
>>> Regards,
>>> Eric
>>>
>>> ps: This is the first time I publish a comment in the mailing list,
>>> sorry if I'm not following the good practices.
>>>
>>> Le lun. 23 févr. 2026 à 18:55, Emelia S. <emelia=
>>> [email protected]> a écrit :
>>>
>>>> Maybe instead of `spiffe_id` which I think should be singular, you'd
>>>> instead have like a spiffe_issuer or spiffe_origin (I don't know the right
>>>> language here), which would be explicit in the "all spiffe_id's with this
>>>> prefix are valid for this client_id"
>>>>
>>>> Would that make sense?
>>>>
>>>> — Emelia
>>>>
>>>> On 23 Feb 2026, at 17:31, Pieter Kasselman <[email protected]>
>>>> wrote:
>>>>
>>>> Thanks Taku and Emelia
>>>>
>>>> Taku, that is an interesting idea - I did not think of that approach!
>>>> Emelia, thanks for sharing the context on why query parameters could get an
>>>> implementer into trouble.
>>>>
>>>> I was thinking that the URL would represent the client_id of a class of
>>>> clients (no need for query parameters), but that each instance of that
>>>> class could have its own SPIFFE ID (which represents an instance). If there
>>>> are 100 instances of the client, you would still use the same client_id
>>>> with CIMD, but then allow each instance of the client to authenticate using
>>>> their SPIFFE credential, which contain its own unique identifier. The idea
>>>> was to extend from a 1:1 mapping between client_id and SPIFFE Id to a
>>>> 1:many mapping, where the SPIFFE IDs would instance identifiers.
>>>>
>>>> I was thinking that the CIMD URL would indicate a class of client,
>>>> while the SPIFFE credentials would represent individual instances.
>>>>
>>>> metadata = {
>>>> client_id: "https://example.com/client.json";,
>>>> spiffe_id: "spiffe://example.org/client/*"
>>>> }
>>>>
>>>> This allows any client instance to use their credentials (e.g. spiffe://
>>>> example.org/client/1 or spiffe://example.org/client/2 etc). The AS can
>>>> accept the credentials as valid, and also use the additional information
>>>> for other purposes (audit logs, or perhaps adding it as claims to a token
>>>> or expose it through a introspection point etc).
>>>>
>>>> This way the client_id URL represents a class of clients, and the
>>>> SPIFFE ID specific instances by allowing wildcard mapping (the alternative
>>>> is publishing hundreds, maybe thousands of CIMD documents that is
>>>> identical, except for the SPIFFE ID).
>>>>
>>>> Cheers
>>>>
>>>> Pieter
>>>>
>>>> On Sat, Feb 21, 2026 at 4:53 AM Emelia S. <[email protected]>
>>>> wrote:
>>>>
>>>>> We deliberately have them as part of the client ID and discouraged,
>>>>> because we want to prevent people from doing not quite what you're doing
>>>>> but very similar: it's quite easy to foot-gun oneself with like "oh but I
>>>>> want to vary redirect_uris by query param", and now boom, you've got the
>>>>> same client ID and any random app can impersonate you because you've
>>>>> created an open-redirector effectively.
>>>>>
>>>>> Their CIMD no longer has a fixed set of redirect_uris so an attacker
>>>>> can override to their evil.example domain and the end-user would think the
>>>>> authorization request legitimate.
>>>>>
>>>>> Sadly, I've seen people try and do dynamically generated CIMDs like
>>>>> that, and getting all sorts of nasty security issues.
>>>>>
>>>>> By discouraging query parameters, we encourage use of "stable URIs",
>>>>> so like http://cimd-service.fly.dev can generate CIMD documents, but
>>>>> each has a CID (a hash) of the document contents as the path component, so
>>>>> it will always be the same doc for same client_id, and my server there is
>>>>> actually storing client_id => doc mapping.
>>>>>
>>>>> Sure, someone could recreate query parameters in the path component,
>>>>> but it's much less intuitive to do than just using query components.
>>>>>
>>>>> — Emelia
>>>>>
>>>>> On 21 Feb 2026, at 04:31, Takahiko Kawasaki <[email protected]> wrote:
>>>>>
>>>>> Hi Pieter,
>>>>>
>>>>> As of the last time I checked the CIMD specification, including query
>>>>> parameters in the client ID is discouraged. However, if they are included,
>>>>> then (unless I am mistaken) they are considered part of the client ID. In
>>>>> other words, https://example.com/client.json?instance_id=1 and
>>>>> https://example.com/client.json?instance_id=2 would be recognized as
>>>>> different clients.
>>>>>
>>>>> However, if the CIMD specification were slightly revised to state that
>>>>> query parameters are not considered part of the client ID, it would become
>>>>> possible to generate different metadata documents for multiple instances 
>>>>> of
>>>>> a single client by using query parameters. In that case, the scalability
>>>>> concerns you mentioned could be mitigated.
>>>>>
>>>>> Below is an example implementation (attached: cimd-client-host.rb) of
>>>>> a Client ID Metadata Document that embeds the value of the instance_id
>>>>> query parameter as part of the SPIFFE ID.
>>>>>
>>>>> #!/usr/bin/env ruby
>>>>>
>>>>> require 'sinatra'
>>>>> require 'json'
>>>>>
>>>>> # The endpoint that issues a Client ID Metadata Document
>>>>> get '/client.json' do
>>>>> content_type :json
>>>>>
>>>>> metadata = {
>>>>> client_id: "https://example.com/client.json";,
>>>>> spiffe_id: "spiffe://example.org/client/#{params['instance_id']}"
>>>>> }
>>>>>
>>>>> JSON.pretty_generate(metadata)
>>>>> end
>>>>>
>>>>>
>>>>> If you start this program on your local machine:
>>>>>
>>>>> ./cimd-client-host.rb
>>>>>
>>>>>
>>>>> and access it as follows:
>>>>>
>>>>> curl http://localhost:4567/client.json?instance_id=1
>>>>>
>>>>>
>>>>> you will receive the following response:
>>>>>
>>>>> {
>>>>> "client_id": "https://example.com/client.json";,
>>>>> "spiffe_id": "spiffe://example.org/client/1"
>>>>> }
>>>>>
>>>>>
>>>>>
>>>>> On Sat, Feb 21, 2026 at 11:39 AM Takahiko Kawasaki <[email protected]>
>>>>> wrote:
>>>>>
>>>>>> Hi Jeff,
>>>>>>
>>>>>> My intuition is that, since the OAuth SPIFFE Client Authentication
>>>>>> specification defines a client authentication method that depends on
>>>>>> SPIFFE, it is natural to use the spiffe_ prefix for the metadata required
>>>>>> by that method.
>>>>>>
>>>>>> If a generic parameter such as client_alternate_id is needed, I
>>>>>> believe it would be better to define it in a more abstract 
>>>>>> specification—at
>>>>>> a level of abstraction comparable to RFC 7521—rather than within the 
>>>>>> OAuth
>>>>>> SPIFFE Client Authentication specification itself.
>>>>>>
>>>>>>
>>>>>> On Sat, Feb 21, 2026 at 4:57 AM Takahiko Kawasaki <[email protected]>
>>>>>> wrote:
>>>>>>
>>>>>>> I have created a diagram illustrating what I am proposing (i.e., how
>>>>>>> SPIFFE Client Authentication can coexist with CIMD), and I am attaching 
>>>>>>> it
>>>>>>> to this email. If the attached image is removed by the mailing list 
>>>>>>> system
>>>>>>> and cannot be accessed, please refer to the diagram that I have posted 
>>>>>>> in
>>>>>>> the issue tracker.
>>>>>>>
>>>>>>>
>>>>>>> https://github.com/arndt-s/oauth-spiffe-client-authentication/issues/30#issuecomment-3936816934
>>>>>>>
>>>>>>>
>>>>>>> On Sat, Feb 21, 2026 at 3:50 AM Pieter Kasselman
>>>>>>> <[email protected]> wrote:
>>>>>>>
>>>>>>>> Thanks Tako - this looks like a very promising approach.
>>>>>>>>
>>>>>>>> I wonder if this can also help with per-instance identifiers.
>>>>>>>>
>>>>>>>> With SPIFFE, it is common to assign identifiers at
>>>>>>>> individual workload level, so you may have one application that have 
>>>>>>>> 100
>>>>>>>> instances (individual workloads), with each of these having their own
>>>>>>>> unique SPIFFE credential ("spiffe://example.org/my-oauth-client/1
>>>>>>>> ", "spiffe://example.org/my-oauth-client/2", "spiffe://
>>>>>>>> example.org/my-oauth-client/3", ... "spiffe://
>>>>>>>> example.org/my-oauth-client/100"). One option is to publish a CIMD
>>>>>>>> document for each of those workloads, but this has scale issues,
>>>>>>>> especially. in dynamic environments. Perhaps this can be handled 
>>>>>>>> through
>>>>>>>> some kind of wild-carding in defining the spifffe_id (e.g.
>>>>>>>> "spiffe://example.org/my-oauth-client/*").
>>>>>>>>
>>>>>>>> Cheers
>>>>>>>>
>>>>>>>> Pieter
>>>>>>>>
>>>>>>>> On Fri, Feb 20, 2026 at 5:35 PM Takahiko Kawasaki <
>>>>>>>> [email protected]> wrote:
>>>>>>>>
>>>>>>>>> Hi Aaron,
>>>>>>>>>
>>>>>>>>> Yes, what I expect the Client ID Metadata Document to contain is
>>>>>>>>> as follows:
>>>>>>>>>
>>>>>>>>> "token_endpoint_auth_method": "spiffe_jwt" or "spiffe_x509",
>>>>>>>>> "spiffe_id": "spiffe://example.org/my-oauth-client",
>>>>>>>>> "spiffe_bundle_endpoint": "https://example.org/bundle";
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> On Sat, Feb 21, 2026 at 2:17 AM Lombardo, Jeff <jeffsec=
>>>>>>>>> [email protected]> wrote:
>>>>>>>>>
>>>>>>>>>> I concur on this strategy being the one that can rule all the
>>>>>>>>>> cases [and in the light binds them].
>>>>>>>>>>
>>>>>>>>>> When using CIMD, it must become the source of truth for a
>>>>>>>>>> client_id and all its possible aliases.
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> *Jean-François “Jeff” Lombardo* | Amazon Web Services
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> Architecte Principal de Solutions, Spécialiste de Sécurité
>>>>>>>>>> Principal Solution Architect, Security Specialist
>>>>>>>>>> Montréal, Canada
>>>>>>>>>>
>>>>>>>>>> *Commentaires à propos de notre échange? **Exprimez-vous **ici*
>>>>>>>>>> <https://urldefense.com/v3/__https:/feedback.aws.amazon.com/?ea=jeffsec&fn=Jean*20Francois&ln=Lombardo__;JQ!!Pe07N362zA!0k9CkAV8Djpw_8EfIAKrbhP3TQrJr0oMnznlUgBJ3V3NoEk6hihx7dNHnQuejn6SSH2CP8Iow3G-tTzppHeg$>
>>>>>>>>>> *.*
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> *Thoughts on our interaction? Provide feedback **here*
>>>>>>>>>> <https://urldefense.com/v3/__https:/feedback.aws.amazon.com/?ea=jeffsec&fn=Jean*20Francois&ln=Lombardo__;JQ!!Pe07N362zA!0k9CkAV8Djpw_8EfIAKrbhP3TQrJr0oMnznlUgBJ3V3NoEk6hihx7dNHnQuejn6SSH2CP8Iow3G-tTzppHeg$>
>>>>>>>>>> *.*
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> *From:* Aaron Parecki <[email protected]>
>>>>>>>>>> *Sent:* February 20, 2026 12:09 PM
>>>>>>>>>> *To:* Emelia S. <[email protected]>
>>>>>>>>>> *Cc:* oauth <[email protected]>
>>>>>>>>>> *Subject:* [EXT] [OAUTH-WG] Re: IANA OAuth Parameters for SPIFFE
>>>>>>>>>> Client Authentication
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> *CAUTION*: This email originated from outside of the
>>>>>>>>>> organization. Do not click links or open attachments unless you can 
>>>>>>>>>> confirm
>>>>>>>>>> the sender and know the content is safe.
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> *AVERTISSEMENT*: Ce courrier électronique provient d’un
>>>>>>>>>> expéditeur externe. Ne cliquez sur aucun lien et n’ouvrez aucune 
>>>>>>>>>> pièce
>>>>>>>>>> jointe si vous ne pouvez pas confirmer l’identité de l’expéditeur et 
>>>>>>>>>> si
>>>>>>>>>> vous n’êtes pas certain que le contenu ne présente aucun risque.
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> It sounds like the CIMD would publish the `spiffe_id` in the
>>>>>>>>>> metadata, that way the SPIFFE-ID in the SVID can be validated 
>>>>>>>>>> against the
>>>>>>>>>> value in the CIMD? That sounds like it would work.
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> On Fri, Feb 20, 2026 at 9:06 AM Emelia S. <emelia=
>>>>>>>>>> [email protected]> wrote:
>>>>>>>>>>
>>>>>>>>>> > SPIFFE Client Authentication with JWT-SVIDs requires the
>>>>>>>>>> authorization server to ensure that the SPIFFE ID in the SVID 
>>>>>>>>>> matches the
>>>>>>>>>> registered value, but the specification does not define how this
>>>>>>>>>> verification is to be performed. If the spiffe_id client
>>>>>>>>>> metadata is available, the authorization server can satisfy this
>>>>>>>>>> requirement by comparing the registered metadata value with the 
>>>>>>>>>> SPIFFE ID
>>>>>>>>>> contained in the SVID.
>>>>>>>>>>
>>>>>>>>>> The spiffe_id would mismatch with client_id right? For using it
>>>>>>>>>> with CIMD?
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> – Emelia
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> On 20 Feb 2026, at 17:57, Takahiko Kawasaki <[email protected]>
>>>>>>>>>> wrote:
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> Hello,
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> *SPIFFE-CLIENT-AUTH ISSUE 30: IANA OAuth Parameters for SPIFFE
>>>>>>>>>> Client Authentication*
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> https://github.com/arndt-s/oauth-spiffe-client-authentication/issues/30
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> I would like to propose the following IANA OAuth Parameters
>>>>>>>>>> <https://www.iana.org/assignments/oauth-parameters/oauth-parameters.xhtml>
>>>>>>>>>>  for
>>>>>>>>>> SPIFFE Client Authentication:
>>>>>>>>>> OAuth Dynamic Client Registration Metadata
>>>>>>>>>>
>>>>>>>>>>    - spiffe_id
>>>>>>>>>>    - spiffe_bundle_endpoint
>>>>>>>>>>
>>>>>>>>>> OAuth Token Endpoint Authentication Methods
>>>>>>>>>>
>>>>>>>>>>    - spiffe_jwt
>>>>>>>>>>    - spiffe_x509
>>>>>>>>>>
>>>>>>>>>> Rationale for spiffe_id
>>>>>>>>>> SPIFFE Client Authentication with JWT-SVIDs requires the
>>>>>>>>>> authorization server to ensure that the SPIFFE ID in the SVID 
>>>>>>>>>> matches the
>>>>>>>>>> registered value, but the specification does not define how this
>>>>>>>>>> verification is to be performed. If the spiffe_id client
>>>>>>>>>> metadata is available, the authorization server can satisfy this
>>>>>>>>>> requirement by comparing the registered metadata value with the 
>>>>>>>>>> SPIFFE ID
>>>>>>>>>> contained in the SVID.
>>>>>>>>>> Rationale for spiffe_bundle_endpoint
>>>>>>>>>> Because the location of the SPIFFE Bundle Endpoint cannot be
>>>>>>>>>> inferred from the SPIFFE ID or the SVID, it must be preconfigured. 
>>>>>>>>>> However,
>>>>>>>>>> the specification does not define how this configuration is to be
>>>>>>>>>> performed. If the spiffe_bundle_endpoint client metadata is
>>>>>>>>>> available, the authorization server can use it to store the 
>>>>>>>>>> preconfigured
>>>>>>>>>> value.
>>>>>>>>>> Rationale for spiffe_jwt and spiffe_x509
>>>>>>>>>>
>>>>>>>>>> The token_endpoint_auth_method client metadata and the
>>>>>>>>>> token_endpoint_auth_methods_supported server metadata require
>>>>>>>>>> identifiers representing the new client authentication methods 
>>>>>>>>>> defined by
>>>>>>>>>> this specification.
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> Best Regards,
>>>>>>>>>>
>>>>>>>>>> Taka @ Authlete
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> _______________________________________________
>>>>>>>>>> OAuth mailing list -- [email protected]
>>>>>>>>>> To unsubscribe send an email to [email protected]
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> _______________________________________________
>>>>>>>>>> OAuth mailing list -- [email protected]
>>>>>>>>>> To unsubscribe send an email to [email protected]
>>>>>>>>>>
>>>>>>>>>> _______________________________________________
>>>>>>>>>> OAuth mailing list -- [email protected]
>>>>>>>>>> To unsubscribe send an email to [email protected]
>>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> --
>>>>>>>>> *Takahiko Kawasaki*
>>>>>>>>> Co-Founder
>>>>>>>>> [email protected]
>>>>>>>>> [image: Authlete]
>>>>>>>>> authlete.com <https://www.authlete.com/> |Linkedin
>>>>>>>>> <https://www.linkedin.com/company/authlete/>
>>>>>>>>> _______________________________________________
>>>>>>>>> OAuth mailing list -- [email protected]
>>>>>>>>> To unsubscribe send an email to [email protected]
>>>>>>>>>
>>>>>>>>
>>>>>>>
>>>>>>> --
>>>>>>> *Takahiko Kawasaki*
>>>>>>> Co-Founder
>>>>>>> [email protected]
>>>>>>> [image: Authlete]
>>>>>>> authlete.com <https://www.authlete.com/> |Linkedin
>>>>>>> <https://www.linkedin.com/company/authlete/>
>>>>>>>
>>>>>>
>>>>>>
>>>>>> --
>>>>>> *Takahiko Kawasaki*
>>>>>> Co-Founder
>>>>>> [email protected]
>>>>>> [image: Authlete]
>>>>>> authlete.com <https://www.authlete.com/> |Linkedin
>>>>>> <https://www.linkedin.com/company/authlete/>
>>>>>>
>>>>>
>>>>>
>>>>> --
>>>>> *Takahiko Kawasaki*
>>>>> Co-Founder
>>>>> [email protected]
>>>>> [image: Authlete]
>>>>> authlete.com <https://www.authlete.com/> |Linkedin
>>>>> <https://www.linkedin.com/company/authlete/>
>>>>> <cimd-client-host.rb>
>>>>>
>>>>>
>>>>>
>>>> _______________________________________________
>>>> OAuth mailing list -- [email protected]
>>>> To unsubscribe send an email to [email protected]
>>>>
>>>
>>>
>>> --
>>>
>>>
>>>
>>>
>>> Eric LELEU
>>>
>>> Staff Software Engineer / AM Teach Lead
>>>
>>> E [email protected] <[email protected]>
>>>
>>> Hold Nothing Back
>>> <http://youtube.com/c/Graviteesource?sub_confirmation=1>
>>> <https://www.linkedin.com/company/gravitee-io>
>>>
>> _______________________________________________
>> OAuth mailing list -- [email protected]
>> To unsubscribe send an email to [email protected]
>>
>
>
> --
> *Takahiko Kawasaki*
> Co-Founder
> [email protected]
> [image: Authlete]
> authlete.com <https://www.authlete.com/> |Linkedin
> <https://www.linkedin.com/company/authlete/>
>


-- 




Eric LELEU

Staff Software Engineer / AM Teach Lead

E [email protected] <[email protected]>

Hold Nothing Back
<http://youtube.com/c/Graviteesource?sub_confirmation=1>
<https://www.linkedin.com/company/gravitee-io>
_______________________________________________
OAuth mailing list -- [email protected]
To unsubscribe send an email to [email protected]

Reply via email to