[java-shib-attribute] 01/02: JSATTR-6: SAML AttributeQuery DataConnector
Codeberg
noreply at shibboleth.net
Fri Jan 16 01:01:21 UTC 2026
This is an automated email from the git hooks/post-receive script.
codeberg pushed a commit to branch main
in repository java-shib-attribute.
View the commit online:
https://codeberg.org/Shibboleth/java-shib-attribute/commit/499bb60a17e5142726b1794af6572c6b503b09d0
commit 499bb60a17e5142726b1794af6572c6b503b09d0
Author: Brent Putman <putmanb at georgetown.edu>
AuthorDate: Thu Jan 15 19:50:36 2026 -0500
JSATTR-6: SAML AttributeQuery DataConnector
Dependency attributes configured on SimpleAggregation- connector must be
mirrored onto the wrapped SAMLDataConnector instance in custom parser.
Add some TRACE logging about dependencies.
---
.../resolver/dc/saml/impl/ExecutableQueryBuilder.java | 2 ++
.../resolver/dc/saml/impl/SAMLDataConnector.java | 3 +++
.../dc/saml/impl/SimpleAggregationSAMLDataConnector.java | 3 +++
.../dc/saml/impl/AbstractSAMLDataConnectorParser.java | 12 ++++++++++++
.../SimpleAggregationSAMLDataConnectorParserTest.java | 6 ++++++
.../dc/saml/resolver/saml-attribute-resolver-v2.xml | 16 ++++++++++++++++
6 files changed, 42 insertions(+)
diff --git a/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/saml/impl/ExecutableQueryBuilder.java b/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/saml/impl/ExecutableQueryBuilder.java
index 9be2efd0d..b702bd865 100644
--- a/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/saml/impl/ExecutableQueryBuilder.java
+++ b/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/saml/impl/ExecutableQueryBuilder.java
@@ -334,6 +334,8 @@ public class ExecutableQueryBuilder extends AbstractInitializableComponent
checkComponentActive();
+ log.trace("Saw dependency attributes: {}", dependencyAttributes.keySet());
+
final String authorityEntityID = resolveAttributeAuthorityEntityID(resolutionContext, dependencyAttributes);
final AttributeAuthorityDescriptor authorityRoleDescriptor = resolveAuthorityRoleDescriptor(authorityEntityID);
final String authorityEndpoint = resolveAuthorityEndpoint(authorityEntityID, authorityRoleDescriptor);
diff --git a/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/saml/impl/SAMLDataConnector.java b/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/saml/impl/SAMLDataConnector.java
index cae1753c5..dded0425e 100644
--- a/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/saml/impl/SAMLDataConnector.java
+++ b/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/saml/impl/SAMLDataConnector.java
@@ -192,6 +192,9 @@ public class SAMLDataConnector extends AbstractSearchDataConnector<ExecutableQue
if (getSubjectMatchProcessor() == null) {
throw new ComponentInitializationException("SubjectMatchProcessor was null");
}
+
+ log.trace("Attribute dependencies: {}", getAttributeDependencies());
+ log.trace("Data Connector dependencies: {}", getDataConnectorDependencies());
}
/** {@inheritDoc} */
diff --git a/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/saml/impl/SimpleAggregationSAMLDataConnector.java b/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/saml/impl/SimpleAggregationSAMLDataConnector.java
index 587fad3ad..8ae00ed62 100644
--- a/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/saml/impl/SimpleAggregationSAMLDataConnector.java
+++ b/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/saml/impl/SimpleAggregationSAMLDataConnector.java
@@ -118,6 +118,9 @@ public class SimpleAggregationSAMLDataConnector extends AbstractDataConnector {
if (getEntityIDSources().isEmpty()) {
throw new ComponentInitializationException("EntityID sources list was empty");
}
+
+ log.trace("Attribute dependencies: {}", getAttributeDependencies());
+ log.trace("Data Connector dependencies: {}", getDataConnectorDependencies());
}
/** {@inheritDoc} */
diff --git a/shib-attribute-resolver-spring/src/main/java/net/shibboleth/idp/attribute/resolver/spring/dc/saml/impl/AbstractSAMLDataConnectorParser.java b/shib-attribute-resolver-spring/src/main/java/net/shibboleth/idp/attribute/resolver/spring/dc/saml/impl/AbstractSAMLDataConnectorParser.java
index e3b51b972..b65750737 100644
--- a/shib-attribute-resolver-spring/src/main/java/net/shibboleth/idp/attribute/resolver/spring/dc/saml/impl/AbstractSAMLDataConnectorParser.java
+++ b/shib-attribute-resolver-spring/src/main/java/net/shibboleth/idp/attribute/resolver/spring/dc/saml/impl/AbstractSAMLDataConnectorParser.java
@@ -47,9 +47,12 @@ import net.shibboleth.idp.attribute.resolver.dc.saml.util.impl.SubjectMatchProce
import net.shibboleth.idp.attribute.resolver.spring.dc.AbstractDataConnectorParser;
import net.shibboleth.idp.attribute.resolver.spring.dc.impl.CacheConfigParser;
import net.shibboleth.idp.attribute.resolver.spring.impl.AttributeResolverNamespaceHandler;
+import net.shibboleth.idp.attribute.resolver.spring.impl.InputAttributeDefinitionParser;
+import net.shibboleth.idp.attribute.resolver.spring.impl.InputDataConnectorParser;
import net.shibboleth.shared.logic.Constraint;
import net.shibboleth.shared.primitive.LoggerFactory;
import net.shibboleth.shared.primitive.StringSupport;
+import net.shibboleth.shared.spring.util.SpringSupport;
import net.shibboleth.shared.xml.ElementSupport;
/**
@@ -197,6 +200,15 @@ public abstract class AbstractSAMLDataConnectorParser extends AbstractDataConnec
samlBuilder.addPropertyValue("subjectMatch", false);
}
+ final List<Element> attributeDependencyElements =
+ ElementSupport.getChildElements(config, InputAttributeDefinitionParser.ELEMENT_NAME);
+ final List<Element> dataConnectorDependencyElements =
+ ElementSupport.getChildElements(config, InputDataConnectorParser.ELEMENT_NAME);
+ samlBuilder.addPropertyValue("attributeDependencies",
+ SpringSupport.parseCustomElements(attributeDependencyElements, parserContext, samlBuilder));
+ samlBuilder.addPropertyValue("dataConnectorDependencies",
+ SpringSupport.parseCustomElements(dataConnectorDependencyElements, parserContext, samlBuilder));
+
samlBuilder.setInitMethodName("initialize");
samlBuilder.setDestroyMethodName("destroy");
diff --git a/shib-attribute-resolver-spring/src/test/java/net/shibboleth/idp/attribute/resolver/spring/dc/saml/impl/SimpleAggregationSAMLDataConnectorParserTest.java b/shib-attribute-resolver-spring/src/test/java/net/shibboleth/idp/attribute/resolver/spring/dc/saml/impl/SimpleAggregationSAMLDataConnectorParserTest.java
index 5ef3df08f..eead3f941 100644
--- a/shib-attribute-resolver-spring/src/test/java/net/shibboleth/idp/attribute/resolver/spring/dc/saml/impl/SimpleAggregationSAMLDataConnectorParserTest.java
+++ b/shib-attribute-resolver-spring/src/test/java/net/shibboleth/idp/attribute/resolver/spring/dc/saml/impl/SimpleAggregationSAMLDataConnectorParserTest.java
@@ -77,6 +77,9 @@ public class SimpleAggregationSAMLDataConnectorParserTest extends XMLObjectBaseT
getDataConnector(propSource,
"net/shibboleth/idp/attribute/resolver/spring/dc/saml/resolver/saml-attribute-resolver-v2.xml");
assertNotNull(connector);
+
+ Assert.assertEquals(connector.getAttributeDependencies().size(), 1);
+ Assert.assertEquals(connector.getDataConnectorDependencies().size(), 1);
final List<AttributeAuthorityEntityIDSource> sources = connector.getEntityIDSources();
Assert.assertNotNull(sources);
@@ -114,6 +117,9 @@ public class SimpleAggregationSAMLDataConnectorParserTest extends XMLObjectBaseT
Assert.assertTrue(queryConnector.isSubjectMatch());
Assert.assertNotNull(queryConnector.getSubjectMatchProcessor());
Assert.assertNotNull(queryConnector.getValidator());
+
+ Assert.assertEquals(queryConnector.getAttributeDependencies().size(), 1);
+ Assert.assertEquals(queryConnector.getDataConnectorDependencies().size(), 1);
final ExecutableSearchBuilder<ExecutableQuery> queryBuilder = queryConnector.getExecutableSearchBuilder();
Assert.assertNotNull(queryBuilder);
diff --git a/shib-attribute-resolver-spring/src/test/resources/net/shibboleth/idp/attribute/resolver/spring/dc/saml/resolver/saml-attribute-resolver-v2.xml b/shib-attribute-resolver-spring/src/test/resources/net/shibboleth/idp/attribute/resolver/spring/dc/saml/resolver/saml-attribute-resolver-v2.xml
index 1ba635383..3a30c2764 100644
--- a/shib-attribute-resolver-spring/src/test/resources/net/shibboleth/idp/attribute/resolver/spring/dc/saml/resolver/saml-attribute-resolver-v2.xml
+++ b/shib-attribute-resolver-spring/src/test/resources/net/shibboleth/idp/attribute/resolver/spring/dc/saml/resolver/saml-attribute-resolver-v2.xml
@@ -2,6 +2,19 @@
<AttributeResolver
xmlns="urn:mace:shibboleth:2.0:resolver" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="urn:mace:shibboleth:2.0:resolver http://shibboleth.net/schema/idp/shibboleth-attribute-resolver.xsd">
+
+ <DataConnector id="staticAttributes" xsi:type="Static" exportAttributes="schacHomeOrganization">
+ <Attribute id="schacHomeOrganization">
+ <Value>example.org</Value>
+ </Attribute>
+ <Attribute id="affiliation">
+ <Value>member</Value>
+ </Attribute>
+ </DataConnector>
+
+ <AttributeDefinition id="eduPersonScopedAffiliation" xsi:type="Scoped" scope="example.org">
+ <InputDataConnector ref="staticAttributes" attributeNames="affiliation" />
+ </AttributeDefinition>
<DataConnector id="mySAML" xsi:type="SimpleAggregationSAML"
subjectMatch="true"
@@ -10,6 +23,9 @@
subjectDefaultNameIDFormat="urn:oasis:names:tc:SAML:2.0:nameid-format:persistent"
>
+ <InputAttributeDefinition ref="eduPersonScopedAffiliation" />
+ <InputDataConnector ref="staticAttributes" attributeNames="schacHomeOrganization" />
+
<ResultCache expireAfterAccess="PT10S" maximumCachedElements="25"/>
<RequestedAttributes xmlns:saml2="urn:oasis:names:tc:SAML:2.0:assertion">
--
To stop receiving notification emails like this one, please contact
the administrator of this repository.
More information about the commits
mailing list