Add credential dataset version - #472
Conversation
tplooker
left a comment
There was a problem hiding this comment.
Minor editorial review, generally very supportive of this proposal I think its a critical feature. Few other thoughts
- We should consider making this feature required as leaving it optional will make communicating credential updates/refreshes difficult.
- I believe the specification would benefit from a seperate additional endpoint that enables a wallet to ask if there are any updates for a specific credential. Otherwise without this a wallet is forced to ask for a new credential in order to determine whether anything has changed.
|
Only other thing that came to mind on this topic that perhaps we need to discuss is how we support different datasets versus different versions of the same dataset as I suspect in the event an issuer is issuing two different datasets for the same credential (e.g two credentials about different people), to the same wallet this identifier would become ambiguous. |
|
temporarily close to prevent confusion - will reopen once 1.0 goes out |
|
reopening now that 1.0 has been published. Please push the changes to 1.1.md, and not 1.0.md |
1af74c9 to
5846457
Compare
@tplooker If the same credential configuration is used for two different initial data sets, then you would need some additional mechanism. Wouldn't this be rather two distinct credential configurations, e.g., child, parent configuration? We could also introduce another layer between credential configuration and credential dataset identifier (version)? Is there a third option and do you have a proposal, e.g., through some new endpoint? |
Sakurann
left a comment
There was a problem hiding this comment.
I think it would be good to add a bit more description of the feature this parameter enables outside the definition of a term?
|
|
||
| If the Credential Issuer includes the `credential_dataset_version` parameter, the following requirements apply: | ||
|
|
||
| * For a given Credential Dataset within the scope of a concrete Credential Format, if the Credential Dataset has not changed, the Credential Issuer MUST return the same Credential Dataset Version, even when issuing a new Credential instance with different cryptographic data, e.g., an Issuer signature. |
There was a problem hiding this comment.
This text is missing the connection to credential_instance returned from Token Response.
There was a problem hiding this comment.
You mean credential_identifier from the token response (aka credential instance). This makes sense.
There was a problem hiding this comment.
I think "credential instance" may not be the best term, as multiple credential instances can correspond to the same credential identifier, credential configuration, and credential dataset, differing only in their cryptographic proof. Btw, we need a term definition for credential instance as well.
| * For a given Credential Dataset within the scope of a concrete Credential Format, if the Credential Dataset has not changed, the Credential Issuer MUST return the same Credential Dataset Version, even when issuing a new Credential instance with different cryptographic data, e.g., an Issuer signature. | |
| * For a given Credential Dataset as identified by the `credential_identifier`, if provided in the Token Response, within the scope of a concrete Credential Format, if the Credential Dataset has not changed, the Credential Issuer MUST return the same Credential Dataset Version, even when issuing a new Credential instance with different cryptographic data, e.g., an Issuer signature. |
There was a problem hiding this comment.
| * For a given Credential Dataset within the scope of a concrete Credential Format, if the Credential Dataset has not changed, the Credential Issuer MUST return the same Credential Dataset Version, even when issuing a new Credential instance with different cryptographic data, e.g., an Issuer signature. | |
| * If a Credential Dataset (identified by `credential_identifier` or `scope` for a particular Credential Configuration of a particular Credential Issuer) has not changed, the Credential Issuer MUST return the same Credential Dataset Version, even when issuing a new Credential instance with different cryptographic data, e.g., an Issuer signature. |
There was a problem hiding this comment.
WG discussion: maybe we need a new identifier for this that works even without credential_identifier (to support scope) and also to impose requirements without breaking changes.
| If the Credential Issuer includes the `credential_dataset_version` parameter, the following requirements apply: | ||
|
|
||
| * For a given Credential Dataset within the scope of a concrete Credential Format, if the Credential Dataset has not changed, the Credential Issuer MUST return the same Credential Dataset Version, even when issuing a new Credential instance with different cryptographic data, e.g., an Issuer signature. | ||
| * If any claim value in the Credential Dataset changes, the Credential Issuer MUST assign a new Credential Dataset Version. |
There was a problem hiding this comment.
This should really only be about non-cryptographic data, i.e. the actual data in the credential.
|
Discussed in WG meeting. Oliver will take next steps with this PR, responding to latest feedback. Gareth will raise a new issue. |
| * Wallets MUST compare Credential Dataset Version values for equality using simple string comparison with no normalization. | ||
| * Wallets MUST NOT infer ordering, such as whether one value is newer or older than another, from Credential Dataset Version values. | ||
| * Wallets SHOULD maintain active Credentials only from the latest received version of a Credential Dataset. If the Wallet is unable to determine the latest received version, it is RECOMMENDED that it make a new Credential Request. |
There was a problem hiding this comment.
These 3 clauses make me feel that what we're returning isn't actually a version, and hence that credential_dataset_version is misnamed.
It's an opaque thing, and its only property is that if it changes the wallet must throw everything away. It could (kind of) just oscillate between 'a' and 'b' whenever anything changes. Not sure what the right word/phrase is - 'tag' maybe?
I think it would probably also be sensible to be clear about whether the field is intended to be displayed to the user or not. (I presume not.)
| * If any claim value in the Credential Dataset changes, the Credential Issuer MUST assign a new Credential Dataset Version. | ||
| * Wallets MUST compare Credential Dataset Version values for equality using simple string comparison with no normalization. | ||
| * Wallets MUST NOT infer ordering, such as whether one value is newer or older than another, from Credential Dataset Version values. | ||
| * Wallets SHOULD maintain active Credentials only from the latest received version of a Credential Dataset. If the Wallet is unable to determine the latest received version, it is RECOMMENDED that it make a new Credential Request. |
There was a problem hiding this comment.
I think 'most recently received' is probably a clearer intent than 'latest received':
| * Wallets SHOULD maintain active Credentials only from the latest received version of a Credential Dataset. If the Wallet is unable to determine the latest received version, it is RECOMMENDED that it make a new Credential Request. | |
| * Wallets SHOULD maintain active Credentials only from the most recently received version of a Credential Dataset. If the Wallet is unable to determine the most recently received version, it is RECOMMENDED that it make a new Credential Request. |
There was a problem hiding this comment.
I'm pretty unclear about 'If the Wallet is unable to determine the latest received version, it is RECOMMENDED that it make a new Credential Request.' - when would this be the care?
Co-authored-by: Joseph Heenan <joseph@heenan.me.uk> Co-authored-by: Paul Bastian <paul.bastian@posteo.de>
|
|
||
| The following requirements apply to Wallets: | ||
|
|
||
| * Wallets SHOULD treat both `credential_dataset_identifier` and `credential_dataset_version` as opaque strings and compare them using simple string comparison. |
|
Discussed in DCP WG today. |
| The following requirements apply to a Credential Issuer that includes these parameters: | ||
|
|
||
| * Credential Issuers SHOULD NOT disclose the Credential Dataset Identifier or the Credential Dataset Version to any other parties than the particular Wallet, they are issued to. | ||
| * Credential Issuers SHOULD return the same Credential Dataset Identifier for every issuance from the same Credential Dataset, including issuances authorized by a different Access Token and issuances obtained through a different authorization flow. |
There was a problem hiding this comment.
I think we should be clearer here about whether this includes issuances to a different wallet or not.
If it does I think that needs a line in privacy concerns as it's introducing a new potential wallet<>wallet correlation factor that might be surprising in some use cases (e.g. pure age assurance credentials).
| * `notification_id`: OPTIONAL. String identifying one or more Credentials issued in one Credential Response. It MUST be included in the Notification Request as defined in (#notification). It MUST not be used if the `credentials` parameter is not present. | ||
| * `credential_metadata`: OPTIONAL. Object that contains additional metadata specific to the issued Credential(s). The definitions and contained parameters for this Object are identical to the `credential_metadata` parameter as defined in Credential Issuer Metadata (see (#credential-issuer-metadata)) See (#display-metadata-considerations) for implementation considerations on credential metadata. | ||
| * `credential_dataset_id`: RECOMMENDED. A string containing the Credential Dataset Identifier of the Credential Dataset from which the returned Credential(s) were issued. Together with the `credential_dataset_version` parameter, it allows Wallets to determine if previously received Credentials may be superseded. See (#credential-dataset-identifier-implementation) for implementation considerations. | ||
| * `credential_dataset_version`: RECOMMENDED. A string containing the Credential Dataset Version associated with the returned Credential(s). This allows Wallets to detect changes to the underlying Credential Dataset across different Credential Responses. It MUST NOT be used unless the `credential_dataset_id` parameter is also present, since a Credential Dataset Version cannot be interpreted without the Credential Dataset Identifier it belongs to. See (#credential-dataset-identifier-implementation) for implementation considerations. |
There was a problem hiding this comment.
As I think I mentioned earlier, I think we should strongly consider use of a term other than 'version', as 'version' hints at semantics this field just doesn't have.
perhaps credential_dataset_tag?
As I mentioned earlier, I think we should probably be clearer that this isn't intended to be a user visible field (with the possible exception of diagnostic display).
There was a problem hiding this comment.
Good observation, I would be fine with "tag"
That issue hasn't been raised yet I think? |
Co-authored-by: Joseph Heenan <joseph@heenan.me.uk>
Fixes #278