[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