Configurare Shibboleth2-idP per dialogare con SiRAC-SSO

Da sia.
Vai alla navigazione Vai alla ricerca

Panoramica

SiRAC-SSO è il sistema di autenticazione del Comune di Reggio nell'Emilia (e altri enti pubblici) che funziona come interfaccia tra diversi IdP, ad esempio quello comunale e quello shibboleth delle utenze dell'università. SiRAC-SSO segue SAML1.1 ed è sviluppato da cefriel.


Configurazione di Shibboleth2-IdP

Si ipotizza che SiRAC-SSO abbia come entityId: https://ssotest.comune.re.it

relying-party.xml

Aggiungere un relying-party con i seguenti override:

<RelyingParty id="https://ssotest.comune.re.it"
              provider="https://omissis.unimore.it/idp/shibboleth"
               defaultAuthenticationMethod="urn:oasis:names:tc:SAML:1.0:am:password"   
              defaultSigningCredentialRef="IdPCredential">
              <ProfileConfiguration xsi:type="saml:ShibbolethSSOProfile" 
                       includeAttributeStatement="true"
                       signResponses="always"
                       signAssertions="always" />
    </RelyingParty>

Gli override sono:

  • includeAttributeStatement="true" per passare un'unica asserzione di authn e attributi;
  • signAssertions="always" per firmare l'asserzione oltre allo statement;
  • signResponses="always" per firmare anche lo statement (obbligatorio con idp2.2.0 o superiori);
  • defaultAuthenticationMethod="urn:oasis:names:tc:SAML:1.0:am:password" per usare come modalità di autenticazione il formato SAML1.1

metadata

<EntityDescriptor entityID="https://ssotest.comune.re.it" xmlns="urn:oasis:names:tc:SAML:2.0:metadata"> 
   <SPSSODescriptor protocolSupportEnumeration="urn:oasis:names:tc:SAML:1.1:protocol">
       <NameIDFormat>urn:mace:shibboleth:1.0:nameIdentifier</NameIDFormat>
       <AssertionConsumerService Binding="urn:oasis:names:tc:SAML:1.0:profiles:browser-post"  \  
Location="https://ssotest.comune.re.it/sirac-sso/AssertionConsumerService" index="1">
       </AssertionConsumerService> 
    </SPSSODescriptor> 
</EntityDescriptor>

handler.xml

Aggiungere lo AuthenticationMethod in formato SAML1.1 al proprio LoginHandler

<LoginHandler xsi:type="UsernamePassword" 
                 jaasConfigurationLocation="file:///opt/shibboleth-idp/conf/login.config">       
       <AuthenticationMethod>
        urn:oasis:names:tc:SAML:2.0:ac:classes:PasswordProtectedTransport
       </AuthenticationMethod>
       <AuthenticationMethod>urn:oasis:names:tc:SAML:1.0:am:password</AuthenticationMethod>
   </LoginHandler>

attribute-resolver.xml

Per passare gli attributi nome e cognome con la sintassi che si aspetta SiRAC-SSO:

<resolver:AttributeDefinition id="nome" xsi:type="Simple" xmlns="urn:mace:shibboleth:2.0:resolver:ad"
       sourceAttributeID="givenName">
       <resolver:Dependency ref="ldap1" />
       <resolver:AttributeEncoder xsi:type="SAML1String" xmlns="urn:mace:shibboleth:2.0:attribute:encoder"
           name="nome" />
   </resolver:AttributeDefinition>
<resolver:AttributeDefinition id="cognome" xsi:type="Simple" xmlns="urn:mace:shibboleth:2.0:resolver:ad"
       sourceAttributeID="sn">
       <resolver:Dependency ref="ldap1" />
       <resolver:AttributeEncoder xsi:type="SAML1String" xmlns="urn:mace:shibboleth:2.0:attribute:encoder"
           name="cognome" />
   </resolver:AttributeDefinition>

Per creare un name-identifier da usare nell'oggetto dell'asserzione che valga il codice fiscale dell'utente:

<resolver:AttributeDefinition id="cf" xsi:type="Simple" xmlns="urn:mace:shibboleth:2.0:resolver:ad"
       sourceAttributeID="unimorecodicefiscale">
       <resolver:Dependency ref="ldap1" />
       <resolver:AttributeEncoder xsi:type="SAML1StringNameIdentifier" xmlns="urn:mace:shibboleth:2.0:attribute:encoder"
           nameFormat="urn:mace:shibboleth:1.0:nameIdentifier" />
       <resolver:AttributeEncoder xsi:type="SAML2StringNameID" xmlns="urn:mace:shibboleth:2.0:attribute:encoder"
           nameFormat="urn:oasis:names:tc:SAML:2.0:nameid-format:transient" />
   </resolver:AttributeDefinition>

attribute-filter.xml

Per rilasciare gli attributi precedenti:

<AttributeFilterPolicy id="https://ssotest.comune.re.it">
   <PolicyRequirementRule xsi:type="basic:AttributeRequesterString" value="https://ssotest.comune.re.it" />
   <AttributeRule attributeID="cf">
       <PermitValueRule xsi:type="basic:ANY" />
   </AttributeRule>
   <AttributeRule attributeID="nome">
       <PermitValueRule xsi:type="basic:ANY" />
   </AttributeRule>
   <AttributeRule attributeID="cognome">
       <PermitValueRule xsi:type="basic:ANY" />
   </AttributeRule>
</AttributeFilterPolicy>

Importante! Quando si fa il test con aacli.sh ricordarsi lo switch --saml1