wish list: ability to define reusable blocs in SP configuration

Guillaume Rousse guillaume.rousse at renater.fr
Mon Aug 6 08:28:09 EDT 2018


Hello.

We are currently testing the latest 3.0 release of the SP. I was 
particulary interested by the change regarding related to reducing the 
needs of ApplicationOverride elements in configuration files. 
Unfortunatly, it doesn't fit our needs :(

We deploy SP on authenticating reverse proxies, meaning each SP manage a 
lot of different applications (approximatively 40 currently), each in a 
different virtual host. What makes those applications different is the 
exact set of trusted IdPs:
- french education-research federation only
- french education-research federation + a single non-federated IdP
- eduGAIN federation
- eduGAIN federation + a single non-federated IdP

For each of those set, we have to define a different list of metadata 
files, and a different discovery service URL. So, whatever set is 
defined at the default level, we have cumbersome (and redundant) 
additional declarations in individual <ApplicationOverride> elements, ie:

<ApplicationDefaults entityID="https://app1">
   <SSO
     discoveryProtocol="SAMLDS"
     discoveryURL="https://discovery1">SAML2</SSO>

   <MetadataProvider type="XML"
     url="https://metadata1.xml"
     backingFilePath="/var/cache/shibboleth/metadata1.xml">
     <MetadataFilter type="Signature" certificate="cert1.crt"/>
   </MetadataProvider>

   <ApplicationOverride id="app2" entityID="https://app2">
     # override needed because of another non-federated IdP
     <SSO
       discoveryProtocol="SAMLDS"
       discoveryURL="https://discovery2">SAML2</SSO>
     <MetadataProvider type="Chaining">
       <MetadataProvider type="XML"
         url="https://metadata1.xml"
         backingFilePath="/var/cache/shibboleth/metadata1.xml">
         <MetadataFilter type="Signature" certificate="cert1.crt"/>
       </MetadataProvider>
       <MetadataProvider type="XML"
         url="https://metadata2.xml"
         backingFilePath="/var/cache/shibboleth/metadata2.xml">
         <MetadataFilter type="Signature" certificate="cert2.crt"/>
       </MetadataProvider>
     </MetadataProvider>
  </ApplicationOverride>

   <ApplicationOverride id="app3" entityID="https://app3">
     # override needed because of another non-federated IdP
     <SSO
       discoveryProtocol="SAMLDS"
       discoveryURL="https://discovery2">SAML2</SSO>
     <MetadataProvider type="Chaining">
       <MetadataProvider type="XML"
         url="https://metadata1.xml"
         backingFilePath="/var/cache/shibboleth/metadata1.xml">
         <MetadataFilter type="Signature" certificate="cert1.crt"/>
       </MetadataProvider>
       <MetadataProvider type="XML"
         url="https://metadata2.xml"
         backingFilePath="/var/cache/shibboleth/metadata2.xml">
         <MetadataFilter type="Signature" certificate="cert2.crt"/>
       </MetadataProvider>
     </MetadataProvider>
  </ApplicationOverride>

</ApplicationDefaults>

I had a quick look also at ExternalApplicationOverrides element, in 
order to reuse the same external configuration fragment for multiple 
applications, but it doesn't seem to be the indended use case, as this 
element define a search path where the applications expect to find files 
dedicated to each applications.

What would really makes this configuration easier to maintain would be 
the ability to define reusable blocs of configuration settings, and then 
refer to them later in the configuration. For instance, with this 
ability restricted to metadata sets:

<MetadataSets>
   <MetadataSet id="md1">
     <MetadataProvider type="XML"
       url="https://metadata1.xml"
       backingFilePath="/var/cache/shibboleth/metadata1.xml">
       <MetadataFilter type="Signature" certificate="cert1.crt"/>
     </MetadataProvider>
   </MetadataSet>

   <MetadataSet id="md2">
     <MetadataProvider type="Chaining">
       <MetadataProvider type="XML"
         url="https://metadata1.xml"
         backingFilePath="/var/cache/shibboleth/metadata1.xml">
         <MetadataFilter type="Signature" certificate="cert1.crt"/>
       </MetadataProvider>
       <MetadataProvider type="XML"
         url="https://metadata2.xml"
         backingFilePath="/var/cache/shibboleth/metadata2.xml">
         <MetadataFilter type="Signature" certificate="cert2.crt"/>
       </MetadataProvider>
     </MetadataProvider>
   </MetadataSet>
</MetadataSets>

<ApplicationDefaults entityID="https://app1">
   <SSO discoveryProtocol="SAMLDS"
     discoveryURL="https://discovery1">SAML2</SSO>

   <MetadataSet ref="md1"/>

   <ApplicationOverride id="app2" entityID="https://app2">
     # override needed because of another non-federated IdP
     <SSO discoveryProtocol="SAMLDS"
       discoveryURL="https://discovery2">SAML2</SSO>
      <MetadataSet ref="md2"/>
  </ApplicationOverride>

   <ApplicationOverride id="app3" entityID="https://app3">
     # override needed because of another non-federated IdP
     <SSO discoveryProtocol="SAMLDS"
       discoveryURL="https://discovery2">SAML2</SSO>
    <MetadataSet ref="md2"/>
  </ApplicationOverride>

</ApplicationDefaults>

I'm ready to fill an formal enhancement request on Jira for this feature 
if it can be considered feasable and useful.

Regards.
-- 
Guillaume Rousse
Pôle SSI

Tel: +33 1 53 94 20 45
www.renater.fr

-------------- next part --------------
A non-text attachment was scrubbed...
Name: smime.p7s
Type: application/pkcs7-signature
Size: 3637 bytes
Desc: Signature cryptographique S/MIME
URL: <http://shibboleth.net/pipermail/users/attachments/20180806/924ffa6c/attachment.p7s>


More information about the users mailing list