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/ <http://example.org/client/>*" > } > > This allows any client instance to use their credentials (e.g. > spiffe://example.org/client/1 <http://example.org/client/1> or > spiffe://example.org/client/2 <http://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] > <mailto:[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 <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] >>> <mailto:[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/ >>> <http://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 <http://example.org/client/1>" >>> } >>> >>> >>> On Sat, Feb 21, 2026 at 11:39 AM Takahiko Kawasaki <[email protected] >>> <mailto:[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] >>>> <mailto:[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 >>>>>> <http://example.org/my-oauth-client>/1", >>>>>> "spiffe://example.org/my-oauth-client >>>>>> <http://example.org/my-oauth-client>/2", >>>>>> "spiffe://example.org/my-oauth-client >>>>>> <http://example.org/my-oauth-client>/3", ... >>>>>> "spiffe://example.org/my-oauth-client >>>>>> <http://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 >>>>>> <http://example.org/my-oauth-client>/*"). >>>>>> >>>>>> Cheers >>>>>> >>>>>> Pieter >>>>>> >>>>>> On Fri, Feb 20, 2026 at 5:35 PM Takahiko Kawasaki <[email protected] >>>>>> <mailto:[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 >>>>>>> <http://example.org/my-oauth-client>", >>>>>>> "spiffe_bundle_endpoint": "https://example.org/bundle" >>>>>>> >>>>>>> >>>>>>> >>>>>>> On Sat, Feb 21, 2026 at 2:17 AM Lombardo, Jeff >>>>>>> <[email protected] >>>>>>> <mailto:[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] >>>>>>>> <mailto:[email protected]>> >>>>>>>> Sent: February 20, 2026 12:09 PM >>>>>>>> To: Emelia S. <[email protected] >>>>>>>> <mailto:[email protected]>> >>>>>>>> Cc: oauth <[email protected] <mailto:[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. >>>>>>>> <[email protected] >>>>>>>> <mailto:[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] >>>>>>>> <mailto:[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] <mailto:[email protected]> >>>>>>>> To unsubscribe send an email to [email protected] >>>>>>>> <mailto:[email protected]> >>>>>>>> >>>>>>>> >>>>>>>> _______________________________________________ >>>>>>>> OAuth mailing list -- [email protected] <mailto:[email protected]> >>>>>>>> To unsubscribe send an email to [email protected] >>>>>>>> <mailto:[email protected]>_______________________________________________ >>>>>>>> OAuth mailing list -- [email protected] <mailto:[email protected]> >>>>>>>> To unsubscribe send an email to [email protected] >>>>>>>> <mailto:[email protected]> >>>>>>> >>>>>>> >>>>>>> >>>>>>> -- >>>>>>> Takahiko Kawasaki >>>>>>> Co-Founder >>>>>>> [email protected] <mailto:[email protected]> >>>>>>> authlete.com <https://www.authlete.com/> |Linkedin >>>>>>> <https://www.linkedin.com/company/authlete/> >>>>>>> _______________________________________________ >>>>>>> OAuth mailing list -- [email protected] <mailto:[email protected]> >>>>>>> To unsubscribe send an email to [email protected] >>>>>>> <mailto:[email protected]> >>>>> >>>>> >>>>> >>>>> -- >>>>> Takahiko Kawasaki >>>>> Co-Founder >>>>> [email protected] <mailto:[email protected]> >>>>> authlete.com <https://www.authlete.com/> |Linkedin >>>>> <https://www.linkedin.com/company/authlete/> >>>> >>>> >>>> >>>> -- >>>> Takahiko Kawasaki >>>> Co-Founder >>>> [email protected] <mailto:[email protected]> >>>> authlete.com <https://www.authlete.com/> |Linkedin >>>> <https://www.linkedin.com/company/authlete/> >>> >>> >>> >>> -- >>> Takahiko Kawasaki >>> Co-Founder >>> [email protected] <mailto:[email protected]> >>> 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]
