Skip to content

Conversation

MasterKale
Copy link
Contributor

@MasterKale MasterKale commented May 28, 2025

This PR adds initial text on A) how user agents MUST handle the presence of multiple presentation requests in options.digital.requests, and B) how verifiers SHOULD populate options.digital.requests to handle getting back a corresponding presentation response.

Closes #220.

The following tasks have been completed:

  • Modified Web platform tests (link)

Implementation commitment:

  • WebKit (link to issue)
  • Chromium (link to issue)
  • Gecko (link to issue)

Documentation and checks

  • Affects privacy
  • Affects security
  • Pinged MDN
  • Updated Explainer
  • Updated digitalcredentials.dev

Preview | Diff

@MasterKale MasterKale requested a review from a team as a code owner May 28, 2025 21:48
@MasterKale MasterKale added the agenda+ Add to the weekly agenda label May 29, 2025
@wseltzer
Copy link
Contributor

Discussed 11 June minutes

@wseltzer wseltzer removed the agenda+ Add to the weekly agenda label Jun 12, 2025
@MasterKale MasterKale self-assigned this Jun 23, 2025
@MasterKale MasterKale added the agenda+ Add to the weekly agenda label Jul 2, 2025
@npdoty
Copy link

npdoty commented Jul 9, 2025

I think we should indicate to the verifier that the multiple requests (and similarly for the request language) should be semantically compatible/equivalent, or the user/user agent/wallet are easily going to be confused, or might be seen as abuse. Browsers can try to catch really extreme cases that violate that, but it probably wouldn't be easy to test.

@MasterKale
Copy link
Contributor Author

MasterKale commented Jul 9, 2025

From WG meeting:

  • Add a note to Verifiers that request options within requests should be semantically similar
  • Review text to see how it might clarify that we're talking about multiple requests within a single invocation of DC API

@wseltzer
Copy link
Contributor

Discussed 9 July.

@wseltzer wseltzer removed the agenda+ Add to the weekly agenda label Jul 10, 2025
@TallTed
Copy link
Contributor

TallTed commented Jul 10, 2025

Might I suggest that this be reworked/rewritten a bit, to more closely mimic the HTTP content negotiation accept: header, such that each entry pairs a protocol (with associated priority) with one or more credentials (each with their own associated priority)?

A single artificially complicated request (with syntactically invisible line break, here just to make comprehension easier) might then look something like —
foo-proto-v1(ex-cred-1;cp=1.0, ex-cred-2;cp=0.5);pp=1.0, foo-proto-v2(ex-cred-1;cp=0.7, ex-cred-2;cp=0.3);pp=0.5

I would multiply the internal credential priority, cp, values by the wrapping protocol priority, pp, to make a net priority, p.

This could be made less visibly complicated by having two multi-valued parameters instead of one, such that the protocol priorities are in one parameter and the credential priorities are in another, or by having one slightly-more complex multi-valued parameter for which each value includes both protocol and credential (basically containing the permutations of the above), maybe something like —
(foo-proto-v1;ex-cred-1;p=1.0), (foo-proto-v2;ex-cred-1;p=0.35), (foo-proto-v1;ex-cred-2;p=0.5), (foo-proto-v2;ex-cred-2;p=0.15)

Note that the ordering of these is not important. It's the p value that dictates preference/priority of receiving that combination.

Comment on lines +1986 to +1993
<p>
Verifiers may wish to define a single credential request
using multiple [=digital credential/exchange protocols=],
for example to achieve maximum compatibility across [=user agent | user agents=]
or when migrating to a newer version of a protocol. When doing so,
verifiers SHOULD ensure that all requests are semantically equivalent to avoid confusing
the user, the user agent, and the wallet during processing of the request.
</p>
Copy link
Contributor Author

Choose a reason for hiding this comment

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

@npdoty I added this text under a different section to try and cover your suggestion that multiple requests should be semantically similar. What do you think?

@MasterKale MasterKale added the agenda+ Add to the weekly agenda label Aug 27, 2025
Comment on lines +789 to +795
When multiple [=digital credential/presentation request | presentation requests=]
are present in |requests|,
a [=user agent=] MUST NOT return more than one
[=digital credential/presentation response=].
However, multiple credentials MAY be included in this single response
depending on the capabilities
of the corresponding [=digital credential/exchange protocol=].
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
When multiple [=digital credential/presentation request | presentation requests=]
are present in |requests|,
a [=user agent=] MUST NOT return more than one
[=digital credential/presentation response=].
However, multiple credentials MAY be included in this single response
depending on the capabilities
of the corresponding [=digital credential/exchange protocol=].
A [=user agent=] MUST NOT return more than one
[=digital credential/presentation response=] to |requests|,
even when |requests| contains multiple
[=digital credential/presentation request | presentation requests=].
However, multiple credentials MAY be included in this single response
depending on the capabilities
of the corresponding [=digital credential/exchange protocol=].

Copy link
Contributor

Choose a reason for hiding this comment

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

Incorporating all the comments by @marcoscaceres. Too many lines changed in too many ways, so GitHub can't properly highlight the changes. I hope you have a better diff tool at hand.

Suggested change
When multiple [=digital credential/presentation request | presentation requests=]
are present in |requests|,
a [=user agent=] MUST NOT return more than one
[=digital credential/presentation response=].
However, multiple credentials MAY be included in this single response
depending on the capabilities
of the corresponding [=digital credential/exchange protocol=].
A [=user agent=] cannot return more than one
[=digital credential/presentation response=] to |requests|,
even when |requests| contains multiple
[=digital credential/presentation request | presentation requests=],
because the WebIDL for a digital credential requires an object
(i.e., it can't be a sequence).
However, a [=user agent=] MAY include multiple credentials in this
single response if the [=digital credential/exchange protocol=]
in use supports doing so.

@wseltzer
Copy link
Contributor

wseltzer commented Sep 3, 2025

Discussed 3 September minutes.

@wseltzer wseltzer removed the agenda+ Add to the weekly agenda label Sep 3, 2025
</aside>
When multiple [=digital credential/presentation request | presentation requests=]
are present in |requests|,
a [=user agent=] MUST NOT return more than one
Copy link
Collaborator

Choose a reason for hiding this comment

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

A user agent can't do this regardless, because the WebIDL for a digital credential requires an object (i.e., it can't be a sequence).

Copy link
Contributor

@TallTed TallTed Sep 15, 2025

Choose a reason for hiding this comment

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

Excellent! That should let us simplify the phrasing here substantially. I'll do so lower, as a revision of a previous suggestion for this block.

are present in |requests|,
a [=user agent=] MUST NOT return more than one
[=digital credential/presentation response=].
However, multiple credentials MAY be included in this single response
Copy link
Collaborator

Choose a reason for hiding this comment

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

This doesn't make sense as a normative requirement, as we can't put normative requirements on formats (only on user agents). This might be useful as a non-normative note though.

Copy link
Contributor

Choose a reason for hiding this comment

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

I don't read this as putting requirements on any format (which aren't mentioned here anyway) nor protocol (which are), but rather putting requirements on user agents subject to the limitations of the format protocol in use, i.e., the user agent MAY include multiple credentials in a single response if the format protocol in use supports doing so.

<p>
Verifiers may wish to define a single credential request
using multiple [=digital credential/exchange protocols=],
for example to achieve maximum compatibility across [=user agent | user agents=]
Copy link
Collaborator

Choose a reason for hiding this comment

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

Suggested change
for example to achieve maximum compatibility across [=user agent | user agents=]
for example to achieve maximum compatibility across [=user agents=]

using multiple [=digital credential/exchange protocols=],
for example to achieve maximum compatibility across [=user agent | user agents=]
or when migrating to a newer version of a protocol. When doing so,
verifiers SHOULD ensure that all requests are semantically equivalent to avoid confusing
Copy link
Collaborator

Choose a reason for hiding this comment

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

As above... we can't put conformance requirements on verifiers, but we can suggest best practices in non-normative ways.

Copy link
Contributor

Choose a reason for hiding this comment

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

How about —

Suggested change
verifiers SHOULD ensure that all requests are semantically equivalent to avoid confusing
verifiers are expected to ensure that all requests are semantically equivalent to avoid confusing

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Support for multiple requests in a get call
5 participants