Security considerations for client_metadata parameters#735
Conversation
Co-authored-by: Frederik Krogsdal Jacobsen <fkj@users.noreply.github.com>
|
|
||
| In case of using OpenID4VP over DC API, as defined in (#dc_api), it is at the discretion of the Wallet whether it validates the signature on the Request Object following the processing rules defined by a relevant Client Identifier Prefix. Factors that influence the Wallet's decision include, but are not limited to, the trust framework the Wallet supports, the specific policies defined by the Issuers or ecosystem, and profiles of this specification. | ||
|
|
||
| * `redirect_uri`: This prefix value indicates that the original Client Identifier part (without the prefix `redirect_uri:`) is the Verifier's Redirect URI (or Response URI when Response Mode `direct_post` is used). The Verifier MAY omit the `redirect_uri` Authorization Request parameter (or `response_uri` when Response Mode `direct_post` is used). All Verifier metadata parameters MUST be passed using the `client_metadata` parameter defined in (#new_parameters). An example Client Identifier value is `redirect_uri:https://client.example.org/cb`. Requests using the `redirect_uri` Client Identifier Prefix cannot be signed because there is no method for the Wallet to obtain a trusted key for verification. Therefore, implementations requiring signed requests cannot use the `redirect_uri` Client Identifier Prefix. |
There was a problem hiding this comment.
I suggest we put at least this change into 1.0 errata too.
| Wallet implementers need to choose a source of client metadata they can trust within their own ecosystem or implementation. This should determine whether it is safe to use or display to a User. For example, a client name obtained from an X.509 certificate can be trusted, whereas a client name from the `client_metadata` parameter cannot. | ||
|
|
||
| It is recommended to use `client_metadata` parameters only for client-supplied parameters that can be used untrusted, for example, a public key. | ||
|
|
||
| Ecosystems can use other ecosystem-specific trusted data sources as long as they conduct a proper trust evaluation. |
There was a problem hiding this comment.
@jogu What specifically is the problem with the "it is recommended" text? Just that it reads as a normative statement?
And what about something like this:
| Wallet implementers need to choose a source of client metadata they can trust within their own ecosystem or implementation. This should determine whether it is safe to use or display to a User. For example, a client name obtained from an X.509 certificate can be trusted, whereas a client name from the `client_metadata` parameter cannot. | |
| It is recommended to use `client_metadata` parameters only for client-supplied parameters that can be used untrusted, for example, a public key. | |
| Ecosystems can use other ecosystem-specific trusted data sources as long as they conduct a proper trust evaluation. | |
| Ecosystems can define other ecosystem-specific trusted data sources in a profile as long as they conduct a proper trust evaluation. |
There was a problem hiding this comment.
@jogu where do you think it conflicts? Is it the example of the public key and should we be more specific that it is about specific, ephemeral public keys as described in the section?
In the spec I also often notice we use "ecosystems or profiles" instead of the one or the other. Maybe that applies here as well.
There was a problem hiding this comment.
@jogu Would be great to have some more detail on this.
|
|
||
| ## Source of verifier metadata considerations | ||
|
|
||
| Wallet implementers need to choose a source of client metadata they can trust within their own ecosystem or implementation. This should determine whether it is safe to use or display to a User. For example, a client name obtained from an X.509 certificate can be trusted, whereas a client name from the `client_metadata` parameter cannot. |
There was a problem hiding this comment.
Maybe something more like this:
| Wallet implementers need to choose a source of client metadata they can trust within their own ecosystem or implementation. This should determine whether it is safe to use or display to a User. For example, a client name obtained from an X.509 certificate can be trusted, whereas a client name from the `client_metadata` parameter cannot. | |
| Wallet implementers need to choose a source of client metadata they can trust within their own ecosystem or implementation. This should determine whether it is safe to use or display to a User. For example, a client name obtained from an X.509 certificate that was used to a signed request, or a client name obtained from OpenID Federation from a signed requested, can be trusted, whereas a client name from the `client_metadata` parameter cannot. |
| MUST perform its own security checks on the returned Credentials and | ||
| Presentations. | ||
|
|
||
| ## Source of verifier metadata considerations |
There was a problem hiding this comment.
Nit: match the style of the other headings in this section:
| ## Source of verifier metadata considerations | |
| ## Source of Verifier Metadata |
|
|
||
| ## Source of verifier metadata considerations | ||
|
|
||
| Wallet implementers need to choose a source of client metadata they can trust within their own ecosystem or implementation. This should determine whether it is safe to use or display to a User. For example, a client name obtained from an X.509 certificate can be trusted, whereas a client name from the `client_metadata` parameter cannot. |
There was a problem hiding this comment.
A competing suggestion to @jogu's:
| Wallet implementers need to choose a source of client metadata they can trust within their own ecosystem or implementation. This should determine whether it is safe to use or display to a User. For example, a client name obtained from an X.509 certificate can be trusted, whereas a client name from the `client_metadata` parameter cannot. | |
| Wallet implementers need to choose a source of client metadata they can trust within their own ecosystem or implementation. The trust in the client metadata determines whether it is safe to use or display to a User. For example, a client name obtained from an X.509 certificate used in a signed request can be trusted, whereas a client name from the `client_metadata` parameter cannot. |
| Wallet implementers need to choose a source of client metadata they can trust within their own ecosystem or implementation. This should determine whether it is safe to use or display to a User. For example, a client name obtained from an X.509 certificate can be trusted, whereas a client name from the `client_metadata` parameter cannot. | ||
|
|
||
| It is recommended to use `client_metadata` parameters only for client-supplied parameters that can be used untrusted, for example, a public key. | ||
|
|
||
| Ecosystems can use other ecosystem-specific trusted data sources as long as they conduct a proper trust evaluation. |
There was a problem hiding this comment.
@jogu What specifically is the problem with the "it is recommended" text? Just that it reads as a normative statement?
And what about something like this:
| Wallet implementers need to choose a source of client metadata they can trust within their own ecosystem or implementation. This should determine whether it is safe to use or display to a User. For example, a client name obtained from an X.509 certificate can be trusted, whereas a client name from the `client_metadata` parameter cannot. | |
| It is recommended to use `client_metadata` parameters only for client-supplied parameters that can be used untrusted, for example, a public key. | |
| Ecosystems can use other ecosystem-specific trusted data sources as long as they conduct a proper trust evaluation. | |
| Ecosystems can define other ecosystem-specific trusted data sources in a profile as long as they conduct a proper trust evaluation. |

One potential solution for: #670