[java-plugin-shibd-saml] branch main updated: Implement resolution of specific attributes.

Scott Cantor cantor.2 at osu.edu
Wed Sep 17 20:10:19 UTC 2025


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

scantor pushed a commit to branch main
in repository java-plugin-shibd-saml.

View the commit online:
http://git.shibboleth.net/view/?p=java-plugin-shibd-saml.git;a=commit;h=609e43d4e70c40bdbcc90ebbd1be450e47e017cc

The following commit(s) were added to refs/heads/main by this push:
     new 609e43d  Implement resolution of specific attributes.
609e43d is described below

commit 609e43d4e70c40bdbcc90ebbd1be450e47e017cc
Author: Scott Cantor <cantor.2 at osu.edu>
AuthorDate: Wed Sep 17 16:10:12 2025 -0400

    Implement resolution of specific attributes.
---
 .../impl/BrowserSSOProfileConfiguration.java       | 44 ++++++++++++++++++++++
 .../saml2/profile/impl/ExtractSAMLAttributes.java  |  7 +++-
 2 files changed, 49 insertions(+), 2 deletions(-)

diff --git a/sp-saml-impl/src/main/java/net/shibboleth/sp/saml/saml2/profile/config/impl/BrowserSSOProfileConfiguration.java b/sp-saml-impl/src/main/java/net/shibboleth/sp/saml/saml2/profile/config/impl/BrowserSSOProfileConfiguration.java
index 6220d5b..d055ab5 100644
--- a/sp-saml-impl/src/main/java/net/shibboleth/sp/saml/saml2/profile/config/impl/BrowserSSOProfileConfiguration.java
+++ b/sp-saml-impl/src/main/java/net/shibboleth/sp/saml/saml2/profile/config/impl/BrowserSSOProfileConfiguration.java
@@ -34,6 +34,7 @@ import net.shibboleth.shared.collection.CollectionSupport;
 import net.shibboleth.shared.logic.Constraint;
 import net.shibboleth.shared.logic.FunctionSupport;
 import net.shibboleth.shared.logic.PredicateSupport;
+import net.shibboleth.shared.primitive.StringSupport;
 
 import org.opensaml.profile.context.ProfileRequestContext;
 import org.opensaml.saml.common.xml.SAMLConstants;
@@ -50,6 +51,9 @@ public class BrowserSSOProfileConfiguration extends AbstractSAML2AssertionConsum
     /** Whether attributes should be resolved in the course of the profile. */
     @Nonnull private Predicate<ProfileRequestContext> resolveAttributesPredicate;
 
+    /** Lookup strategy for requested IdP attribute names to pass into resolver. */
+    @Nonnull private Function<ProfileRequestContext,Collection<String>> requestedIdPAttributeNamesLookupStrategy;
+    
     /** Lookup strategy for attribute recipient group ID. */
     @Nonnull private Function<ProfileRequestContext,String> attributeRecipientGroupIDLookupStrategy;
     
@@ -116,6 +120,7 @@ public class BrowserSSOProfileConfiguration extends AbstractSAML2AssertionConsum
         super(profileId);
         setEncryptNameIDs(true);
         resolveAttributesPredicate = PredicateSupport.alwaysFalse();
+        requestedIdPAttributeNamesLookupStrategy = FunctionSupport.constant(null);
         attributeRecipientGroupIDLookupStrategy = FunctionSupport.constant(null);
         forceAuthnPredicate = PredicateSupport.alwaysFalse();
         checkAddressPredicate = PredicateSupport.alwaysTrue();
@@ -157,6 +162,45 @@ public class BrowserSSOProfileConfiguration extends AbstractSAML2AssertionConsum
     public void setResolveAttributesPredicate(@Nonnull final Predicate<ProfileRequestContext> condition) {
         resolveAttributesPredicate = Constraint.isNotNull(condition, "Resolve attributes predicate cannot be null");
     }
+
+    /** {@inheritDoc} */
+    @Nonnull @Unmodifiable @NotLive public Collection<String> getRequestedIdPAttributeNames(
+            @Nullable final ProfileRequestContext profileRequestContext) {
+        final Collection<String> names = requestedIdPAttributeNamesLookupStrategy.apply(profileRequestContext);
+        if (names != null) {
+            return CollectionSupport.copyToSet(names);
+        }
+        return CollectionSupport.emptySet();
+    }
+    
+    /**
+     * Set {@link IdPAttribute} names to resolve (if resolving attributes). 
+     * 
+     * @param names {@link IdPAttribute} names to resolve
+     * 
+     * @since 5.2.0
+     */
+    public void setRequestedIdPAttributeNames(@Nullable final Collection<String> names) {
+        if (names == null || names.isEmpty()) {
+            requestedIdPAttributeNamesLookupStrategy = FunctionSupport.constant(null);
+        } else {
+            requestedIdPAttributeNamesLookupStrategy = FunctionSupport.constant(
+                    CollectionSupport.copyToSet(StringSupport.normalizeStringCollection(names)));
+        }
+    }
+    
+    /**
+     * Lookup strategy for {@link IdPAttribute} names to resolve (if resolving attributes).
+     * 
+     * @param strategy lookup strategy
+     * 
+     * @since 5.2.0
+     */
+    public void setRequestedIdPAttributeNamesLookupStrategy(
+            @Nonnull final Function<ProfileRequestContext,Collection<String>> strategy) {
+        requestedIdPAttributeNamesLookupStrategy =
+                Constraint.isNotNull(strategy, "Requested IdPAttribute names lookup strategy cannot be null");
+    }
     
     /** {@inheritDoc} */
     @Nullable public String getAttributeRecipientGroupID(@Nullable final ProfileRequestContext profileRequestContext) {
diff --git a/sp-saml-impl/src/main/java/net/shibboleth/sp/saml/saml2/profile/impl/ExtractSAMLAttributes.java b/sp-saml-impl/src/main/java/net/shibboleth/sp/saml/saml2/profile/impl/ExtractSAMLAttributes.java
index f1b0b49..93f877b 100644
--- a/sp-saml-impl/src/main/java/net/shibboleth/sp/saml/saml2/profile/impl/ExtractSAMLAttributes.java
+++ b/sp-saml-impl/src/main/java/net/shibboleth/sp/saml/saml2/profile/impl/ExtractSAMLAttributes.java
@@ -497,7 +497,8 @@ public class ExtractSAMLAttributes extends AbstractApplicationAction {
                             new RecursiveTypedParentContextLookup<>(ProfileRequestContext.class)))
             .setProxiedRequesterContextLookupStrategy(null)
             .setAttributeIssuerID(issuerLookupStrategy.apply(profileRequestContext))
-            .setAttributeRecipientID(requesterLookupStrategy.apply(profileRequestContext));
+            .setAttributeRecipientID(requesterLookupStrategy.apply(profileRequestContext))
+            .setAttributeRecipientGroupID(profileConfiguration.getAttributeRecipientGroupID(profileRequestContext));
     }
     
     /**
@@ -516,7 +517,9 @@ public class ExtractSAMLAttributes extends AbstractApplicationAction {
         resolutionContext.setResolutionLabel("sp/consumer/saml2")
             .setPrincipal(profileConfiguration.getAttributeResolutionPrincipal(profileRequestContext))
             .setAttributeIssuerID(issuerLookupStrategy.apply(profileRequestContext))
-            .setAttributeRecipientID(requesterLookupStrategy.apply(profileRequestContext));
+            .setAttributeRecipientID(requesterLookupStrategy.apply(profileRequestContext))
+            .setAttributeRecipientGroupID(profileConfiguration.getAttributeRecipientGroupID(profileRequestContext))
+            .setRequestedIdPAttributeNames(profileConfiguration.getRequestedIdPAttributeNames(profileRequestContext));
         
         profileRequestContext.addSubcontext(resolutionContext, true);
         resolutionContext.resolveAttributes(ensureApplication().getAttributeResolver());

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


More information about the commits mailing list