Configurare Shibboleth2-idP per dialogare con SiRAC-SSO
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