Hi all,

I recently built a prototype of DPoP using Go, and wanted to provide
some feedback as I went about the implementation.

The implementation is open source: https://github.com/pquerna/dpop

Overall the spec felt functional, though I think the biggest gaps for
a deployment are with the Access Token interactions, but this makes
sense since that seems to be addressed in the future by
<https://tools.ietf.org/html/draft-ietf-oauth-access-token-jwt-00>

Jumping into specific items:

cnf in DPoP-Proof
>   o  "cnf": Confirmation claim as per [RFC7800] containing a member
>      "dpop+jwk", representing the public key chosen by the client in
>      JWK format (REQUIRED for DPoP Binding JWTs, OPTIONAL for DPoP
>      Proof JWTs).

Is there a use case for this being present in the DPoP-Proof JWT?  As
I've implemented DPoP, I didn't see how it was helpful to be sent as a
`cnf` claim of the Proof?

Request Headers vs Parameters
> 5.  Token Request (Binding Tokens to a Public Key)

Placing the DPoP Binding JWT in the HTTP Header `DPoP-Binding` is
different than most other OAuth extensions that I am familiar with.
It is easy in the Go OAuth2 library to add URL / /body params to the
`/token` endpoint, but it is impossible to add an HTTP Header.  Is
there a reason that the binding can't be sent as an OAuth Parameter in
the token request body?

HTTP Request Signing
>   o  "http_method": The HTTP method for the request to which the JWT is
>      attached, in upper case ASCII characters, as defined in [RFC7231]
>      (REQUIRED).
>
>   o  "http_uri": The HTTP URI used for the request, without query and
>      fragment parts (REQUIRED).

HTTP Request signing may be a quagmire that this spec wishes to avoid,
but it seems very hard to avoid "fixing" it for at-scale adoption.
With the Okta-hat on, I think this is one area we would like to see
some iteration on.  I think it would be ideal to not require multiple
client sign() and server validate() PKI operations per request, so
this is where combining DPoP-Proof and a Request Signature start
making sense to me.

Keeping it simple, there are two approaches for DPoP for adding
attesting about the HTTP Request:

  a) Adding parts of the HTTP Request as claims
  b) Adding a hash of an HTTP Request as a claim

For option (b), it seems like part of this could live in a separate spec:
 1) request canonicalization
 2) request hashing

<https://tools.ietf.org/html/draft-cavage-http-signatures-11> does
cover request canonicalization, but the hashing is part of the
specific signature scheme.  From an implementors POV, layering
draft-cavage-http-signatures-11 in addition to DPoP is annoying since
it would take two sign or verify key operations per request.

I'm not sure where the spec-author team wants to take this area, but
am interested in providing feedback.

JWT as AT
>  7.  IANA Considerations
>
>    [[TODO: MIME type registration for at+jwt ]]

Assume this will eventually be done via
<https://tools.ietf.org/html/draft-ietf-oauth-access-token-jwt-00>

Thank you for the work so far, and I'm happy to provide further
feedback as the spec evolves.

Paul

_______________________________________________
OAuth mailing list
OAuth@ietf.org
https://www.ietf.org/mailman/listinfo/oauth

Reply via email to