[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