@ -30,11 +30,13 @@ import org.opensaml.core.xml.XMLObjectBuilder;
@@ -30,11 +30,13 @@ import org.opensaml.core.xml.XMLObjectBuilder;
import org.opensaml.core.xml.config.XMLObjectProviderRegistrySupport ;
import org.opensaml.saml.common.xml.SAMLConstants ;
import org.opensaml.saml.saml2.metadata.AssertionConsumerService ;
import org.opensaml.saml.saml2.metadata.EntitiesDescriptor ;
import org.opensaml.saml.saml2.metadata.EntityDescriptor ;
import org.opensaml.saml.saml2.metadata.KeyDescriptor ;
import org.opensaml.saml.saml2.metadata.NameIDFormat ;
import org.opensaml.saml.saml2.metadata.SPSSODescriptor ;
import org.opensaml.saml.saml2.metadata.SingleLogoutService ;
import org.opensaml.saml.saml2.metadata.impl.EntitiesDescriptorMarshaller ;
import org.opensaml.saml.saml2.metadata.impl.EntityDescriptorMarshaller ;
import org.opensaml.security.credential.UsageType ;
import org.opensaml.xmlsec.signature.KeyInfo ;
@ -65,6 +67,8 @@ public final class OpenSamlMetadataResolver implements Saml2MetadataResolver {
@@ -65,6 +67,8 @@ public final class OpenSamlMetadataResolver implements Saml2MetadataResolver {
private final EntityDescriptorMarshaller entityDescriptorMarshaller ;
private final EntitiesDescriptorMarshaller entitiesDescriptorMarshaller ;
private Consumer < EntityDescriptorParameters > entityDescriptorCustomizer = ( parameters ) - > {
} ;
@ -72,17 +76,38 @@ public final class OpenSamlMetadataResolver implements Saml2MetadataResolver {
@@ -72,17 +76,38 @@ public final class OpenSamlMetadataResolver implements Saml2MetadataResolver {
this . entityDescriptorMarshaller = ( EntityDescriptorMarshaller ) XMLObjectProviderRegistrySupport
. getMarshallerFactory ( ) . getMarshaller ( EntityDescriptor . DEFAULT_ELEMENT_NAME ) ;
Assert . notNull ( this . entityDescriptorMarshaller , "entityDescriptorMarshaller cannot be null" ) ;
this . entitiesDescriptorMarshaller = ( EntitiesDescriptorMarshaller ) XMLObjectProviderRegistrySupport
. getMarshallerFactory ( ) . getMarshaller ( EntitiesDescriptor . DEFAULT_ELEMENT_NAME ) ;
Assert . notNull ( this . entitiesDescriptorMarshaller , "entitiesDescriptorMarshaller cannot be null" ) ;
}
@Override
public String resolve ( RelyingPartyRegistration relyingPartyRegistration ) {
EntityDescriptor entityDescriptor = entityDescriptor ( relyingPartyRegistration ) ;
return serialize ( entityDescriptor ) ;
}
public String resolve ( Iterable < RelyingPartyRegistration > relyingPartyRegistrations ) {
Collection < EntityDescriptor > entityDescriptors = new ArrayList < > ( ) ;
for ( RelyingPartyRegistration registration : relyingPartyRegistrations ) {
EntityDescriptor entityDescriptor = entityDescriptor ( registration ) ;
entityDescriptors . add ( entityDescriptor ) ;
}
if ( entityDescriptors . size ( ) = = 1 ) {
return serialize ( entityDescriptors . iterator ( ) . next ( ) ) ;
}
EntitiesDescriptor entities = build ( EntitiesDescriptor . DEFAULT_ELEMENT_NAME ) ;
entities . getEntityDescriptors ( ) . addAll ( entityDescriptors ) ;
return serialize ( entities ) ;
}
private EntityDescriptor entityDescriptor ( RelyingPartyRegistration registration ) {
EntityDescriptor entityDescriptor = build ( EntityDescriptor . DEFAULT_ELEMENT_NAME ) ;
entityDescriptor . setEntityID ( relyingPartyRegistration . getEntityId ( ) ) ;
SPSSODescriptor spSsoDescriptor = buildSpSsoDescriptor ( relyingPartyRegistration ) ;
entityDescriptor . setEntityID ( registration . getEntityId ( ) ) ;
SPSSODescriptor spSsoDescriptor = buildSpSsoDescriptor ( registration ) ;
entityDescriptor . getRoleDescriptors ( SPSSODescriptor . DEFAULT_ELEMENT_NAME ) . add ( spSsoDescriptor ) ;
this . entityDescriptorCustomizer
. accept ( new EntityDescriptorParameters ( entityDescriptor , relyingPartyRegistration ) ) ;
return serialize ( entityDescriptor ) ;
this . entityDescriptorCustomizer . accept ( new EntityDescriptorParameters ( entityDescriptor , registration ) ) ;
return entityDescriptor ;
}
/ * *
@ -184,6 +209,16 @@ public final class OpenSamlMetadataResolver implements Saml2MetadataResolver {
@@ -184,6 +209,16 @@ public final class OpenSamlMetadataResolver implements Saml2MetadataResolver {
}
}
private String serialize ( EntitiesDescriptor entities ) {
try {
Element element = this . entitiesDescriptorMarshaller . marshall ( entities ) ;
return SerializeSupport . prettyPrintXML ( element ) ;
}
catch ( Exception ex ) {
throw new Saml2Exception ( ex ) ;
}
}
/ * *
* A tuple containing an OpenSAML { @link EntityDescriptor } and its associated
* { @link RelyingPartyRegistration }