Skip to content

Conversation

pcarleton
Copy link
Member

(work in progress)

@mcguinness
Copy link

I think it's also important to talk about per-instance registration use cases (https://www.rfc-editor.org/rfc/rfc7591#appendix-A.4) with the matrix of options. Pre-registration by user and DCR enable per-instance client ids. Some authorization servers/enterprise deployments may require each instance to have it's own identity for governance or IAM use cases. Software Statements enable separation of pre-registration of client software but runtime registration of instances for example. This is useful for enterprise scenarios where the enterprise wants to delegate registration to an agent platform that can spin up instances in managed environments for example similar to workload identity patterns with public clouds.

* The server must fetch the JWKS URI and verify the statement during registration.


This is discussed more in depth in this Specification Enhancement Proposal (SEP) (TODO: link to SEP)

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Does the client have to sign the software statement, or could a trusted authority sign the software statement instead?

The client could still publish the JWK key set for the signing authority, but instead of a self-signed software statement, the statement can be signed by an authority that may perform additional attestation of the client.

As a practical example, a SPIFFE issuer in an enterprise may check the software bill of materials, deployment environment, image etc before issuing a JWT-SVID which is effectively an identity assertion for the client which might be used as a software statement - https://datatracker.ietf.org/doc/draft-kasselman-oauth-dcr-trusted-issuer-token/

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yes, it can be anything signing the software statement. One method of this is described in https://datatracker.ietf.org/doc/draft-ietf-oauth-attestation-based-client-auth/


Client ID Metadata Documents (described in [this draft RFC](https://www.ietf.org/archive/id/draft-looker-oauth-client-id-scheme-00.html) and implemented by Bluesky) elegantly sidestep these operational issues.

Instead of a registration step, clients use an HTTPS metadata URL as their client ID directly. The server fetches the metadata from the URL at authorization time:

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It is convenient to treat the client ID as a URL - the whole CIMD scheme works because of it :).

How would we deal with cases where the client id is not a URL (e.g in enterprises where there may be existing identity infrastructure to assign identities to workloads via SPIFFE for example). Should we treat that as a separate "enterprise auth case", or is there a way to extend the metadata to allow for "alternate client ids" that can be used instead of the client URL (preference is for some way to use the same approach to simplify deployments).

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pre-registered client ID's will always be supported, does that cover this case? so if the ID is not a URL, the AS falls back to looking it up

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm thinking of the cases where we have seen enterprises deploy SPIFFE (and other similar type solutions). Reverting to manual registration is not scalable in those environments (it is often why SPIFFE gets deployed in the first place - to have a scalable workload identity management system that does not need human intervention).

In those cases, SPIFFE identifiers (they are URIs, not URLs) and credentials (JWTs, X.509 certs) are dynamically assigned (often per instance - something else we should try and figure out with CIMD). This is typically deployed at an infrastructure level, so all workloads in an environment have attested identities and credentials for strong authentication (so a step up from what we get with baseline CIMD in terms of strong auth).

In the case of DCR, the identifier format is not constrained, so the SPIFFE ID could be used as a software statement (there is a draft here: https://datatracker.ietf.org/doc/draft-kasselman-oauth-dcr-trusted-issuer-token/). But with uneven DCR implementation and alternatives like CIMD, it would be valuable if we can find a way to use the CIMD mechanisms without constraining the client ID format (or separate the client id from the location of the client id metadata).

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@pcarleton - I had a quick call with @aaronpk and I think we came up with a way to support the above with CIMD. I will write a PR on Aaron's IETF draft tomorrow (let me know if it needs to be somewhere else as well), but I think there is a way to have CIMD work for the above case (well - at least I think we can write a PR to explain the idea ;)).

- **Cost**: Extremely high \- requires compromising OS vendor processes
- **Mitigation**: OS-level attestation (future work)

### **Solution: Software Statements for Desktop Applications**

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

There is also the potentially simpler option that the desktop application (if it has existing backend infrastructure like Claude Desktop) might choose to offload the authorization to its backend counterpart, in a web-browser.

Of-course that would not work for purely client side applications, but universal-links, on native platforms (iOS, Windows, Android, macOS).

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yea, it's a good point, I'll work that in.


## **Security Considerations**

Both CIMD and software statements require servers to make outbound HTTPS requests, potentially to untrusted domains. Implementations must:
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Is this a concern in restricted environments where there may be network restrictions? It may be a topic that is raised earlier

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yes, CIMD will require * egress from some server, which will be more difficult if egress is restricted. Maybe another bullet here? lmk if you have phrasing suggestions

@dend dend added the blog label Aug 22, 2025
Co-authored-by: Den Delimarsky <[email protected]>
Co-authored-by: Andrew Block <[email protected]>
@pcarleton pcarleton changed the title [draft] [blog] client registration options [blog] client registration options Aug 22, 2025
@pcarleton pcarleton marked this pull request as ready for review August 22, 2025 13:19
@pcarleton
Copy link
Member Author

Alright I think it's ready to publish! could I get a last ✅ ? @dend

@pcarleton pcarleton merged commit 93eb557 into main Aug 22, 2025
7 checks passed
@pcarleton pcarleton deleted the pcarleton/client-registration-blog branch August 22, 2025 18:38

### **Solution: Client ID Metadata Documents (CIMD)**

Client ID Metadata Documents (CMD), described in [OAuth Client ID Metadata Document](https://www.ietf.org/archive/id/draft-parecki-oauth-client-id-metadata-document-03.html) and implemented by Bluesky, elegantly sidestep these operational issues.
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
Client ID Metadata Documents (CMD), described in [OAuth Client ID Metadata Document](https://www.ietf.org/archive/id/draft-parecki-oauth-client-id-metadata-document-03.html) and implemented by Bluesky, elegantly sidestep these operational issues.
Client ID Metadata Documents (CIMD), described in [OAuth Client ID Metadata Document](https://www.ietf.org/archive/id/draft-parecki-oauth-client-id-metadata-document-03.html) and implemented by Bluesky, elegantly sidestep these operational issues.


### **Future: Platform-Level Attestation**

The strongest protection would be platform-level attestation, e.g. having MacOS, Windows, or Android attest that a piece of software is legitimate.
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
The strongest protection would be platform-level attestation, e.g. having MacOS, Windows, or Android attest that a piece of software is legitimate.
The strongest protection would be platform-level attestation, e.g. having macOS, Windows, or Android attest that a piece of software is legitimate.

@dend
Copy link
Contributor

dend commented Aug 22, 2025

@pja-ant - thanks for catching it, captured in a new PR: #1378

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

Successfully merging this pull request may close these issues.