Skip to content

Add credential dataset version - #472

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

Add credential dataset version#472
awoie wants to merge 31 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
: A set of one or more claims about a subject, provided by a Credential Issuer.

Credential Dataset Version
: A String that refers to a specific version of a Credential Dataset. This version is identical for multiple instances of a Credential that share the same Credential Dataset, even when the Credential instances differ in cryptographic data, e.g., an Issuer signature. When any of the claim values in the Credential Dataset change, a new Credential Dataset Version is assigned. Note that a Credential Dataset Version is bound to a specific Credential Format.

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.

It's not just cryptographic data, also other security claims. e.g. exp, iat, cnf etc.

@awoie awoie Jun 12, 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.

yep, i thought about this as well but we are using cryptographic data for these things. imo, we should have a term definition of cryptographic data, or credential metadata that includes these things. would it be ok to have a separate PR for this? we use the term cryptographic data in the batch issuance endpoint already. and there we define only three categories: format, dataset and cryptographic data which should be reworked a bit for clarity. i suggest to do that in the same PR.

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.

I'm pretty sure I've seen some language similar to "security-related claims" in other specs, but I can't seem to find it right now. Would be nice to have a standard term.

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.

Here it gets tricky, because for ISO mdocs this would essentially be all data contained in the MSO, right? We should think about the right term definitions and keep it very broad in this PR.

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 updated this PR to mention timestamps but created this issue to discuss term definitions: #752

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

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