DPoP proof should always be sent to our provider in the new version
for now we are only supporting the authorisation code grant type, which is used by sib-auth. Implicit grant type has been recommended against by the Solid-OIDC specification
No work required for PKCE implementation (PKCE is already supported by Django-WebIDOIDC-Provider, via the code challenges included in the tokens)
I think no changes are required to generate ID token/refresh token
Implementation
Orientating to codebase, changes to unit tests (1.5 days)
converts DPoP Public Key to JWT thumbprint (2h)
binding user's Public Key to the Access Token ("DPoP-bound Access Token"), by including the JWT thumbprint in the Token (2h)
Edited
Designs
Child items
...
Show closed items
Linked items
0
Link issues together to show that they're related.
Learn more.
@calummackervoy Sorry I had an incident to handle yesterday. I just had a look at your issue. I'm not sure where you me exactly so I just started with the functions that are missing something to start the discussion.
Before implementing the full stuff, I started to play with it a bit. I attached a file with some dummy code generating a HMAC-SHA256 token and a RSA-SHA256 token (closer to what we need to implement).
I just did that to, at least, make sure my understanding was compliant with the existing library. It seems ok as both generated tokens successfully passed the https://jwt.io/ verification tool.
Now I start implementing the extra stuff we need for DPOP Proof.
I think that the DPoP proof produces a valid DPoP header from that spec you posted ? I skipped on the htu for now and I suppose other things like the alg should be passed as parameters
Ah nice yeah the file you attached looks great :)
I'll message you about a call for how we can split the work
Oh my bad. In the end there isn't anything we have to do on the cryptographic side. We are just packing headers differently. So we could you the pyjwt as it is. And we can check our DPOP token with jwt.io.
It is fixed now ! But manipulation of raw data tends to be quite difficult to read. So you may have problems to follow my code. Plus, I think you may have difficulties to build the public key from the jwt. It contains only the modulus and the exponent. This is just what you need but it requires some computation to rebuild the whole public key.
Call me before hitting your head against the wall ;)
In future, do I also want to hardcode a default setting like I do there (djangoldp!212 (diffs)) just in case the djangoldp_settings.py is overridden at runtime ?
Or should I assume from now that if my_setting is defined in djangoldp_settings, then getattr(settings, 'my_setting') won't throw an error and I shouldn't hardcode a default ?