-
Notifications
You must be signed in to change notification settings - Fork 10
Description
In AT Protocol we've recently published a proposal that takes a similar shape and fills similar use cases to attestation-based client authentication as described in the draft being worked on here. It can be found here: 0010-client-assertion-backend. Once the proposal is finalized, it could end up being widely adopted in the AT Protocol ecosystem, as we have many folks who want to author browser-based clients that are given the security and UX affordances of a confidential client.
We wanted to share our use case and our thinking with the hopes that we may be able to converge on something compatible with the work being done here.
Rather than proposing a new client authentication method, we opted to layer a small mechanism on top of the private_key_jwt method from RFC 7523. It's quite limited:
[If] the
client_assertion
JWT contains acnf
claim using thejkt
method (JWK Thumbprint Confirmation Method) then it MUST be validated by the AS against the public key of the request’s DPoP proof.
The result is DPoP-bound client assertions, which fits neatly with existing DPoP-bound authorization flows, i.e. both authorization code and access token binding as described in RFC 9449. We considered the need for separate client keys in the client attestation vs. the authorization flow in our proposal, as has been raised in #67 and more recently #74. We do not anticipate any practical issues with using a single PoP key and mechanism, but would be interested to continue getting to the bottom of that question.
On the flip side, we certainly see many benefits to using a single PoP mechanism across these OAuth flows. We found the following benefits aligning on DPoP and private_key_jwt client authentication:
- overall the specification becomes much smaller:
- answers questions around the nonce mechanism, as actively discussed in Support returning nonce in any responses, similar to DPoP #101 and Evolution of the nonce fetching #110.
- supports authorization code binding, as discussed in Authorization code binding to client instance #56.
- supports binding the PoP to the attestation used to authenticate, as discussed in PoP attestation binding #47.
- answers to the attack surface area when used in conjunction with DPoP-bound access tokens, as discussed in Usecase: authenticating the key used for DPoP bound access tokens back to the client #69.
- as a result it's more straightforward for client implementers, particularly those who already implement DPoP-bound access tokens, which we believe will continue to rise in popularity. Fewer novel PoP implementations on the client side has its security benefits too.
That's where we're currently at—appreciate the consideration from this group, and the work being done on this draft.