Skip to content
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

request_uri extension #59

Merged
merged 100 commits into from
Mar 26, 2024
Merged
Show file tree
Hide file tree
Changes from 38 commits
Commits
Show all changes
100 commits
Select commit Hold shift + click to select a range
0ef69f7
create sequence diagram
tlodderstedt Nov 2, 2023
b402aa7
added POST to indicate HTTP method
tlodderstedt Nov 2, 2023
673fcf7
added create_presentation_uri parameter
tlodderstedt Nov 2, 2023
9dff282
added create request endpoint
tlodderstedt Nov 2, 2023
f945d54
fixed iss
tlodderstedt Nov 2, 2023
0a42d0f
Update openid-4-verifiable-presentations-1_0.md
tlodderstedt Nov 8, 2023
37fbccf
added iat and exp
tlodderstedt Nov 8, 2023
b7c2570
Update openid-4-verifiable-presentations-1_0.md
tlodderstedt Nov 8, 2023
350391d
added trustworthiness check to sequence diagram
tlodderstedt Nov 8, 2023
7822756
Merge branch 'request_uri2' of https://github.com/openid/OpenID4VP in…
tlodderstedt Nov 8, 2023
8056fc1
Update openid-4-verifiable-presentations-1_0.md
tlodderstedt Nov 17, 2023
9061d50
Update openid-4-verifiable-presentations-1_0.md
tlodderstedt Nov 17, 2023
ba585be
Update openid-4-verifiable-presentations-1_0.md
tlodderstedt Nov 17, 2023
b1ee70e
reworked based on feedback from Paul and Giuseppe
tlodderstedt Dec 20, 2023
d29107b
some fixes
tlodderstedt Dec 20, 2023
d198019
fixed intendation
tlodderstedt Dec 20, 2023
30d59a8
changed parameter name according to Oliver's suggestion
tlodderstedt Dec 20, 2023
63a86f7
fixed request mode in diagram
tlodderstedt Jan 6, 2024
70ac39b
renamed w_nonce to issuer_nonce
tlodderstedt Jan 6, 2024
e35ab32
signed request is sent as request parameter
tlodderstedt Jan 6, 2024
8cb645f
note on nonce binding of vp_token content
tlodderstedt Jan 6, 2024
0ced90a
Update diagrams/request_uri_mode_create.md
tlodderstedt Jan 6, 2024
42f6866
Update diagrams/request_uri_mode_create.md
tlodderstedt Jan 6, 2024
4f335fc
added explanation why the first request should be signed
tlodderstedt Jan 6, 2024
18fd478
Merge branch 'request_uri2' of https://github.com/openid/OpenID4VP in…
tlodderstedt Jan 6, 2024
bfc2bdc
Apply editorial suggestions from Giuseppe
paulbastian Jan 14, 2024
acd0c13
added text on preceedence of request object claims over request claim…
tlodderstedt Jan 18, 2024
1101fda
adjusted diagram name to parameter name
tlodderstedt Jan 18, 2024
c1ee35a
added internal processing at the verifier's response endpoint
tlodderstedt Jan 18, 2024
357222c
Update openid-4-verifiable-presentations-1_0.md
tlodderstedt Jan 18, 2024
0844acb
fixed description of request_uri_method based on Giuseppe's feedback
tlodderstedt Jan 18, 2024
f0fa298
Merge branch 'request_uri2' of https://github.com/openid/OpenID4VP in…
tlodderstedt Jan 18, 2024
cfb2d36
changed text re signed authz request
tlodderstedt Jan 18, 2024
2c49b9b
fixed endpoint naming
tlodderstedt Jan 18, 2024
21696fd
Update diagrams/request_uri_mode_post.md
tlodderstedt Feb 8, 2024
a8f4917
Merge branch 'request_uri2' of https://github.com/openid/OpenID4VP in…
tlodderstedt Mar 9, 2024
2f08615
reworked the PR to reflect recent WG discussions
tlodderstedt Mar 9, 2024
9a021bb
Apply suggestions from code review
tlodderstedt Mar 11, 2024
8719239
Apply suggestions from code review
tlodderstedt Mar 11, 2024
e7b8871
reverted 3rd paragraph in Authz Request section
tlodderstedt Mar 11, 2024
9d78904
Update openid-4-verifiable-presentations-1_0.md
tlodderstedt Mar 11, 2024
0e58e39
Update openid-4-verifiable-presentations-1_0.md
tlodderstedt Mar 11, 2024
af6c572
Update openid-4-verifiable-presentations-1_0.md
tlodderstedt Mar 11, 2024
02a58d0
Update openid-4-verifiable-presentations-1_0.md
tlodderstedt Mar 11, 2024
76098d7
Update openid-4-verifiable-presentations-1_0.md
tlodderstedt Mar 11, 2024
8666529
simplified diagram
tlodderstedt Mar 11, 2024
396f007
added processing requirements
tlodderstedt Mar 11, 2024
b1e94aa
Merge branch 'request_uri2' of https://github.com/openid/OpenID4VP in…
tlodderstedt Mar 11, 2024
d9a49d9
Update openid-4-verifiable-presentations-1_0.md
tlodderstedt Mar 11, 2024
63d1f7f
Update openid-4-verifiable-presentations-1_0.md
tlodderstedt Mar 11, 2024
6edd8d1
Update openid-4-verifiable-presentations-1_0.md
tlodderstedt Mar 11, 2024
e8a6cde
Update openid-4-verifiable-presentations-1_0.md
tlodderstedt Mar 11, 2024
e1276ec
fixed media types
tlodderstedt Mar 11, 2024
6d5601b
Merge branch 'request_uri2' of https://github.com/openid/OpenID4VP in…
tlodderstedt Mar 11, 2024
c4d175b
Update openid-4-verifiable-presentations-1_0.md
tlodderstedt Mar 12, 2024
3b0a9fb
Update openid-4-verifiable-presentations-1_0.md
tlodderstedt Mar 12, 2024
df5d0f1
Update openid-4-verifiable-presentations-1_0.md
tlodderstedt Mar 12, 2024
f4e4236
removed "new"
tlodderstedt Mar 12, 2024
ac1ffc0
fixed wallet_metadata
tlodderstedt Mar 12, 2024
803cbe6
Update openid-4-verifiable-presentations-1_0.md
tlodderstedt Mar 12, 2024
95ac037
added request_uri POST example
tlodderstedt Mar 12, 2024
6890440
Merge branch 'request_uri2' of https://github.com/openid/OpenID4VP in…
tlodderstedt Mar 12, 2024
148e1bd
Update openid-4-verifiable-presentations-1_0.md
tlodderstedt Mar 12, 2024
ae65453
Apply suggestions from code review
tlodderstedt Mar 12, 2024
e3df8ac
moved requirement for request object up and fixed grammar nit
tlodderstedt Mar 12, 2024
0c9413d
Apply suggestions from code review
tlodderstedt Mar 12, 2024
91f811f
Apply suggestions from code review
tlodderstedt Mar 12, 2024
56ef646
Update openid-4-verifiable-presentations-1_0.md
tlodderstedt Mar 12, 2024
a21eba3
changed text on client_metadata and added case-sensitive to error text
tlodderstedt Mar 14, 2024
efd0722
Update openid-4-verifiable-presentations-1_0.md
tlodderstedt Mar 14, 2024
4ea299d
fixed history
tlodderstedt Mar 14, 2024
3208b16
Update openid-4-verifiable-presentations-1_0.md
tlodderstedt Mar 14, 2024
55a4faf
Update openid-4-verifiable-presentations-1_0.md
tlodderstedt Mar 14, 2024
5a0b1af
extended privacy considerations
tlodderstedt Mar 14, 2024
bee5ed9
Merge branch 'request_uri2' of https://github.com/openid/OpenID4VP in…
tlodderstedt Mar 14, 2024
286bf67
Update diagrams/request_uri_mode_post.md
tlodderstedt Mar 14, 2024
3c298b7
Update openid-4-verifiable-presentations-1_0.md
tlodderstedt Mar 14, 2024
4540cca
Update openid-4-verifiable-presentations-1_0.md
tlodderstedt Mar 14, 2024
e5add86
formatted Oliver's contribution
tlodderstedt Mar 14, 2024
06aef10
Apply suggestions from code review
tlodderstedt Mar 14, 2024
e437b50
Update openid-4-verifiable-presentations-1_0.md
tlodderstedt Mar 14, 2024
4140e35
Apply suggestions from code review
tlodderstedt Mar 14, 2024
1e033f7
made request_uri_method case-sensitive
tlodderstedt Mar 14, 2024
d167829
Merge branch 'request_uri2' of https://github.com/openid/OpenID4VP in…
tlodderstedt Mar 14, 2024
fb39140
Update openid-4-verifiable-presentations-1_0.md
tlodderstedt Mar 21, 2024
674d0aa
Update openid-4-verifiable-presentations-1_0.md
tlodderstedt Mar 21, 2024
fe8ae63
Update openid-4-verifiable-presentations-1_0.md
tlodderstedt Mar 21, 2024
1088682
Update openid-4-verifiable-presentations-1_0.md
tlodderstedt Mar 21, 2024
c6057d9
Update openid-4-verifiable-presentations-1_0.md
tlodderstedt Mar 21, 2024
e937d3a
Update openid-4-verifiable-presentations-1_0.md
tlodderstedt Mar 21, 2024
f36cfe6
Update openid-4-verifiable-presentations-1_0.md
tlodderstedt Mar 21, 2024
cdfea43
Update openid-4-verifiable-presentations-1_0.md
tlodderstedt Mar 21, 2024
1737a30
Update openid-4-verifiable-presentations-1_0.md
tlodderstedt Mar 21, 2024
d2ba099
Update openid-4-verifiable-presentations-1_0.md
tlodderstedt Mar 21, 2024
a478244
Update openid-4-verifiable-presentations-1_0.md
tlodderstedt Mar 21, 2024
c6db7d5
Update openid-4-verifiable-presentations-1_0.md
tlodderstedt Mar 21, 2024
d3e6894
Update openid-4-verifiable-presentations-1_0.md
tlodderstedt Mar 21, 2024
17a60fc
added privacy considerations
tlodderstedt Mar 21, 2024
ada0a45
Update diagrams/request_uri_mode_post.md
tlodderstedt Mar 25, 2024
6f9c661
changed additional message and note suggested by David to PlantUML fo…
tlodderstedt Mar 25, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
45 changes: 45 additions & 0 deletions diagrams/request_uri_mode_post.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
```plantuml
@startuml

autonumber

box "Wallet"
participant "Metadata" as wm
participant "Authorization Endpoint" as w
end box

participant "User Agent" as u

box "Verifier"
participant "Frontend" as r
participant "Request Endpoint" as rp
participant "Response Endpoint" as rb
end box

u --> r : use
activate r

r --> u: authorization request\n(client_id, request_uri, request_uri_mode=POST, [client_id_scheme])
tlodderstedt marked this conversation as resolved.
Show resolved Hide resolved
deactivate r
u --> w: authorization request\n(client_id, request_uri, request_uri_mode=POST, [client_id_scheme])
tlodderstedt marked this conversation as resolved.
Show resolved Hide resolved
activate w
tlodderstedt marked this conversation as resolved.
Show resolved Hide resolved
tlodderstedt marked this conversation as resolved.
Show resolved Hide resolved
w --> rp: POST **request_uri** (\n[OPTIONAL]wallet_metadata, \n[OPTIONAL]wallet_nonce)
rp -> rp: create and sign (and optionally encrypt) request object
rp --> w: **signed (optionally encrypted) request object** (client_id, client_id_scheme, issuer_nonce, nonce, \nresponse_uri, presentation_definition, state)
tlodderstedt marked this conversation as resolved.
Show resolved Hide resolved
w -> w: authenticate and\n authorize Verifier

note over u, w: User authentication and Credential selection/confirmation

w -> w: create verifiable\npresentation (credential)
tlodderstedt marked this conversation as resolved.
Show resolved Hide resolved
w --> rb: POST response \n(vp_token(credential presentation(s) associated with nonce), presentation_submission, state)
rb -> rb: check state, store vp_token\n & create redirect_url
rb --> w: redirect_url
w --> u: redirect (response_code)
tlodderstedt marked this conversation as resolved.
Show resolved Hide resolved
u --> r: redirect (response_code)
tlodderstedt marked this conversation as resolved.
Show resolved Hide resolved
activate r
r --> rb: get presentation response\n (transaction_id, response_code)
tlodderstedt marked this conversation as resolved.
Show resolved Hide resolved
rb --> r: presentation response
r -> r: validate presentation \n(incl. nonce binding)
tlodderstedt marked this conversation as resolved.
Show resolved Hide resolved
r -> r: use presented credential
@enduml
```
78 changes: 76 additions & 2 deletions openid-4-verifiable-presentations-1_0.md
Original file line number Diff line number Diff line change
Expand Up @@ -232,9 +232,9 @@ Presentation of Verifiable Credentials using OpenID for Verifiable Presentations

The Authorization Request follows the definition given in [@!RFC6749] taking into account the recommendations given in [@!I-D.ietf-oauth-security-topics].

The Verifier may send an Authorization Request as Request Object by value or by reference as defined in JWT-Secured Authorization Request (JAR) [@RFC9101].
The Verifier MAY send an Authorization Request as a Request Object either by value or by reference, as defined in the JWT-Secured Authorization Request (JAR) [@RFC9101]. The Request Object MAY contain a subset of parameters, which the Wallet uses to request the creation of a new Request Object from the Verifier. This request is made using an HTTP POST to the Verifier's `request_uri` endpoint. The Wallet MAY support this feature, which involves providing some details about its technical capabilities with the Verifier. This allows the Verifier to generate a Request Object that is specifically designed to match the capabilities of the Wallet making the request. Verifiers that support this feature MUST provide the `request_uri_method`, as defined below, to indicate to the Wallet that they support this feature.
tlodderstedt marked this conversation as resolved.
Show resolved Hide resolved
tlodderstedt marked this conversation as resolved.
Show resolved Hide resolved

The Verifier articulates requirements of the Credential(s) that are requested using `presentation_definition` and `presentation_definition_uri` parameters that contain a Presentation Definition JSON object as defined in Section 5 of [@!DIF.PresentationExchange]. Wallet implementations MUST process Presentation Definition JSON object and select candidate Verifiable Credential(s) using the evaluation process described in Section 8 of [@!DIF.PresentationExchange].
The Verifier specifies the requirements for the Credential(s) being requested using the `presentation_definition` and `presentation_definition_uri` parameters. These parameters contain a Presentation Definition JSON object as outlined in Section 5 of [@!DIF.PresentationExchange]. Wallet implementations are required to process this Presentation Definition JSON object and select suitable Verifiable Credential(s) following the evaluation process detailed in Section 8 of [@!DIF.PresentationExchange].
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm not sure why we're changing this language about PE in this PR; I'd suggest dropping this change (particularly as it's causing a git conflict).

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I don't know when this was changed. Will revert it to the text in "main".

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
The Verifier specifies the requirements for the Credential(s) being requested using the `presentation_definition` and `presentation_definition_uri` parameters. These parameters contain a Presentation Definition JSON object as outlined in Section 5 of [@!DIF.PresentationExchange]. Wallet implementations are required to process this Presentation Definition JSON object and select suitable Verifiable Credential(s) following the evaluation process detailed in Section 8 of [@!DIF.PresentationExchange].
The Verifier specifies the requirements for the Credential(s) being requested using the `presentation_definition` or `presentation_definition_uri` parameters. These parameters contain a Presentation Definition JSON object as outlined in Section 5 of [@!DIF.PresentationExchange]. Wallet implementations are required to process this Presentation Definition JSON object and select suitable Verifiable Credential(s) following the evaluation process detailed in Section 8 of [@!DIF.PresentationExchange].

I presume the parameters are mutually exclusive?
Also, in case of the ...uri, the P.D. JSON is not contained in the parameter.


The Verifier communicates a Client Identifier Scheme that indicate how the Wallet is supposed to interpret the Client Identifier and associated data in the process of Client identification, authentication, and authorization using `client_id_scheme` parameter. This parameter enables deployments of this specification to use different mechanisms to obtain and validate Client metadata beyond the scope of [@!RFC6749]. A certain Client Identifier Scheme MAY require the Verifier to sign the Authorization Request as means of authentication and/or pass additional parameters and require the Wallet to process them.

Expand All @@ -261,6 +261,12 @@ This specification defines the following new parameters:

A public key to be used by the Wallet as an input to the key agreement to encrypt Authorization Response (see (#jarm)). It MAY be passed by the Verifier using the `jwks` or the `jwks_uri` claim within the `client_metadata` or `client_metadata_uri` request parameter.
Sakurann marked this conversation as resolved.
Show resolved Hide resolved

`request_uri_method`:
: OPTIONAL. A string determining the HTTP method to be used with the `request_uri` included in the same request. Two values are defined for `request_uri_method` in this specification: `get` and `post`. Please note that these values are case-insensitive. The GET method, as defined in [@RFC9101], involves the Wallet sending a GET request to retrieve a Request Object. The POST method, newly defined in this specification, involves the Wallet requesting the creation of a new Request Object as outlined in [@RFC9101] by sending an HTTP POST request to the request URI. This request using the HTTP POST is detailed in (#request_uri_method_post).
tlodderstedt marked this conversation as resolved.
Show resolved Hide resolved
`request_uri_method` MUST only be present if the request contains a `request_uri` parameter. If the `request_uri_method` parameter is not present, the Wallet MUST process the `request_uri` as defined in [@RFC9101]. Wallets not supporting the new method `post` will send a GET request to the request URI (default behavior as defined in [@RFC9101]).
tlodderstedt marked this conversation as resolved.
Show resolved Hide resolved
tlodderstedt marked this conversation as resolved.
Show resolved Hide resolved

If the Verifier uses the `request_uri_method` set to `post`, it SHOULD add the `client_metadata` parameter to the authorization request to pass its capabilities. This enables the Wallet to assess the Verifier's capabilities, allowing it to transmit only the relevant capabilities through the `wallet_metadata` request parameter in the Request URI POST request. If the Verifier uses the parameter `client_id_scheme` in the Request Object, it MUST also add the same `client_id_scheme` value in the Authorization Request.
tlodderstedt marked this conversation as resolved.
Show resolved Hide resolved
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

  • Not sure if it has to be "SHOULD add the client_metadata". This is only required if the Verifier assumes the Wallet has no other method to retrieve the client_metadata. If the client_id_scheme supports client metadata resolution, then client_metadata parameter is not necessary. I would suggest the following:

SHOULD add the client_metadata if the combination of client_id and client_id_scheme does not allow the Wallet to retrieve the client metadata.

Does this make sense?

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

why not just MAY?

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

MAY is redundant since this is already the case, right?

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I would adjust the language. I will make a proposal tomorrow. It should be highlighted that client_metadata in the authz request is not required and can be obtained from different sources and still use this feature.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Different sources, e.g., by retrieving it via entity statements using a combination of client_id and client_id_scheme.

Copy link
Collaborator Author

@tlodderstedt tlodderstedt Mar 14, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@awoie I modified the text so the Verifier should add the parameter only if there is no other way. I did not want to tie it t the client id scheme Please have a look whether the text works for you.


The following additional considerations are given for pre-existing Authorization Request parameters:

`nonce`:
awoie marked this conversation as resolved.
Show resolved Hide resolved
Expand All @@ -283,6 +289,17 @@ The following is a non-normative example of an Authorization Request:
&nonce=n-0S6_WzA2Mj HTTP/1.1
```

The following is a non-normative example with a `request_uri_mode` parameter (including the additional parameters `client_id_scheme` and `client_metadata`):
tlodderstedt marked this conversation as resolved.
Show resolved Hide resolved

```
GET /authorize?
tlodderstedt marked this conversation as resolved.
Show resolved Hide resolved
client_id=client.example.org
&client_id_scheme=x509_san_dns
&client_metadata=...
&request_uri=https%3A%2F%2Fclient.example.org%2Frequest
tlodderstedt marked this conversation as resolved.
Show resolved Hide resolved
&request_uri_mode=post HTTP/1.1
tlodderstedt marked this conversation as resolved.
Show resolved Hide resolved
```
peppelinux marked this conversation as resolved.
Show resolved Hide resolved

tlodderstedt marked this conversation as resolved.
Show resolved Hide resolved
## `presentation_definition` Parameter {#request_presentation_definition}

This parameter contains a Presentation Definition JSON object conforming to the syntax defined in Section 5 of [@!DIF.PresentationExchange].
Expand Down Expand Up @@ -460,6 +477,53 @@ To use `client_id_scheme` values `entity_id`, `did`, `verifier_attestation`, `x5

Other specifications can define further values for the `client_id_scheme` parameter. It is RECOMMENDED to use collision-resistant names for such values.

awoie marked this conversation as resolved.
Show resolved Hide resolved
## Request URI Method POST {#request_uri_method_post}
tlodderstedt marked this conversation as resolved.
Show resolved Hide resolved

This request is offered at the Request URI endpoint by the Verifier.
tlodderstedt marked this conversation as resolved.
Show resolved Hide resolved

The request MUST use the HTTP POST method with the https scheme and the media type set to "application/oauth-authz-req+jwt".
Copy link
Contributor

@danielfett danielfett Mar 11, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
The request MUST use the HTTP POST method with the https scheme and the media type set to "application/oauth-authz-req+jwt".
The request MUST use the HTTP POST method with the https scheme and the media type set to "application/oauth-authz-req+jwt".

Media type being the content-type or accept header here?
If the former, is it intentional that this is the same as in the response?


The following parameters are defined:
awoie marked this conversation as resolved.
Show resolved Hide resolved

`wallet_metadata`:
: OPTIONAL. A JSON Object containing metadata parameters as defined in (#as_metadata_parameters).

`wallet_nonce`:
: OPTIONAL. A JSON String containing as fresh, cryptographically random number with sufficient entropy the Verifier MUST use when creating the signed presentation request object.
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

JWT's are fine as nonces. I think we can help by stating how it's passed back too. And we don't need the 'JSON' qualifier on String.

Suggested change
: OPTIONAL. A JSON String containing as fresh, cryptographically random number with sufficient entropy the Verifier MUST use when creating the signed presentation request object.
: OPTIONAL. A String containing a value the Verifier MUST use in the `wallet_nonce` authorization parameter when creating the signed presentation request object. For example, a base64url encoded fresh, cryptographically random number with sufficient entropy.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

...and neither on object (above), so we can drop that as well.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

What is the presentation request object?


If the Wallet wants the Verifier to encrypt the request object, it SHOULD use the `jwks` or `jwks_uri` claim within `wallet_metadata` to pass the public key for the input to the key agreement. Other mechanisms to pass the encryption key can be used as well.
tlodderstedt marked this conversation as resolved.
Show resolved Hide resolved

tlodderstedt marked this conversation as resolved.
Show resolved Hide resolved
### Request URI Response

The Request URI Response MUST be a HTTPS POST response with the "application/oauth-authz-req+jwt" media type and contain a signed, optionally encrypted, request object as defined in [@RFC9101].
tlodderstedt marked this conversation as resolved.
Show resolved Hide resolved
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

As above, media type meaning the content type?


The following is a non-normative example of a request object:

```json
{
"client_id": "client.example.org",
"client_id_scheme": "x509_san_dns",
"response_uri": "https://client.example.org/post",
"response_type": "vp_token",
"response_mode": "direct_post",
"presentation_definition": {...},
"nonce": "n-0S6_WzA2Mj",
tlodderstedt marked this conversation as resolved.
Show resolved Hide resolved
"state" : "eyJhb...6-sVA
tlodderstedt marked this conversation as resolved.
Show resolved Hide resolved
}
```

The Wallet MUST process the request process as defined in [@RFC9101]. Additionally, if the Wallet passed a `wallet_nonce` in the post request, the Wallet MUST validate whether the request object contains the respective nonce value in a `wallet_nonce`. If it does not, the Wallet MUST terminate request processing.
tlodderstedt marked this conversation as resolved.
Show resolved Hide resolved

The request object MUST fulfill the requirements as defined in (#vp_token_request).
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

If this is meant as "The Verifier MUST create the request according to (#vp_token_request)" then this should be moved up. If this is meant to be a MUST for the Wallet to verify, it should be reworded and probably folded into the previous paragraph.


The Wallet MUST extract the set of authorization request parameters from the Request Object. The Wallet MUST only use the parameters in this Request Object, even if the same parameter was provided in an authorization request query parameter. The Client ID value in the `client_id` authorization request parameter in the Request Object 'client_id' claim MUST be identical. If the Authorization Request contains a `client_id_scheme` parameter, the `client_id_scheme` authorization request parameter in the Request Object 'client_id_scheme' claim MUST be identical.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
The Wallet MUST extract the set of authorization request parameters from the Request Object. The Wallet MUST only use the parameters in this Request Object, even if the same parameter was provided in an authorization request query parameter. The Client ID value in the `client_id` authorization request parameter in the Request Object 'client_id' claim MUST be identical. If the Authorization Request contains a `client_id_scheme` parameter, the `client_id_scheme` authorization request parameter in the Request Object 'client_id_scheme' claim MUST be identical.
The Wallet MUST extract the set of authorization request parameters from the Request Object. The Wallet MUST only use the parameters in this Request Object, even if the same parameter was provided in an authorization request query parameter. The Client ID value in the `client_id` authorization request parameter in the Request Object `client_id` claim MUST be identical. If the Authorization Request contains a `client_id_scheme` parameter, the `client_id_scheme` authorization request parameter in the Request Object `client_id_scheme` claim MUST be identical.

...otherwise?

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I wonder if the first sentence is not already implied by "The Wallet MUST process the request as defined in [@RFC9101]."


The Wallet then validates the request, as specified in OAuth 2.0 [RFC6749].
tlodderstedt marked this conversation as resolved.
Show resolved Hide resolved

### Request URI Error Response

If the Verifier responds with any HTTP error response, the Wallet MUST terminate the process.

# Response {#response}

A VP Token is only returned if the corresponding Authorization Request contained a `presentation_definition` parameter, a `presentation_definition_uri` parameter, or a `scope` parameter representing a Presentation Definition (#vp_token_request).
Expand Down Expand Up @@ -1088,6 +1152,12 @@ Implementations MUST follow [@!BCP195].

Whenever TLS is used, a TLS server certificate check MUST be performed, per [@!RFC6125].

# Privacy Considerations

## Authorization Requests with Request URI

The Wallet MUST NOT sent personally identifiable information (PII) or any other data that could be used for fingerprinting to the Request URI in order to prevent user tracking.
tlodderstedt marked this conversation as resolved.
Show resolved Hide resolved
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This must be expanded IMO. We discussed aspects of this on the calls or on PRs here in this repository:

  • If no user interaction is required before sending the request, it is easy to request on a large scale and in an automated fashion (e.g.) the wallet capabilities from all visitors of a website. Even without PII this can reveal some information about users, like their nationality (e.g., a Wallet with special capabilities only used in one EU member state)
  • Mandatory user interaction before sending the request, like clicking a button, unlocking the wallet or even just showing a screen of the app, can make this less attractive/likely to being exploited.
  • Requests should be sent with the minimal amount of information possible, and in particular, without any HTTP headers revealing libraries used or their versions.


{backmatter}

<reference anchor="VC_DATA" target="https://www.w3.org/TR/2022/REC-vc-data-model-20220303/">
Expand Down Expand Up @@ -1675,6 +1745,10 @@ The technology described in this specification was made available from contribut

[[ To be removed from the final specification ]]

-21

* added POST request mode for Request URI

-20

* added "verifier_attestation" client id scheme value
Expand Down