-
Notifications
You must be signed in to change notification settings - Fork 6
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
🚧 Let DPoP proposed standard supplant client signing key #10
🚧 Let DPoP proposed standard supplant client signing key #10
Conversation
- Allow PoP key to be stored in the JWT claims directly as `pop_key`, without the need of a `tdf_claims` object - This allows the token to be used with endpoints that require user signed content but are indifferent to entitlements
clarify dpop's role
protocol/README.md
Outdated
* Construct and send an Attribute Provider web service request, including sufficient information to identify the client and its capabilities. | ||
* In the signed access JWT, include the evidence of the client's public key in the `cnf` claim, and the entitlements in the `tdf_claims`. | ||
* A list of Certified OpenID Connect applications can be found at: https://openid.net/developers/certified/ OpenTDF has chosen Keycloak as its reference implementation IdP. | ||
* From Wikipedia: "Keycloak is an open source software product to allow single sign-on with Identity and Access Management aimed at modern applications and services. As of March 2018 this JBoss community project is under the stewardship of Red Hat. Keycloak is licensed under Apache 2.0." |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
* From Wikipedia: "Keycloak is an open source software product to allow single sign-on with Identity and Access Management aimed at modern applications and services. As of March 2018 this JBoss community project is under the stewardship of Red Hat. Keycloak is licensed under Apache 2.0." |
(Predates your change but) I don't think this line adds much, so feel like it should be nuked - there's no point to quoting the first sentence of a wikipedia article anybody can google.
Would rather simply link to Keycloak.org as suggested above.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I'll try moving to a footnote and see if that makes sense
Co-authored-by: Ben Leggett <854255+bleggett@users.noreply.github.com>
Co-authored-by: Ben Leggett <854255+bleggett@users.noreply.github.com>
@bleggett should I close this PR and start a new one in a branch named |
…lcik-virtru/spec into feature/dpop-compatibility
@dmihalcik-virtru can you update the PR comment itself (or link to a doc if necessary) with a concise explanation of what specific attacks the DPoP model here prevents against, that are not prevented by the existing "body signature PoP" in the current spec? I think that will be important/useful.
Meh, at this point that's probably not productive. I'll add a #draft PR label instead. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Having looked at the linked PR/draft implementation example (thx @dmihalcik-virtru - having a Real PR to back up a draft proposal is extremely helpful), this looks good to me.
@bleggett Added details about the current reference implementation to the PR description. PTAL |
@dmihalcik-virtru looks good to me, and hits all the stuff in CONTRIBUTING.md - you want to merge? After merge, I can cut a new minor version specbump tag. |
Co-authored-by: b-long <b-long@users.noreply.github.com>
@bleggett Sure, I'll merge after a restamp for the last commit. |
MINOR Update: Explicitly supporting IETF DPoP Draft Proposal
tdf_claims.client_public_signing_key
subclaimcnf.jkt
field, per the current draft proposalDPoP
header, which will include the complete key and request identifying informationA reference implementation of this change is now included with opentdf/backend and opentdf/client-web. If accepted we will port this to the remaining opentdf/client-*.
Reference Implementation Details
Client Implementation
For the client, we use an existing DPoP implementation to generate proofs. To use, we added a parameter (dpopEnabled) to the clients, and if present make this required.
Implementation: opentdf/web-sdk#118
Identity Provider Implementation (Access Token Generation)
Our reference IdP, Keycloak, provides a java plugin environment for adding claims to access tokens. Our current reference implementation extended our existing plugin, which adds the
tdf_claims
claim, to include thecnf.jkt
claim when there is a DPoP header in the code exchange.Reference: https://github.com/opentdf/backend/blob/9603538287e23240c6d40ea596cf42f8b26bfcc4/containers/keycloak-protocol-mapper/custom-mapper/src/main/java/com/virtru/keycloak/TdfClaimsMapper.java#L292
Access Point Validation (KAS)
KAS currently uses application level validation of the OIDC header. We extended this to include the DPoP check iff the access token includes the
jkt
claim.https://github.com/opentdf/backend/blob/9603538287e23240c6d40ea596cf42f8b26bfcc4/containers/kas/kas_core/tdf3_kas_core/dpop.py#L55
Checklist
draft-<change>
git tag -s 4.1.0 -m "Spec version 4.1.0 - did a thing"
)