Skip to content

Conversation

tplooker
Copy link
Collaborator

@tplooker tplooker commented Sep 5, 2025

Initial draft at this proposal, things to discuss include

  • Whether we should consider instead of a _supported metadata flag defining another method for client authentication because otherwise an AS cannot force the optimisation in the event it would like to.
  • Unrelated but I noticed nbf is defined for the Client Attestation PoP when I dont think its required, suggest we remove this.
  • How should we handle challenge vs nonce in the DPoP proof, technically we could support both.

Fixes #69

Comment on lines +571 to +574
1. If the Client Attestation was received via Header based Syntax (as described in [](#header-based)) the HTTP request MUST conform to exactly one of the following:

* The HTTP request contains exactly one field `OAuth-Client-Attestation` and one field `OAuth-Client-Attestation-PoP`.
* Both fields contain exactly one well-formed JWT.
* Separate proofs pattern: exactly one field `OAuth-Client-Attestation` and exactly one field `OAuth-Client-Attestation-PoP`, each containing exactly one well-formed JWT; OR
* Combined DPoP pattern: exactly one field `OAuth-Client-Attestation` and exactly one field `DPoP` meeting the requirements of [](#combined-dpop), and no `OAuth-Client-Attestation-PoP` field present.
Copy link
Collaborator Author

Choose a reason for hiding this comment

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

Note im definitely not convinced of the changes here, it implies the combined mode isn't really optional

3. There is no OAuth-Client-Attestation-PoP HTTP request header field present.

Provided the above conditions are meet the following additional rules apply:
1. The public key located in the DPoP proof MUST match the public key located in the `cnf` claim of the Client Attestation JWT.
Copy link
Collaborator Author

Choose a reason for hiding this comment

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

Should we be more specific around how this matching should occur, e.g if both JWK use thumbprint etc?


This specification requests registration of the following values in the IANA "OAuth Authorization Server Metadata" registry of {{IANA.OAuth.Params}} established by [RFC8414].

* Metadata Name: client_attestation_dpop_combined_mode_supported
Copy link
Collaborator Author

Choose a reason for hiding this comment

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

The alternative model here is to define a new method of client authentication so that the AS can effectively require the method for a specific client.

Copy link
Collaborator

Choose a reason for hiding this comment

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

We could also define a new token_endpoint_auth_method beside the existing one and solve it without introducing a new flag

@@ -325,6 +325,8 @@ To validate an HTTP request which contains the client attestation headers, the r
2. There is precisely one OAuth-Client-Attestation-PoP HTTP request header field, where its value is a single well-formed JWT conforming to the syntax outlined in [](#client-attestation-pop-jwt).
3. The signature of the Client Attestation PoP JWT obtained from the OAuth-Client-Attestation-PoP HTTP header verifies with the Client Instance Key contained in the `cnf` claim of the Client Attestation JWT obtained from the OAuth-Client-Attestation HTTP header.

Alternatively if client attestations are being used in conjunction with DPoP in the combined mode as specified in [](#combined-dpop) the processing rules as specified in that section apply.
Copy link
Collaborator

Choose a reason for hiding this comment

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

It feels a little odd to spread requirements and verification rules across multiple chapters/sections.


This specification requests registration of the following values in the IANA "OAuth Authorization Server Metadata" registry of {{IANA.OAuth.Params}} established by [RFC8414].

* Metadata Name: client_attestation_dpop_combined_mode_supported
Copy link
Collaborator

Choose a reason for hiding this comment

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

We could also define a new token_endpoint_auth_method beside the existing one and solve it without introducing a new flag


This section defines an OPTIONAL optimization that allows a single Proof of Possession (PoP) JWT to satisfy both (a) the Client Attestation PoP defined in this specification and (b) the DPoP proof defined in {{RFC9449}}. In this "combined mode" the Client Instance Key and the DPoP Key are the same asymmetric key pair, and a request using the mechanism carries only one PoP, the DPoP proof, instead of two separate PoP JWTs (the DPoP proof and Client Attestation PoP).

### Validating HTTP requests
Copy link
Collaborator

Choose a reason for hiding this comment

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

I would favor merging this with the other HTTP request section, so it's easier to compare both modes


Provided the above conditions are meet the following additional rules apply:
1. The public key located in the DPoP proof MUST match the public key located in the `cnf` claim of the Client Attestation JWT.
2. Beyond what is defined in {{RFC9449}} the following additional claims in the DPoP proof apply.
Copy link
Collaborator

Choose a reason for hiding this comment

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

I wonder if the iss value in the PoP really serves an important function, or whether to remove it, to avoid this additional claim for DPoP Proof

@paulbastian
Copy link
Collaborator

we're also missing the considerations for challenge/DPoP nonce

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

Successfully merging this pull request may close these issues.

Usecase: authenticating the key used for DPoP bound access tokens back to the client
2 participants