Skip to content

dcql_query & presentation_definition are not strings #422

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

Merged
merged 5 commits into from
Mar 5, 2025
Merged
Show file tree
Hide file tree
Changes from 2 commits
Commits
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
2 changes: 1 addition & 1 deletion examples/request/request.txt
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,6 @@ GET /authorize?
response_type=vp_token
&client_id=x509_san_dns%3Aclient.example.org
&redirect_uri=https%3A%2F%2Fclient.example.org%2Fcb
&presentation_definition=...
&dcql_query=%7B...%7D
&nonce=n-0S6_WzA2Mj HTTP/1.1
Host: wallet.example.com
2 changes: 1 addition & 1 deletion examples/request/request_object_client_id_did.json
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
"response_type": "vp_token",
"redirect_uri": "https://client.example.org/callback",
"nonce": "n-0S6_WzA2Mj",
"presentation_definition": "...",
"presentation_definition": { ... },
"client_metadata": {
"vp_formats": {
"jwt_vp": {
Expand Down
7 changes: 5 additions & 2 deletions openid-4-verifiable-presentations-1_0.md
Original file line number Diff line number Diff line change
Expand Up @@ -280,16 +280,18 @@ One exception to this rule is `transaction_data` parameter, and the wallets that
This specification defines the following new request parameters:

`presentation_definition`:
: A string containing a Presentation Definition JSON object. See (#request_presentation_definition) for more details.
: A JSON object containing a Presentation Definition. See (#request_presentation_definition) for more details.
Copy link
Contributor

@danielfett danielfett Feb 11, 2025

Choose a reason for hiding this comment

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

I don't think this change is helpful. This is not clear enough IMO to convey that the encoding varies between the query string (where it is a JSON-encoded string) and the request object and DC API call (where it is an object and it is not additionally JSON-encoded).

Copy link
Contributor

Choose a reason for hiding this comment

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

I sort of understand this perspective @danielfett, however I'm struggling to see what other interpretation a developer might have about how to convey a JSON object in a query parameter value?

Copy link
Collaborator Author

@jogu jogu Feb 12, 2025

Choose a reason for hiding this comment

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

@danielfett Are we at least agreed the current text is bad? It has resulted in people doing this in request objects:

"dcql_query": "{\"id\":\"ffc717a3-abaf-4ec3-9c55-a9b8e998874c\",\"name\":\"A

So this is hopefully an improvement at least. The way I've done it here (combined with the text below explaining how to put JSON objects into the url query) seems consistent with how it's done in RAR ( https://datatracker.ietf.org/doc/html/rfc9396#section-2 ), and we have the example to try and help people struggling to interpret it too.

Copy link
Contributor

Choose a reason for hiding this comment

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

When this is a DC API call, this is an object (not JSON-encoded).

Suggested change
: A JSON object containing a Presentation Definition. See (#request_presentation_definition) for more details.
: An object containing a Presentation Definition. See (#request_presentation_definition) for more details.

Copy link
Collaborator Author

Choose a reason for hiding this comment

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

If we're going to make that change for that reason I suggest doing it consistently everywhere we use the term 'JSON object' in a separate PR.


`presentation_definition_uri`:
: A string containing an HTTPS URL pointing to a resource where a Presentation Definition JSON object can be retrieved. See (#request_presentation_definition_uri) for more details.

`dcql_query`:
: A string containing a JSON-encoded DCQL query as defined in (#dcql_query).
: A JSON object containing a DCQL query as defined in (#dcql_query).
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

Suggested change
: A JSON object containing a DCQL query as defined in (#dcql_query).
: An object containing a DCQL query as defined in (#dcql_query).


Exactly one of the following parameters MUST be present in the Authorization Request: `dcql_query`, `presentation_definition`, `presentation_definition_uri`, or a `scope` value representing a Presentation Definition.

In the context of an authorization request according to [RFC6749], parameters containing JSON objects are encoded using the application/x-www-form-urlencoded format of the serialized JSON.

`client_metadata`:
: OPTIONAL. A JSON object containing the Verifier metadata values. It MUST be UTF-8 encoded. The following metadata parameters MAY be used:

Expand Down Expand Up @@ -2812,6 +2814,7 @@ The technology described in this specification was made available from contribut
* add language on client ID and nonce binding for ISO mdocs and W3C VCs
* clarify the behavior is not to sign when authorization_signed_response_alg is omitted
* add a note on the use of apu/apv in the JWE header of encrypted responses
* clarify that `dcql_query` and `presentation_definition` are passed as JSON objects (not strings) in request objects

-24

Expand Down