-
Notifications
You must be signed in to change notification settings - Fork 20
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
Advanced flow #52
Advanced flow #52
Changes from 27 commits
55d221f
b3dbced
f261533
2758f55
f64854e
41e0018
c3cbb89
92579f6
77c2af2
2763e59
e0a72b1
ef1773c
dd4831f
540e6c8
b73cd10
47e91d3
3ca1dc0
47752aa
9ae3e30
03d291f
ed38346
95fcfb9
78345d4
72c2967
0873d4a
874f13c
01339f9
ba781a1
03649aa
67420e6
cafba20
fff23fc
08d02a0
ad91012
ca8a978
b469b1f
a25840a
0a85508
32259a1
e8f97ac
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,48 @@ | ||
```plantuml | ||
@startuml | ||
|
||
autonumber | ||
|
||
participant "User Agent" as u | ||
|
||
box "Verifier" | ||
participant "Frontend" as r | ||
participant "Presentation Endpoint" as rp | ||
participant "Response Endpoint" as rb | ||
end box | ||
|
||
box "Wallet" | ||
participant "Discovery Endpoint" as w | ||
participant "Metadata" as wm | ||
end box | ||
|
||
u --> r : use | ||
activate r | ||
|
||
r --> u: **discover request**\n(presentation_uri, context) | ||
deactivate r | ||
u --> w: **discover request**\n(presentation_uri, context) | ||
activate w | ||
w --> rp: **create presentation request** (context, iss, w_nonce, \nwallet attestation, **wallet attestation pop(v_nonce)**) | ||
note over u, w: HTTP status code 401 signals need to authenticate | ||
rp --> wm: get wallet metadata | ||
wm --> rp: wallet metadata | ||
rp -> rp: create and sign presentation request object (client_id, w_nonce, nonce, response_uri, \npresentation_definition, state) | ||
rp --> w: **signed request object** (client_id, w_nonce, nonce, response_uri, \npresentation_definition, state) | ||
note over u, w: do we want to allow unsigned presentation request objects, too? | ||
w -> w: authenticate and\n authorize Verifier | ||
|
||
note over u, w: user authentication and credential selection/confirmation | ||
|
||
w -> w: create verifiable\npresentation (credential) | ||
w --> rb: post response \n(vp_token, presentation_submission, state) | ||
rb --> w: redirect_url | ||
w --> u: response (response_code) | ||
u --> r: response (response_code) | ||
activate r | ||
r --> rb: get presentation response\n (transaction_id, response_code) | ||
rb --> r: presentation response | ||
r -> r: validate presentation \n(incl. nonce binding) | ||
r -> r: use presented credential | ||
@enduml | ||
``` |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,4 @@ | ||
{ | ||
"presentation_request_uri": "verifier.example.com/presentation_request", | ||
"context": "register_kyc" | ||
} | ||
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. could these kind of small examples be in the text and not as a separate file..? 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. is this file even used? looks like it's inline already at https://github.com/openid/OpenID4VP/pull/52/files?diff=unified&w=0#diff-3118c9756a1d7b361bb53af8bd9d65666476a27cfeeced56c47a5dccc38eac55R294 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. it is inline, I just used to file to format the example - can remove it once we merge 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. thank you |
Original file line number | Diff line number | Diff line change | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
@@ -126,7 +126,9 @@ This specification supports any Credential format used in the Issuer-Holder-Veri | |||||||||||||
|
||||||||||||||
Implementations can use any pre-existing OAuth 2.0 Grant Type and Response Type in conjunction with this specification to support different deployment architectures. | ||||||||||||||
|
||||||||||||||
OpenID for Verifiable Presentations supports scenarios where the Authorization Request is sent both when the Verifier is interacting with the End-User using the device that is the same or different from the device on which requested Credential(s) are stored. | ||||||||||||||
OpenID for Verifiable Presentations supports scenarios where the Authorization Request is sent both when the Verifier is interacting with the End-User using the device that is the same or different from the device on which requested Credential(s) are stored. | ||||||||||||||
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. I know this sentence was there previously, but I have a hard time parsing it. 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. yes, let's try to make it simpler. 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. suggestions welcome 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.
Suggested change
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. probably it is worst than before ... let's see if something might be useful. 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.
Suggested change
how's this? |
||||||||||||||
|
||||||||||||||
This specification also provides the Verifier an option to first discover the Wallet's capabilities before the actual presentation request is created and passed to the Wallet. | ||||||||||||||
|
||||||||||||||
This specification supports the response being sent using a redirect but also using an HTTPS POST request. This enables the response to be sent across devices, or when the response size exceeds the redirect URL character size limitation. | ||||||||||||||
|
||||||||||||||
|
@@ -215,6 +217,55 @@ Figure: Cross Device Flow | |||||||||||||
|
||||||||||||||
(3) The Wallet prepares the Verifiable Presentation(s) of the Verifiable Credential(s) that the End-User has consented to. It then sends to the Verifier an Authorization Response where the Verifiable Presentation(s) are contained in the `vp_token` parameter. | ||||||||||||||
|
||||||||||||||
## Same Device Flow with Wallet Capabilities Discovery {#same_device_with_discovery} | ||||||||||||||
tlodderstedt marked this conversation as resolved.
Show resolved
Hide resolved
|
||||||||||||||
|
||||||||||||||
Below is a diagram that shows the flow as described in (#same_device), but with an additional pre-step used that allows the Verifier to discover the Wallet's capabilities and tailor the actual request. | ||||||||||||||
tlodderstedt marked this conversation as resolved.
Show resolved
Hide resolved
|
||||||||||||||
|
||||||||||||||
In this case, the Verifier starts the flow by discovering the Wallet's capabilities through an additional message exchange. This is especially useful, if the Verifier starts the process using a URL serving as alias for a group of wallets (e.g. a custom scheme) but would like to tailor the presentation request to the particular wallet. | ||||||||||||||
tlodderstedt marked this conversation as resolved.
Show resolved
Hide resolved
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.
Suggested change
|
||||||||||||||
|
||||||||||||||
In this flow, the Verifier first prepares a discovery request to be provided to the Wallet. The Wallet answers this request by sending an HTTP POST request to the Verifier, providing the Verifier with its Issuer URL (identifying the wallet provider and used to fetch wallet metadata) and further parameters. The Verifier then creates a presentation request tailored to the capabilities and trust domain of the particular Wallet and passes the request object in the HTTP POST response. The rest of the flow works like described in (#same_device). The discovery request can also be used in cross device scenarios where the Verifier would render the discovery message in a QR code. | ||||||||||||||
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.
Suggested change
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.
Suggested change
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.
Other cases where the trust model requires that the metadata would be provided from trusted lists or other kind of signed artifacts that would be given directly within the http post parameters 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 verifier receives a request via HTTPS, I don't see how this works for offline scenarios |
||||||||||||||
|
||||||||||||||
Note: The diagram does not illustrate all the optional features of this specification. | ||||||||||||||
|
||||||||||||||
Note: The usage of the Request URI as defined in [@!RFC9101] does not depend on any other choices made in the protocol extensibility points, i.e., it can be used in the Same Device Flow, too. | ||||||||||||||
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.
Suggested change
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. I'm not sure I have enough context for understanding the relevance of this sentence here; the section did not talk about request URI so far. Should this be moved somewhere else?
tlodderstedt marked this conversation as resolved.
Show resolved
Hide resolved
|
||||||||||||||
|
||||||||||||||
!--- | ||||||||||||||
~~~ ascii-art | ||||||||||||||
~~~ ascii-art | ||||||||||||||
+--------------+ +--------------+ +--------------+ | ||||||||||||||
| User | | Verifier | | Wallet | | ||||||||||||||
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.
Suggested change
|
||||||||||||||
+--------------+ +--------------+ +--------------+ | ||||||||||||||
| | | | ||||||||||||||
| Interacts | | | ||||||||||||||
|---------------->| | | ||||||||||||||
| | (1) Discovery Request | | ||||||||||||||
| | (Presentation Request URI) | | ||||||||||||||
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. Technically, it's a Presentation Request Request URI. That sounds stupid, so we might call it Fetch Presentation Request URI or something similar. 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 interaction between the End-User and the Verifier is misleading, we assume that the End-User is able to interact with a Verifier only though an user-agent or a wallet instance 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.
I'd propose |
||||||||||||||
| |-------------------------------------------------->| | ||||||||||||||
| | | | ||||||||||||||
| | (2) Request the Request Object | | ||||||||||||||
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. I think (2) is mainly a "Discovery Response", that also happens to trigger request object from the verifier. 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.
Suggested change
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. there is discovery, but the result is a request object 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. this reminds me the italian flow where we have mixed the provisioning of the wia with DPoP to the request_uri endpoint. We are looking for a better specialization of the endpoints, then the proposed, alternative, flow was provided in this comment: #52 (comment) |
||||||||||||||
| |<--------------------------------------------------| | ||||||||||||||
| | | | ||||||||||||||
| | (2.5) Respond with the Request Object | | ||||||||||||||
| | (Presentation Definition) | | ||||||||||||||
| |-------------------------------------------------->| | ||||||||||||||
| | | | ||||||||||||||
| User Authentication / Consent | | ||||||||||||||
| | | | ||||||||||||||
| | (3) Authorization Response | | ||||||||||||||
| | (VP Token with Verifiable Presentation(s)) | | ||||||||||||||
| |<--------------------------------------------------| | ||||||||||||||
~~~ | ||||||||||||||
!--- | ||||||||||||||
Figure: Cross Device Flow | ||||||||||||||
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.
Suggested change
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. changed to "Same Device Flow with Wallet Capabilities Discovery" 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. I would like to cover both cross device and same device within this PR an alternative flow was provided aiming to satisfy this: #52 (comment) |
||||||||||||||
|
||||||||||||||
(1) The Verifier sends to the Wallet a Discovery Request that contains a Presentation URI to where Wallet can send information about itself and obtain the Request Object containing the actual Authorization Request. | ||||||||||||||
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. Since custom scheme is mentioned above, the path of this request through the user agent should be shown in the ascii art above, like in the plantuml. 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. This level of detail is used in same device section, too. I suggest to file an issue to change both. 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.
Suggested change
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.
Suggested change
we assume that a wallet instance may not support this feature, in this cases we should give some guidance to the implementers. I assume that the Verifier would go ahead with predefined parameters 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. |
||||||||||||||
|
||||||||||||||
(2) The Wallet sends an HTTPS POST request to the Presentation URI. The request contains information about the context as defined by the Verifier, the wallet's Issuer URL and may contain further parameters (including a wallet attestation). | ||||||||||||||
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.
Suggested change
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.
Suggested change
|
||||||||||||||
|
||||||||||||||
(2.5) The HTTPS POST response returns the Request Object containing Authorization Request parameters based on the information specific to the Wallet that it received in step (2). It especially contains a Presentation Definition as defined in [@!DIF.PresentationExchange] that describes the requirements of the Credential(s) that the Verifier is requesting to be presented. Such requirements could include what type of Credential(s), in what format(s), which individual Claims within those Credential(s) (Selective Disclosure), etc. The Wallet processes the Request Object and determines what Credentials are available matching the Verifier's request. The Wallet also authenticates the End-User and gathers her consent to present the requested Credentials. | ||||||||||||||
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. we should not remark this since there may be cases where the OAuth 2.0 scopes are used and PE might not be used |
||||||||||||||
|
||||||||||||||
(3) The Wallet prepares the Verifiable Presentation(s) of the Verifiable Credential(s) that the End-User has consented to. It then sends to the Verifier an Authorization Response where the Verifiable Presentation(s) are contained in the `vp_token` parameter. | ||||||||||||||
|
||||||||||||||
# Scope | ||||||||||||||
|
||||||||||||||
OpenID for Verifiable Presentations extends existing OAuth 2.0 mechanisms as following: | ||||||||||||||
|
@@ -228,6 +279,84 @@ OpenID for Verifiable Presentations extends existing OAuth 2.0 mechanisms as fol | |||||||||||||
|
||||||||||||||
Presentation of Verifiable Credentials using OpenID for Verifiable Presentations can be combined with the user authentication using [@SIOPv2], and the issuance of OAuth 2.0 Access Tokens. | ||||||||||||||
|
||||||||||||||
# Discovery Request | ||||||||||||||
|
||||||||||||||
The Discovery Request allows Verifers to discover the Wallet's capabilities before they create the actual presentation request. It also allows the Wallet to authenticate towards the Verifier and to provide the Verifier with additional data used in the creation of the request signature and to encrypt the request at the application layer (if needed). | ||||||||||||||
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.
Suggested change
in my mind, wallet's endpoint, wallet's capabilities, and wallet attestation are three different things, and I am not sure "wallet capabilities" can be used to express them all 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. I assume that the wallet instance attestation contains the wallet's capabilities, materially defined with:
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. @Sakurann those three things are differentiated in the current text. wallet capabilities is in the first sentence, authentication in the second sentence 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. @peppelinux I assume the capabilities are conveyed using wallet metadata. I agree, there can be other ways. Let's discuss how we can support them. |
||||||||||||||
|
||||||||||||||
This specification defines the following new parameters for the Discovery Request message: | ||||||||||||||
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.
Suggested change
|
||||||||||||||
|
||||||||||||||
`presentation_request_uri`: | ||||||||||||||
: A string containing an HTTPS URL pointing to a resource under the control of the Verifier where the Wallet is supposed to obtain the presentation request object. | ||||||||||||||
Comment on lines
+288
to
+289
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. I don't think I would also borrow some language from https://www.rfc-editor.org/rfc/rfc9101#section-5-2.4 like
Suggested change
not sure we need 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. I'm not in favor of discovery AND request, since I assume that there might be cases where a wallet solution doesn't support the discovery feature then the request_uri endpoint should be untouched I assume, according to my implementations, that the RP that can't assert the wallet capabilities should attests to the wallet instance the lowest level of security, if supported for the requirements of the LoA, and using a standard/defined/wellknown and common capabilities for the wallet ecosystems 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 idea in the PR is to have a new endpoint (the presentation endpoint) that bundles discovery and request creation. We could also split this into discovery and request_uri. However I would like to understand the consequences. What directly comes to mind is that the state must be kept at the verifier between the two requests whereas the current design allows the verifier to create the request and directly release it to the wallet. 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. @Sakurann I suggest to call it 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. I'm for then we have divided the endpoints by using the request_uri endpoint with the sole addition of the discovery_state that allows the RP to do its lookups. This value could be also encrypted (depending by what would cost more in an infrastructure: CPU or Storage!) |
||||||||||||||
|
||||||||||||||
`context`: | ||||||||||||||
: A string identifying the context of the discovery request from the perspective of the Verifier. The value is opqaue to the Wallet, it MUST pass this value to the Presentation Endpoint Request (see below). | ||||||||||||||
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. I think it is best to avoid using a term
Suggested change
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. I intentionally did not designate it as state as it is intended to be used to label the context ("entrance to east wing") and not carry a certain state of a certain transaction. This allows to use the same discovery request for multiple transactions (print it out and put it onto the wall). 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. I think it is good to use something distinct from 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. I fully agree with Kristina, 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.
Suggested change
|
||||||||||||||
|
||||||||||||||
The Discovery Request MUST be represented as a JSON object with all parameters as top-level JSON claims. | ||||||||||||||
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. This is surprising. Why would this be JSON? The two parameters should be simple URL parameters. 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.
Suggested change
|
||||||||||||||
|
||||||||||||||
The following is an example request: | ||||||||||||||
|
||||||||||||||
```JSON | ||||||||||||||
{ | ||||||||||||||
"presentation_request_uri": "verifier.example.com/presentation_request", | ||||||||||||||
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.
Suggested change
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. according to my rpevious comments, it would be
|
||||||||||||||
"context": "register_kyc" | ||||||||||||||
tlodderstedt marked this conversation as resolved.
Show resolved
Hide resolved
|
||||||||||||||
} | ||||||||||||||
``` | ||||||||||||||
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. just to note that parameter names might change based on the comments above. |
||||||||||||||
|
||||||||||||||
The Discovery Request is either sent to the Discovery Endpoint of the Wallet or is rendered as a QR Code. | ||||||||||||||
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.
Suggested change
|
||||||||||||||
|
||||||||||||||
Note: the Discovery Request intentionally does not use OAuth parameters, such as a `client_id`. The idea is to allow the Verifier to select the Client Identifier it wants to use for interacting with the Wallet after it has determined the trust mechanisms and domains the Wallet supports. | ||||||||||||||
|
||||||||||||||
## Discovery Endpoint | ||||||||||||||
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. I think this section needs to be in the Verifier Metadata section https://openid.bitbucket.io/connect/openid-4-verifiable-presentations-1_0.html#name-wallet-metadata-authorizati and not here 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. This endpoint is not the typical static "get some metadata" endpoint. It is part of the application logic of the wallet. I therefore added it here. I think this is the best solution for readability and understandability. |
||||||||||||||
|
||||||||||||||
This is an HTTPS endpoint offered by the Wallet. The Discovery Request MUST be sent as an HTTPS GET request or an HTTP redirect to the Discovery Endpoint URL defined in (#wallet-metadata). | ||||||||||||||
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.
Suggested change
The redirection is still a GET request. 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.
please don't, we should assume that the wallet should not require any online HTTPs endpoint 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. you are absolutely right, I rewrote the section. please have a look |
||||||||||||||
|
||||||||||||||
The HTTPS URL MUST contain a single URI query parameter `discovery` where the value is the JSON object as defined above. | ||||||||||||||
|
||||||||||||||
## Presentation Endpoint | ||||||||||||||
|
||||||||||||||
The Presentation Endpoint is an HTTPS endpoint exposed by the Verifier. | ||||||||||||||
Comment on lines
+315
to
+317
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.
Suggested change
... or Fetch Presentation Request Endpoint if renaming is agreed upon. |
||||||||||||||
|
||||||||||||||
### Presentation Request | ||||||||||||||
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. I am not comfortable calling this |
||||||||||||||
|
||||||||||||||
Presentation Requests MUST be HTTPS POST requests with the "application/json" media type. | ||||||||||||||
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.
Suggested change
|
||||||||||||||
|
||||||||||||||
The follwowing parameters are defined: | ||||||||||||||
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.
Suggested change
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. please indicate which parameters is REQUIRED vs OPTIONAL - hard to review without that 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.
Suggested change
|
||||||||||||||
|
||||||||||||||
`context`: | ||||||||||||||
: A JSON String containing the value of the corresponding Discovery Request's `context` parameter. | ||||||||||||||
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.
Suggested change
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.
Suggested change
There is no need to repeat "JSON" in the parameter definition of an object that itself is JSON encoded (and it may lead to misinterpretation). |
||||||||||||||
|
||||||||||||||
`issuer`: | ||||||||||||||
: A JSON containing an HTTPS URL designating the Issuer URL of the Wallet. The Verifier can obtain the Wallet's metadata by adding the well-know location `oauth-authorization-server` as specifid in [@!RFC8414]. | ||||||||||||||
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.
Suggested change
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. this term I'm strongly not in favour of requiring the entities to be online and that the wallet might exposes its metadata thought the wallet providers endpoints the wallet instance attestation would be the best place, attestable and non-repudiable, where the wallet metadata can be provided. |
||||||||||||||
|
||||||||||||||
`w_nonce`: | ||||||||||||||
: A JSON String containg a cryptographic nonce the Verifier MUST use when creating the signed presentation request object. | ||||||||||||||
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.
Suggested change
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. Use where? 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. where the reader is able to distinguish between nonce and cryptographic nonce? |
||||||||||||||
|
||||||||||||||
`client_assertion` | ||||||||||||||
: A JSON String containing a Wallet attestation along with a proof of possession of the configuration key as defined in [@!I-D.ietf-oauth-attestation-based-client-auth]. This assertion is used to authenticate the Wallet towards the Verifier. | ||||||||||||||
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.
Suggested change
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. why isn't it a JSON string in this case?
tlodderstedt marked this conversation as resolved.
Show resolved
Hide resolved
|
||||||||||||||
|
||||||||||||||
### Presentation Response | ||||||||||||||
tlodderstedt marked this conversation as resolved.
Show resolved
Hide resolved
|
||||||||||||||
|
||||||||||||||
Presentation Response MUST be HTTPS POST response with the "application/json" media type. | ||||||||||||||
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. modify as for the request above |
||||||||||||||
|
||||||||||||||
The follwowing parameters are defined: | ||||||||||||||
|
||||||||||||||
`request`: | ||||||||||||||
: A JSON String containing the signed request object as defined in [@RFC9101]. It MUST fulfill the requirements as defined in (#vp_token_request). | ||||||||||||||
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. I think this is confusing. why is there suddenly a need to define a top level claim? usually the entire object in the response is a request object without any top level claims. the parameter name also conflicts with the 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. Agree, I would just put the whole thing into the response body. |
||||||||||||||
|
||||||||||||||
|
||||||||||||||
### Presentation Error Response | ||||||||||||||
tlodderstedt marked this conversation as resolved.
Show resolved
Hide resolved
|
||||||||||||||
|
||||||||||||||
The error code `401` signals to the Wallet that it needs to authenticate to the Verifier. In this case, the error response SHOULD contain a `WWW-Authenticate` header for every attestation method the Verifier supports. | ||||||||||||||
|
||||||||||||||
Below a non-normative example for the Wallet attestation method as specified above. The `WWW-Authenticate` contains the nonce value the Wallet MUST use in the calculation of the proof of possession of the wallet attestation. | ||||||||||||||
|
||||||||||||||
``` | ||||||||||||||
HTTP/1.1 401 Unauthorized | ||||||||||||||
WWW-Authenticate: wallet-attestation error="use_nonce", \ | ||||||||||||||
error_description="Verifier requires wallet attestation" | ||||||||||||||
Nonce: eyJ7S_zG.eyJH0-Z.HX4w-7v | ||||||||||||||
``` | ||||||||||||||
|
||||||||||||||
# Authorization Request {#vp_token_request} | ||||||||||||||
|
||||||||||||||
The Authorization Request follows the definition given in [@!RFC6749] taking into account the recommendations given in [@!I-D.ietf-oauth-security-topics]. | ||||||||||||||
|
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.