[java-idp-plugin-vci] branch dev/VCDM updated: Include credential id if part of definition

Codeberg noreply at shibboleth.net
Tue Apr 28 07:59:01 UTC 2026


This is an automated email from the git hooks/post-receive script.

codeberg pushed a commit to branch dev/VCDM
in repository java-idp-plugin-vci.

View the commit online:
https://codeberg.org/Shibboleth/java-idp-plugin-vci/commit/bba467ef8a865e037265cfe297787d867188162c

The following commit(s) were added to refs/heads/dev/VCDM by this push:
     new bba467e  Include credential id if part of definition
bba467e is described below

commit bba467ef8a865e037265cfe297787d867188162c
Author: Janne Lauros <janne.lauros at csc.fi>
AuthorDate: Tue Apr 28 10:58:47 2026 +0300

    Include credential id if part of definition
---
 .../openidvci/credential/CredentialDefinition.java | 28 ++++++++++++++++++----
 .../credential/CredentialDefinitionTest.java       |  3 ++-
 .../credentials/CredentialDefinition.json          |  1 +
 ...FormJsonLdSelectiveDisclosureJWTCredential.java |  1 +
 4 files changed, 28 insertions(+), 5 deletions(-)

diff --git a/openid-vci-api/src/main/java/org/geant/shibboleth/plugin/openidvci/credential/CredentialDefinition.java b/openid-vci-api/src/main/java/org/geant/shibboleth/plugin/openidvci/credential/CredentialDefinition.java
index e8526eb..96f3c48 100644
--- a/openid-vci-api/src/main/java/org/geant/shibboleth/plugin/openidvci/credential/CredentialDefinition.java
+++ b/openid-vci-api/src/main/java/org/geant/shibboleth/plugin/openidvci/credential/CredentialDefinition.java
@@ -24,7 +24,9 @@ import javax.annotation.Nullable;
 
 import com.fasterxml.jackson.annotation.JsonCreator;
 import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
+import com.fasterxml.jackson.annotation.JsonInclude;
 import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonInclude.Include;
 import com.fasterxml.jackson.core.JsonProcessingException;
 import com.fasterxml.jackson.databind.ObjectMapper;
 import com.nimbusds.oauth2.sdk.ParseException;
@@ -46,6 +48,12 @@ public class CredentialDefinition {
     @JsonProperty("@context")
     private final List<String> context;
 
+    /** Id of credential definition. */
+    @Nullable
+    @JsonProperty("id")
+    @JsonInclude(Include.NON_NULL)
+    private final String id;
+
     /** Type of credential definition. */
     @Nonnull
     @JsonProperty("type")
@@ -55,14 +63,16 @@ public class CredentialDefinition {
      * Constructor.
      * 
      * @param context Context of credential definition
+     * @param id      Id of credential definition
      * @param type    Type of credential definition
      */
-    private CredentialDefinition(@JsonProperty("@context") @Nullable List<String> context,
-            @JsonProperty("type") @Nullable List<String> type) {
+    private CredentialDefinition(@JsonProperty("@context") @Nonnull List<String> context,
+            @JsonProperty("id") @Nullable String id, @JsonProperty("type") @Nonnull List<String> type) {
         assert context != null;
         assert type != null;
         this.context = context;
         this.type = type;
+        this.id = id;
     }
 
     /**
@@ -75,6 +85,16 @@ public class CredentialDefinition {
         return context;
     }
 
+    /**
+     * Get Id of credential definition.
+     * 
+     * @return Id of credential definition
+     */
+    @Nullable
+    public String getId() {
+        return id;
+    }
+
     /**
      * Get type of credential definition.
      * 
@@ -109,10 +129,10 @@ public class CredentialDefinition {
 
     @JsonCreator
     public static CredentialDefinition of(@JsonProperty("@context") @Nullable List<String> context,
-            @JsonProperty("type") @Nullable List<String> type) {
+            @JsonProperty("id") @Nullable String id, @JsonProperty("type") @Nullable List<String> type) {
         if (context == null || type == null) {
             return null;
         }
-        return new CredentialDefinition(context, type);
+        return new CredentialDefinition(context, id, type);
     }
 }
diff --git a/openid-vci-api/src/test/java/org/geant/shibboleth/plugin/openidvci/credential/CredentialDefinitionTest.java b/openid-vci-api/src/test/java/org/geant/shibboleth/plugin/openidvci/credential/CredentialDefinitionTest.java
index e55aecd..ce9f2b3 100644
--- a/openid-vci-api/src/test/java/org/geant/shibboleth/plugin/openidvci/credential/CredentialDefinitionTest.java
+++ b/openid-vci-api/src/test/java/org/geant/shibboleth/plugin/openidvci/credential/CredentialDefinitionTest.java
@@ -48,8 +48,9 @@ public class CredentialDefinitionTest {
                 "https://www.w3.org/2018/credentials/examples/v1");
         Assert.assertEquals(credentialDefinition.getType().get(0), "VerifiableCredential");
         Assert.assertEquals(credentialDefinition.getType().get(1), "UniversityDegreeCredential");
+        Assert.assertEquals(credentialDefinition.getId(), "http://university.example/credentials/3732");
         Assert.assertEquals(credentialDefinition.serialize(),
-                "{\"@context\":[\"https://www.w3.org/2018/credentials/v1\",\"https://www.w3.org/2018/credentials/examples/v1\"],\"type\":[\"VerifiableCredential\",\"UniversityDegreeCredential\"]}");
+                "{\"@context\":[\"https://www.w3.org/2018/credentials/v1\",\"https://www.w3.org/2018/credentials/examples/v1\"],\"id\":\"http://university.example/credentials/3732\",\"type\":[\"VerifiableCredential\",\"UniversityDegreeCredential\"]}");
 
     }
 
diff --git a/openid-vci-api/src/test/resources/credentials/CredentialDefinition.json b/openid-vci-api/src/test/resources/credentials/CredentialDefinition.json
index 5a74cd9..5b646e9 100644
--- a/openid-vci-api/src/test/resources/credentials/CredentialDefinition.json
+++ b/openid-vci-api/src/test/resources/credentials/CredentialDefinition.json
@@ -3,6 +3,7 @@
 		"https://www.w3.org/2018/credentials/v1",
 		"https://www.w3.org/2018/credentials/examples/v1"
 	],
+	"id": "http://university.example/credentials/3732",
 	"type": [
 		"VerifiableCredential",
 		"UniversityDegreeCredential"
diff --git a/openid-vci-impl/src/main/java/org/geant/shibboleth/plugin/openidvci/profile/impl/FormJsonLdSelectiveDisclosureJWTCredential.java b/openid-vci-impl/src/main/java/org/geant/shibboleth/plugin/openidvci/profile/impl/FormJsonLdSelectiveDisclosureJWTCredential.java
index 27a1fb8..f911795 100644
--- a/openid-vci-impl/src/main/java/org/geant/shibboleth/plugin/openidvci/profile/impl/FormJsonLdSelectiveDisclosureJWTCredential.java
+++ b/openid-vci-impl/src/main/java/org/geant/shibboleth/plugin/openidvci/profile/impl/FormJsonLdSelectiveDisclosureJWTCredential.java
@@ -129,6 +129,7 @@ public class FormJsonLdSelectiveDisclosureJWTCredential extends AbstractProfileA
             try {
                 credentials.add(new JWTClaimsSet.Builder(cred.toJWTClaimsSet())
                         .claim("@context", ctx.getCredentialConfiguration().getCredentialDefinition().getContext())
+                        .claim("id", ctx.getCredentialConfiguration().getCredentialDefinition().getId())
                         .claim("type", ctx.getCredentialConfiguration().getCredentialDefinition().getType())
                         .claim("credentialSubject", credentialSubject).claim("_sd_alg", "sha-256").build());
             } catch (ParseException e) {

-- 
To stop receiving notification emails like this one, please contact
the administrator of this repository.


More information about the commits mailing list