generated from camaraproject/Template_API_Repository
-
Notifications
You must be signed in to change notification settings - Fork 32
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
Clarifications on using sender-constraint tokens DPoP #225
Open
AxelNennker
wants to merge
9
commits into
main
Choose a base branch
from
recommend_dpop
base: main
Could not load branches
Branch not found: {{ refName }}
Loading
Could not load tags
Nothing to show
Loading
Are you sure you want to change the base?
Some commits from the old base branch may be removed from the timeline,
and old review comments may become outdated.
Open
Changes from 8 commits
Commits
Show all changes
9 commits
Select commit
Hold shift + click to select a range
d3215a3
RECOMMEND using sender-constraint tokens DPoP
AxelNennker e42f205
MAY use DPoP instead of RECOMMENDS DPoP
AxelNennker cc737d9
add Sender-Constrained Tokens to TOC
AxelNennker b5ef401
typo
AxelNennker 5646d21
typo
AxelNennker 9e4cf14
MUST not -> MUST NOT
AxelNennker 42feaa4
Provider supports DPoP => Consumer MUST use DPoP
AxelNennker 565d1ed
added table on expected provider behavior at API endpoint
AxelNennker 00437fd
remove If the API Provider supports DPoP, the API Consumer MUST use D…
AxelNennker File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change | ||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
@@ -7,6 +7,7 @@ | |||||||||||||||||||||||||||||||||||||||||||||||||||||
* [Conventions](#conventions) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
* [General Considerations](#general-considerations) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
+ [Transport Security](#transport-security) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
+ [Sender-Constrained Tokens](sender-constrained-tokens) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
* [OIDC Authorization Code Flow](#oidc-authorization-code-flow) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
+ [Cross-Site Request Forgery Protection](#cross-site-request-forgery-protection) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
* [Client-Initiated Backchannel Authentication Flow](#client-initiated-backchannel-authentication-flow) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
@@ -62,6 +63,36 @@ Unless otherwise noted, all the protocol parameter names and values are case sen | |||||||||||||||||||||||||||||||||||||||||||||||||||||
### Transport Security | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
All network connections MUST use TLS 1.2 or better. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||
### Sender-Constrained Tokens | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||
[OAuth 2.0 Security Best Current Practice](https://datatracker.ietf.org/doc/html/draft-ietf-oauth-security-topics#section-2.2.1) and the [FAPI 2.0 Baseline Profile](https://openid.net/specs/fapi-2_0-baseline-01.html) both RECOMMEND that authorization and resource servers use mechanisms for sender-constraining access tokens. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||
This document states that Demonstrating Proof of Possession (DPoP) [RFC9449](https://datatracker.ietf.org/doc/html/rfc9449) MAY be used by API Consumers, to prevent misuse of stolen and leaked access tokens. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||
CAMARA authorization servers MUST NOT respond with an error if they do not support DPoP. DPoP allows authorization servers to issue tokens that are not sender-constrained even if a valid DPoP header is present in the authorization request. It is up to the API consumer to decide whether none-sender-constrained tokens meet their security requirements. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||
If the API Provider supports DPoP, support for it MAY be expressed by the server metadata field `dpop_signing_alg_values_supported` or alternate API documentation. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
If the API Provider supports DPoP, the API Consumer MUST use DPoP. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
AxelNennker marked this conversation as resolved.
Show resolved
Hide resolved
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||
API consumers with high security demands that e.g. want to achieve EIDAS LOA high can be set to be required to always send DPoP requests. This requirement is expressed by the API consumer's metadata in the field `dpop_bound_access_tokens`. This requirement on the API consumer is determined at onboarding time. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||
The following table illustrated the expected behaviour of the API Provider at the API endpoint. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||
| API Consumer | API Provider |Proof Presented? | Provider Behavior | | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
| -------------- | -------------- |----------| -------------------------------------------------------------------------------------| | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Supports DPoP | Supports DPoP | Yes | MUST process the proof | | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Supports DPoP | Supports DPoP | No | MUST validate the bearer token | | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Supports DPoP | Requires DPoP | Yes | MUST process the proof | | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Supports DPoP | Requires DPoP | No | MUST return an appropriate HTTP error with details in the custom message text | | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Supports DPoP | No DPoP Support | Yes | MUST drop the HTTP parameter | | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Supports DPoP | No DPoP Support | No | MUST validate the bearer token | | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Requires DPoP | Supports DPoP | Yes | MUST process the Proof | | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Requires DPoP | Requires DPoP | Yes | MUST process the Proof | | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Requires DPoP | No DPoP Support | Yes | MUST drop the unrecognized HTTP header | | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
| No DPoP Support| Supports DPoP | No | MUST validate the bearer token | | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
| No DPoP Support| Requires DPoP | No | MUST return an appropriate HTTP error with details in the custom message text | | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
| No DPoP Support| No DPoP Support | No | MUST validate the bearer token | | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
Comment on lines
+78
to
+93
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. The API Consumer either presents the DPoP proof to the API Provider, or they do not. Whether they "require" the API Provider to support DPoP or not does not affect API Provider behaviour. So the table can be greatly simplified.
Suggested change
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||
## OIDC Authorization Code Flow | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||
The OIDC Authorization Code Flow is defined in [OpenID Connect](https://openid.net/specs/openid-connect-core-1_0.html) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
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.