You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: 1.0/openid-4-verifiable-presentations-1_0.md
+41-10Lines changed: 41 additions & 10 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -276,7 +276,7 @@ that signals to the Wallet that it can make an HTTP POST request to the Verifier
276
276
endpoint with information about its capabilities as defined in (#request_uri_method_post). The Wallet MAY continue with JAR
277
277
when it receives `request_uri_method` parameter with the value `post` but does not support this feature.
278
278
279
-
The Verifier articulates requirements of the Credential(s) that are requested using the `dcql_query`parameter. Wallet implementations MUST process the DCQL query and select candidate Credential(s) using the evaluation process described in (#dcql_query_lang_processing_rules)
279
+
The Verifier articulates requirements of the Credential(s) that are requested using either the `dcql_query`or `scope` parameters. Wallet implementations MUST process the DCQL query and select candidate Credential(s) using the evaluation process described in (#dcql_query_lang_processing_rules)
280
280
281
281
The Verifier communicates a Client Identifier Prefix that indicates how the Wallet is supposed to interpret the Client Identifier and associated data in the process of Client identification, authentication, and authorization as a prefix in the `client_id` parameter. This enables deployments of this specification to use different mechanisms to obtain and validate Client metadata beyond the scope of [@!RFC6749]. A certain Client Identifier Prefix sets the requirements whether the Verifier needs to sign the Authorization Request as a means of authentication and/or pass additional parameters and require the Wallet to process them.
282
282
@@ -289,6 +289,9 @@ One exception to this rule is the `transaction_data` parameter. Wallets that do
289
289
## New Parameters {#new_parameters}
290
290
This specification defines the following new request parameters:
291
291
292
+
`response_uri`:
293
+
: As defined in (#security_considerations_direct_post).
294
+
292
295
`dcql_query`:
293
296
: A JSON object containing a DCQL query as defined in (#dcql_query).
294
297
@@ -308,7 +311,7 @@ This specification defines the following new request parameters:
308
311
Other metadata parameters MUST be ignored unless a profile of this specification explicitly defines them as usable in the `client_metadata` parameter.
309
312
310
313
`request_uri_method`:
311
-
: OPTIONAL. A string determining the HTTP method to be used when the `request_uri` parameter is included in the same request. Two case-sensitive valid values are defined in this specification: `get` and `post`. If `request_uri_method` value is `get`, the Wallet MUST send the request to retrieve the Request Object using the HTTP GET method, i.e., as defined in [@RFC9101]. If `request_uri_method` value is `post`, a supporting Wallet MUST send the request using the HTTP POST method as detailed in (#request_uri_method_post). If the `request_uri_method` parameter is not present, the Wallet MUST process the `request_uri` parameter as defined in [@RFC9101]. Wallets not supporting the `post` method will send a GET request to the Request URI (default behavior as defined in [@RFC9101]). `request_uri_method` parameter MUST NOT be present if a `request_uri` parameter is not present.
314
+
: OPTIONAL. A case-sensitive string determining the HTTP method to be used when the `request_uri` parameter is included in the same request. Two case-sensitive valid values are defined in this specification: `get` and `post`. If `request_uri_method` value is `get`, the Wallet MUST send the request to retrieve the Request Object using the HTTP GET method, i.e., as defined in [@RFC9101]. If `request_uri_method` value is `post`, a supporting Wallet MUST send the request using the HTTP POST method as detailed in (#request_uri_method_post). If the `request_uri_method` parameter is not present, the Wallet MUST process the `request_uri` parameter as defined in [@RFC9101]. Wallets not supporting the `post` method will send a GET request to the Request URI (default behavior as defined in [@RFC9101]). `request_uri_method` parameter MUST NOT be present if a `request_uri` parameter is not present.
312
315
313
316
If the Verifier set the `request_uri_method` parameter value to `post` and there is no other means to convey its capabilities to the Wallet, it SHOULD add the `client_metadata` parameter to the Authorization Request.
314
317
This enables the Wallet to assess the Verifier's capabilities, allowing it to transmit only the relevant capabilities through the `wallet_metadata` parameter in the Request URI POST request.
@@ -615,7 +618,7 @@ In case of using OpenID4VP over DC API, as defined in (#dc_api), it is at the di
615
618
616
619
* `x509_hash`: When the Client Identifier Prefix is `x509_hash`, the original Client Identifier (the part without the `x509_hash:` prefix) MUST be a hash and match the hash of the leaf certificate passed with the request. The request MUST be signed with the private key corresponding to the public key in the leaf X.509 certificate of the certificate chain added to the request in the `x5c` JOSE header parameter [@!RFC7515] of the signed request object. The value of `x509_hash` is the base64url-encoded value of the SHA-256 hash of the DER-encoded X.509 certificate. The Wallet MUST validate the signature and the trust chain of the X.509 leaf certificate. All Verifier metadata other than the public key MUST be obtained from the `client_metadata` parameter. Example Client Identifier: `x509_hash:Uvo3HtuIxuhC92rShpgqcT3YXwrqRxWEviRiA0OZszk`
617
620
618
-
* `origin`: This reserved Client Identifier Prefix is defined in (#dc_api_request). The Wallet MUST NOT accept this Client Identifier Prefix in requests. In OpenID4VP over the Digital Credentials API, the audience of the Credential Presentation is always the origin value prefixed by `origin:`, for example `origin:https://verifier.example.com/`.
621
+
* `origin`: This reserved Client Identifier Prefix is defined in (#dc_api_request). The Wallet MUST NOT accept this Client Identifier Prefix in requests. In OpenID4VP over the Digital Credentials API, the audience of the Credential Presentation is always the origin value prefixed by `origin:`, for example `origin:https://verifier.example.com`.
619
622
620
623
To use the Client Identifier Prefixes `openid_federation`, `decentralized_identifier`, `verifier_attestation`, `x509_san_dns` and `x509_hash`, Verifiers MUST be capable of securely storing private key material. This might require changes to the technical design of native apps as such apps are typically public clients.
621
624
@@ -1139,7 +1142,7 @@ Additional, more complex examples can be found in (#more_dcql_query_examples).
1139
1142
1140
1143
# Response {#response}
1141
1144
1142
-
A VP Token is only returned if the corresponding Authorization Request contained a `dcql_query` parameter or a `scope` parameter representing a DCQL Query (#vp_token_request).
1145
+
A VP Token is only returned if the corresponding Authorization Request contained a `dcql_query` parameter or a `scope` parameter representing a DCQL Query (as defined in #vp_token_request).
1143
1146
1144
1147
A VP Token can be returned in the Authorization Response or the Token Response depending on the Response Type used. See (#response_type_vp_token) for more details.
1145
1148
@@ -1765,6 +1768,10 @@ While breaking changes to the specifications referenced in this specification ar
The security properties of the OpenID for Verifiable Credentials family of specifications have been formally analyzed, see [@secanalysis.openid4vc].
1774
+
1768
1775
## Preventing Replay of Verifiable Presentations {#preventing-replay}
1769
1776
1770
1777
An attacker could try to inject Presentations obtained from (for example) a previous Authorization Response into another Authorization Response, thus impersonating the End-User that originally presented the respective Verifiable Presentation. Holder Binding aims to prevent such attacks.
@@ -2353,7 +2360,6 @@ Ecosystems intending to use trusted authority mechanisms SHOULD ensure that the
The JWS JSON Serialization ([@!RFC7515]) allows the Verifier to use multiple Client Identifiers and corresponding key material to protect the same request. This serves use cases where the Verifier requests Credentials belonging to different trust frameworks and, therefore, needs to authenticate in the context of those trust frameworks. It also allows the Verifier to add different attestations for each Client Identifier.
2506
+
The JWS JSON Serialization ([@!RFC7515]) allows the Verifier to use multiple Client Identifiers and corresponding key material to protect the same request. This serves use cases where the Verifier requests Credentials belonging to different trust frameworks and, therefore, needs to authenticate in the context of those trust frameworks. It also allows the Verifier to add different Verifier Info for each Client Identifier.
2481
2507
2482
2508
In this case, the following request parameters, if used, MUST be present only in the protected header of the respective `signature` object in the `signatures` array defined in [@!RFC7515, section 7.2.1]:
2483
2509
@@ -2536,17 +2562,19 @@ The following is a non-normative example of a `data` object containing an error:
2536
2562
2537
2563
The security properties that are normally provided by the Client Identifier are achieved by binding the response to the Origin it was received from.
2538
2564
2539
-
The audience for the response (for example, the `aud` value in a Key Binding JWT) MUST be the Origin, prefixed with `origin:`, for example `origin:https://verifier.example.com/`. This is the case even for signed requests. Therefore, when using OpenID4VP over the DC API, the Client Identifier is not used as the audience for the response.
2565
+
The audience for the response (for example, the `aud` value in a Key Binding JWT) MUST be the Origin, prefixed with `origin:`, for example `origin:https://verifier.example.com`. This is the case even for signed requests. Therefore, when using OpenID4VP over the DC API, the Client Identifier is not used as the audience for the response.
The security properties of the OpenID4VP protocol, when used in conjunction with the Digital Credentials API (DC API) [@!W3C.Digital_Credentials_API], have been formally analyzed, see [@secanalysis.openid4vp.dc].
2570
+
2543
2571
The following security considerations from OpenID4VP apply:
2544
2572
2545
2573
* Preventing Replay of Verifiable Presentations as described in (#preventing-replay), with the difference that the origin is used instead of the Client Identifier to bind the response to the Client.
2546
2574
* End-User Authentication using Credentials as described in (#end-user-authentication-using-credentials).
2547
2575
* Encrypting an Unsigned Response as described in (#encrypting_unsigned_response).
2548
2576
* TLS Requirements as described in (#tls-requirements).
2549
-
* Always Use the Full Client Identifier as described in (#full-client-identifier) for signed requests.
2577
+
* Always use the Full Client Identifier as described in (#full-client-identifier) for signed requests.
2550
2578
* Security Checks on the Returned Credentials and Presentations as described in (#dcql_query_security).
2551
2579
* DCQL Value Matching as described in (#dcql-value-matching).
2552
2580
@@ -3563,9 +3591,12 @@ The technology described in this specification was made available from contribut
3563
3591
-31
3564
3592
3565
3593
* Clarify that `encrypted_response_enc_values_supported` applies only if JWE content encryption algorithm is used
3566
-
* Clarify that `aud` corresponds to `issuer` Wallet Metadata paremeter if Dynamic Discovery is used
3567
3594
* Removed invalid_scope error guidance as duplicate of RFC6749
3595
+
* Clarified that Multi-RP-sig section means Verifier Info instead of attestations
3596
+
* Updated origin examples to remove trailing slash
3597
+
* Clarify that `aud` corresponds to `issuer` Wallet Metadata paremeter if Dynamic Discovery is used
3598
+
* Clarified that request_uri_method is a case-sensitive string
0 commit comments