Skip to content

Add credential dataset version - #472

Open
awoie wants to merge 32 commits into
mainfrom
awoie/add-credential-versioning
Open

Add credential dataset version#472
awoie wants to merge 32 commits into
mainfrom
awoie/add-credential-versioning

Conversation

@awoie

@awoie awoie commented Mar 25, 2025

Copy link
Copy Markdown
Contributor

Fixes #278

  • Defines term
  • Adds param to credential response and deferred credential response; param is required for issuers to return, and for wallets to not always expect to not break 1.0/1.1 implementations.

Comment thread openid-4-verifiable-credential-issuance-1_0.md Outdated
Comment thread openid-4-verifiable-credential-issuance-1_0.md Outdated

@tplooker tplooker left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

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.

@tplooker

Copy link
Copy Markdown
Contributor

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.

@Sakurann

Sakurann commented May 5, 2025

Copy link
Copy Markdown
Collaborator

temporarily close to prevent confusion - will reopen once 1.0 goes out

@Sakurann

Copy link
Copy Markdown
Collaborator

reopening now that 1.0 has been published. Please push the changes to 1.1.md, and not 1.0.md

@awoie
awoie force-pushed the awoie/add-credential-versioning branch from 1af74c9 to 5846457 Compare January 27, 2026 17:01
@awoie
awoie requested a review from tplooker January 27, 2026 17:03
@awoie

awoie commented Jan 27, 2026

Copy link
Copy Markdown
Contributor Author

@Sakurann @jogu fixed the merge conflicts. Please review again @tplooker and others.

@awoie

awoie commented Jan 27, 2026

Copy link
Copy Markdown
Contributor Author

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.

@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?

Comment thread 1.1/openid-4-verifiable-credential-issuance-1_1.md Outdated

@Sakurann Sakurann left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

I think it would be good to add a bit more description of the feature this parameter enables outside the definition of a term?

Comment thread 1.1/openid-4-verifiable-credential-issuance-1_1.md Outdated
Comment thread 1.1/openid-4-verifiable-credential-issuance-1_1.md Outdated
Comment thread 1.1/openid-4-verifiable-credential-issuance-1_1.md Outdated
Comment thread 1.1/openid-4-verifiable-credential-issuance-1_1.md Outdated

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.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

This text is missing the connection to credential_instance returned from Token Response.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

You mean credential_identifier from the token response (aka credential instance). This makes sense.

@awoie awoie Jun 18, 2026

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

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.

Suggested change
* 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.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Suggested change
* 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.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

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.

Comment thread 1.1/openid-4-verifiable-credential-issuance-1_1.md
@paulbastian paulbastian changed the title Add credential dataset identifier Add credential dataset version Jun 17, 2026
Comment thread 1.1/openid-4-verifiable-credential-issuance-1_1.md Outdated
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.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

This should really only be about non-cryptographic data, i.e. the actual data in the credential.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

See #752.

@brentzundel

Copy link
Copy Markdown
Collaborator

Discussed in WG meeting. Oliver will take next steps with this PR, responding to latest feedback. Gareth will raise a new issue.

Comment thread 1.1/openid-4-verifiable-credential-issuance-1_1.md Outdated
Comment thread .DS_Store Outdated
Comment thread 1.1/openid-4-verifiable-credential-issuance-1_1.md Outdated
Comment on lines +1400 to +1402
* 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.

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

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.)

Comment thread 1.1/openid-4-verifiable-credential-issuance-1_1.md Outdated
* 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.

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

I think 'most recently received' is probably a clearer intent than 'latest received':

Suggested change
* 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.

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

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?

Comment thread 1.1/openid-4-verifiable-credential-issuance-1_1.md Outdated
Comment thread 1.1/openid-4-verifiable-credential-issuance-1_1.md Outdated
Comment thread 1.1/openid-4-verifiable-credential-issuance-1_1.md Outdated
@awoie
awoie requested review from GarethCOliver, fkj and raleng August 6, 2026 15:35

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.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

MUST or SHOULD?

@brentzundel

Copy link
Copy Markdown
Collaborator

Discussed in DCP WG today.
Recommended path forward is this PR keeps SHOULD and gets merged, an issue is raised to track wallet capability negotiation as a general feature, then at such time that that feature gets added, likely these SHOULDs should become MUSTs.

Comment thread 1.1/openid-4-verifiable-credential-issuance-1_1.md Outdated
Comment thread 1.1/openid-4-verifiable-credential-issuance-1_1.md Outdated
Comment thread 1.1/openid-4-verifiable-credential-issuance-1_1.md Outdated
Comment thread 1.1/openid-4-verifiable-credential-issuance-1_1.md Outdated
Comment thread 1.1/openid-4-verifiable-credential-issuance-1_1.md Outdated
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.

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

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.

@jogu jogu Aug 20, 2026

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

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).

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Good observation, I would be fine with "tag"

Comment thread 1.1/openid-4-verifiable-credential-issuance-1_1.md
@jogu

jogu commented Aug 20, 2026

Copy link
Copy Markdown
Collaborator

Discussed in DCP WG today. Recommended path forward is this PR keeps SHOULD and gets merged, an issue is raised to track wallet capability negotiation as a general feature, then at such time that that feature gets added, likely these SHOULDs should become MUSTs.

That issue hasn't been raised yet I think?

Comment thread 1.1/openid-4-verifiable-credential-issuance-1_1.md Outdated
Co-authored-by: Joseph Heenan <joseph@heenan.me.uk>
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.

Supporting Credential Versioning

10 participants