[java-oidc-common] branch main updated: JCOMOIDC-161 - Facilitate extending the credential resolvers for RP/OP metadata

Codeberg noreply at shibboleth.net
Mon Nov 2 10:27:00 UTC 2026


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

codeberg pushed a commit to branch main
in repository java-oidc-common.

View the commit online:
https://codeberg.org/Shibboleth/java-oidc-common/commit/f27ff0b33458859b279a8242e90ec72c4e5acc1a

The following commit(s) were added to refs/heads/main by this push:
     new f27ff0b3 JCOMOIDC-161 - Facilitate extending the credential resolvers for RP/OP metadata
f27ff0b3 is described below

commit f27ff0b33458859b279a8242e90ec72c4e5acc1a
Author: Phil Smart <philip.smart at jisc.ac.uk>
AuthorDate: Mon Nov 2 10:26:50 2026 +0000

    JCOMOIDC-161 - Facilitate extending the credential resolvers for RP/OP
    metadata
    
     - Make additional criteria optional via a strategy.
    
    https://shibboleth.atlassian.net/browse/JCOMOIDC-161
---
 .../impl/BaseJWTSignatureSecurityHandler.java      | 51 ++++++++++++++++++++--
 1 file changed, 48 insertions(+), 3 deletions(-)

diff --git a/oidc-common-crypto-impl/src/main/java/net/shibboleth/oidc/security/impl/BaseJWTSignatureSecurityHandler.java b/oidc-common-crypto-impl/src/main/java/net/shibboleth/oidc/security/impl/BaseJWTSignatureSecurityHandler.java
index 3462de54..06845054 100644
--- a/oidc-common-crypto-impl/src/main/java/net/shibboleth/oidc/security/impl/BaseJWTSignatureSecurityHandler.java
+++ b/oidc-common-crypto-impl/src/main/java/net/shibboleth/oidc/security/impl/BaseJWTSignatureSecurityHandler.java
@@ -53,6 +53,7 @@ import net.shibboleth.shared.logic.Constraint;
 import net.shibboleth.shared.logic.FunctionSupport;
 import net.shibboleth.shared.primitive.LoggerFactory;
 import net.shibboleth.shared.resolver.CriteriaSet;
+import net.shibboleth.shared.resolver.Criterion;
 
 /**
  * Base class for security message handlers which evaluate a JWT signature with a signature trust engine.
@@ -106,6 +107,9 @@ public abstract class BaseJWTSignatureSecurityHandler extends BaseTrustEngineSec
 
     /** The client information found from the lookup strategy. */
     @Nullable private OIDCClientInformation clientInformation;
+    
+    /** Strategy used to supply additional criteria for the trust engine criteria set. */ 
+    @Nonnull private Function<MessageContext, CriteriaSet> additionalCriteriaLookupStrategy;
 
     /** Constructor.*/
     protected BaseJWTSignatureSecurityHandler() {
@@ -113,6 +117,7 @@ public abstract class BaseJWTSignatureSecurityHandler extends BaseTrustEngineSec
         clientInformationLookupStrategy = FunctionSupport.constant(null);
         relyingPartyContextLookupStrategy = new ChildContextLookup<>(RelyingPartyContext.class);
         securityParametersContextLookupStrategy = new ChildContextLookup<>(SecurityParametersContext.class, true);
+        additionalCriteriaLookupStrategy = FunctionSupport.constant(null);
     }
     
     /**
@@ -168,6 +173,22 @@ public abstract class BaseJWTSignatureSecurityHandler extends BaseTrustEngineSec
                 Constraint.isNotNull(strategy, "RelyingPartyContext lookup strategy cannot be null");
     }
     
+    /**
+     * Set a lookup strategy to provide additional {@link Criterion} as a {@link CriteriaSet} for inclusion in
+     * the final, built, criteriaSet for the trust engine to use.
+     * 
+     * @param strategy the strategy
+     * 
+     * @since 3.4.0
+     */
+    public void setAdditionalCriteriaLookupStrategy(
+    		@Nonnull final Function<MessageContext, CriteriaSet> strategy) {
+    	checkSetterPreconditions();
+    	
+		additionalCriteriaLookupStrategy = Constraint.isNotNull(strategy, "Additional criteria lookup strategy cannot "
+				+ "be null");
+	}
+    
     /**
      * Get the {@link OIDCPeerEntityContext} associated with the message.
      * 
@@ -231,6 +252,7 @@ public abstract class BaseJWTSignatureSecurityHandler extends BaseTrustEngineSec
             criteriaSet.add(new ClientInformationCriterion(clientInformation));
         }
 
+        // TODO: deprecate this when things move over to the new credential resolver service for the SP
         if (profileConfiguration != null) {
             final ClientSecretCredential credential =
                     profileConfiguration.getClientCredential(PRC_LOOKUP.apply(messageContext));
@@ -253,9 +275,10 @@ public abstract class BaseJWTSignatureSecurityHandler extends BaseTrustEngineSec
             criteriaSet.add(new SignatureValidationParametersCriterion(valParams));
         }
 
-        final ProfileRequestContext profileRequestContext = PRC_LOOKUP.apply(messageContext);
-        if (profileRequestContext != null) {
-            criteriaSet.add(new ProfileRequestContextCriterion(profileRequestContext));
+        final CriteriaSet additionalCriteria = additionalCriteriaLookupStrategy.apply(messageContext);
+        if (additionalCriteria != null) {
+        	// Note the strategy can not produce duplicate criteria, otherwise this will fail.
+        	criteriaSet.addAll(additionalCriteria);
         }
 
         return criteriaSet;
@@ -275,5 +298,27 @@ public abstract class BaseJWTSignatureSecurityHandler extends BaseTrustEngineSec
             @Nonnull final Function<ProfileRequestContext, T> function) {
         return function.compose(PRC_LOOKUP);
     }
+    
+    /**
+     * A criteria set builder that looks up the {@link ProfileRequestContext} and includes it as a 
+     * {@link ProfileRequestContextCriterion}.
+     */
+    public static final class ProfileRequestContextCriteriaSetBuilder 
+    	implements Function<MessageContext, CriteriaSet> {
+
+		@Override
+		public CriteriaSet apply(final MessageContext messageContext) {
+			final CriteriaSet criteriaSet = new CriteriaSet();
+	        
+
+	        final ProfileRequestContext profileRequestContext = PRC_LOOKUP.apply(messageContext);
+	        if (profileRequestContext != null) {
+	            criteriaSet.add(new ProfileRequestContextCriterion(profileRequestContext));
+	        }
+
+	        return criteriaSet;
+		}
+    	
+    }
 
 }
\ No newline at end of file

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


More information about the commits mailing list