[java-idp-plugin-vci] 03/03: Manipulation strategy is now all purpose vci token manipulation strategy

Codeberg noreply at shibboleth.net
Fri Dec 5 12:43:50 UTC 2025


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

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

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

commit 1685fb1853d48b98975379f0f57ed0c8ebb2694d
Author: jlauros <janne.lauros at csc.fi>
AuthorDate: Fri Dec 5 14:43:23 2025 +0200

    Manipulation strategy is now all purpose vci token manipulation strategy
---
 .../AuthorizationDetailsLookupFunction.java        |  6 ++--
 ...ava => OpenIDVCITokenManipulationStrategy.java} | 35 +++++++++++++++-------
 .../META-INF/net.shibboleth.idp/postconfig.xml     |  4 +--
 3 files changed, 30 insertions(+), 15 deletions(-)

diff --git a/openid-vci-impl/src/main/java/org/geant/shibboleth/plugin/openidvci/messaging/context/navigate/AuthorizationDetailsLookupFunction.java b/openid-vci-impl/src/main/java/org/geant/shibboleth/plugin/openidvci/messaging/context/navigate/AuthorizationDetailsLookupFunction.java
index 209e5e0..cbff6fb 100644
--- a/openid-vci-impl/src/main/java/org/geant/shibboleth/plugin/openidvci/messaging/context/navigate/AuthorizationDetailsLookupFunction.java
+++ b/openid-vci-impl/src/main/java/org/geant/shibboleth/plugin/openidvci/messaging/context/navigate/AuthorizationDetailsLookupFunction.java
@@ -22,7 +22,7 @@ import javax.annotation.Nonnull;
 
 import org.geant.shibboleth.plugin.openidvci.messaging.impl.OpenIDVCIAuthorizationDetail;
 import org.geant.shibboleth.plugin.openidvci.messaging.impl.OpenIDVCITokenRequest;
-import org.geant.shibboleth.plugin.openidvci.profile.logic.AuthorizationDetailsCodeManipulationStrategy;
+import org.geant.shibboleth.plugin.openidvci.profile.logic.OpenIDVCITokenManipulationStrategy;
 import org.opensaml.messaging.context.MessageContext;
 import org.opensaml.messaging.context.navigate.ContextDataLookupFunction;
 import org.opensaml.profile.context.ProfileRequestContext;
@@ -41,7 +41,7 @@ import net.shibboleth.idp.plugin.oidc.op.messaging.context.OIDCAuthenticationRes
  */
 
 /**
- * TODO Locate details also in PAR case.
+ * TODO Locate details also in PAR and or Request Object case.
  */
 public class AuthorizationDetailsLookupFunction
         implements ContextDataLookupFunction<ProfileRequestContext, List<OpenIDVCIAuthorizationDetail>> {
@@ -78,7 +78,7 @@ public class AuthorizationDetailsLookupFunction
                 return null;
             }
             if (oidcCtx.getAuthorizationGrantClaimsSet().getClaimsSet()
-                    .getClaim(AuthorizationDetailsCodeManipulationStrategy.CLAIM_NAME) instanceof String details) {
+                    .getClaim(OpenIDVCITokenManipulationStrategy.AuthDetails) instanceof String details) {
                 try {
                     return OpenIDVCIAuthorizationDetail.parse(details);
                 } catch (JsonProcessingException e) {
diff --git a/openid-vci-impl/src/main/java/org/geant/shibboleth/plugin/openidvci/profile/logic/AuthorizationDetailsCodeManipulationStrategy.java b/openid-vci-impl/src/main/java/org/geant/shibboleth/plugin/openidvci/profile/logic/OpenIDVCITokenManipulationStrategy.java
similarity index 65%
rename from openid-vci-impl/src/main/java/org/geant/shibboleth/plugin/openidvci/profile/logic/AuthorizationDetailsCodeManipulationStrategy.java
rename to openid-vci-impl/src/main/java/org/geant/shibboleth/plugin/openidvci/profile/logic/OpenIDVCITokenManipulationStrategy.java
index 658380d..5c262bf 100644
--- a/openid-vci-impl/src/main/java/org/geant/shibboleth/plugin/openidvci/profile/logic/AuthorizationDetailsCodeManipulationStrategy.java
+++ b/openid-vci-impl/src/main/java/org/geant/shibboleth/plugin/openidvci/profile/logic/OpenIDVCITokenManipulationStrategy.java
@@ -23,8 +23,10 @@ import java.util.function.Function;
 
 import javax.annotation.Nonnull;
 
+import org.geant.shibboleth.plugin.openidvci.messaging.context.TokenContext;
 import org.geant.shibboleth.plugin.openidvci.messaging.context.navigate.AuthorizationDetailsLookupFunction;
 import org.geant.shibboleth.plugin.openidvci.messaging.impl.OpenIDVCIAuthorizationDetail;
+import org.geant.shibboleth.plugin.openidvci.messaging.impl.OpenIDVCITokenRequest;
 import org.opensaml.profile.context.ProfileRequestContext;
 import org.slf4j.Logger;
 
@@ -35,14 +37,24 @@ import com.nimbusds.oauth2.sdk.AuthorizationRequest;
 import net.shibboleth.shared.logic.Constraint;
 import net.shibboleth.shared.primitive.LoggerFactory;
 
-public class AuthorizationDetailsCodeManipulationStrategy
+/**
+ * Token manipulation that locates
+ * 
+ * 1) authorization_details and stores it to token, usually either authorization
+ * code or access token, 2) potential verifiable credentials, stores them to
+ * access token.
+ *
+ */
+public class OpenIDVCITokenManipulationStrategy
         implements BiFunction<ProfileRequestContext, Map<String, Object>, Map<String, Object>> {
 
     /** Class logger. */
     @Nonnull
-    private Logger log = LoggerFactory.getLogger(AuthorizationDetailsCodeManipulationStrategy.class);
+    private Logger log = LoggerFactory.getLogger(OpenIDVCITokenManipulationStrategy.class);
 
-    public final static String CLAIM_NAME = "vci.int.authorizationDetails";
+    public final static String AuthDetails = "vci.int.authorizationDetails";
+
+    public final static String PotentialClaims = "vci.int.potentialClaims";
 
     /** Strategy used to locate the {@link OpenIDVCIAuthorizationDetail} to use. */
     @Nonnull
@@ -63,25 +75,28 @@ public class AuthorizationDetailsCodeManipulationStrategy
     /**
      * Constructor.
      */
-    public AuthorizationDetailsCodeManipulationStrategy() {
+    public OpenIDVCITokenManipulationStrategy() {
         authorizationDetailsStrategy = new AuthorizationDetailsLookupFunction();
     }
 
     @Override
     public Map<String, Object> apply(ProfileRequestContext profileRequestContext, Map<String, Object> claims) {
-        if (profileRequestContext.getInboundMessageContext().getMessage() instanceof AuthorizationRequest request) {
+        Object message = profileRequestContext.getInboundMessageContext().getMessage();
+        if (message instanceof AuthorizationRequest || message instanceof OpenIDVCITokenRequest) {
             try {
-                List<OpenIDVCIAuthorizationDetail> details = OpenIDVCIAuthorizationDetail
-                        .parse(request.toHTTPRequest());
+                List<OpenIDVCIAuthorizationDetail> details = authorizationDetailsStrategy.apply(profileRequestContext);
                 if (details == null) {
                     return null;
                 }
-                claims.put(CLAIM_NAME, new ObjectMapper().writeValueAsString(details));
-                return claims;
+                claims.put(AuthDetails, new ObjectMapper().writeValueAsString(details));
             } catch (JsonProcessingException e) {
                 log.warn("{} Failed parsing", e);
             }
         }
-        return null;
+        TokenContext tokenContext = profileRequestContext.getInboundMessageContext().getSubcontext(TokenContext.class);
+        if (tokenContext != null) {
+            claims.put(PotentialClaims, tokenContext.getPotentialCredentials().toJSONObject());
+        }
+        return claims;
     }
 }
diff --git a/openid-vci-impl/src/main/resources/META-INF/net.shibboleth.idp/postconfig.xml b/openid-vci-impl/src/main/resources/META-INF/net.shibboleth.idp/postconfig.xml
index 5a010b3..2b4f3f7 100644
--- a/openid-vci-impl/src/main/resources/META-INF/net.shibboleth.idp/postconfig.xml
+++ b/openid-vci-impl/src/main/resources/META-INF/net.shibboleth.idp/postconfig.xml
@@ -24,8 +24,8 @@
     <bean id="openidvci.PublicClientValidator"
         class="org.geant.shibboleth.plugin.openidvci.authn.impl.WalletCredentialValidator" />
         
-    <bean id="openidvci.AuthzCodeManipulationStrategy"
-        class="org.geant.shibboleth.plugin.openidvci.profile.logic.AuthorizationDetailsCodeManipulationStrategy" />
+    <bean id="openidvci.TokenManipulationStrategy"
+        class="org.geant.shibboleth.plugin.openidvci.profile.logic.OpenIDVCITokenManipulationStrategy" />
     
 
 </beans>

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


More information about the commits mailing list