Skip to content

Similar proposal in AT Protocol: DPoP-bound private_key_jwt client authentication #123

@devinivy

Description

@devinivy

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 a cnf claim using the jkt 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:

That's where we're currently at—appreciate the consideration from this group, and the work being done on this draft.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions