SpidL2
SPId: panoramica
Sull'IdP l'autenticazione SPId è offerta in parallelo alla solita autenticazione con credenziali unimore. Se un utente SPID è anche un utente unimore, le identità vengono riconciliate (fuse).
Se ad un certo codice fiscale SPId corrispondono più identità unimore (da esempio: dipendente ed ex-studente) apparirà un menu drop-down di scelta della username.
Se ad un certo codice fiscale SPId non corrisponde nessuna identità unimore, shibboleth-sp non riceve nessun attributo Unimore (riceverà quelli SPId).
SPId: autorizzare solo gli utenti unimore
Cioé evitare l'accesso agli utenti SPID senza una identità unimore.
Controllo accesso sul virtual host apache2:
<Location /secure>
AuthType shibboleth
ShibRequestSetting requireSession 1
# verificare se ha senso ammettere gli accounts
# piuttosto che ammettere exalumni e registered valutare se accettare tutti tout-court
Require shib-attr ou dipendenti esterni studenti alum #exalumni registered accounts
</Location>
Contrllo accesso nativo XML:
(dentro una sezione AccessControl)
(gli utenti solo SPID non hanno ou)
<OR>
<comment>
Permettere l'accesso a registrati ed exalumni
vanifica il senso dell'autorizzazione
<Rule require="ou">registered</Rule>
<Rule require="ou">exalumni</Rule>
ha senso autorizzare gli account?
<Rule require="ou">accounts</Rule>
</comment>
<Rule require="ou">accounts</Rule>)
<Rule require="ou">dipendenti</Rule>
<Rule require="ou">esterni</Rule>
<Rule require="ou">studenti</Rule>
<Rule require="ou">alum</Rule>
</OR>
Siccome gli utenti solo SPID giungono allo shibboleth-sp con attributi minimi, non hanno neppure lo ou.
Gestire gli utenti solo SPId
Casomai servisse accettare utenti SPID senza una identità unimore, bisogna modificare l'attribute-map.xml:
<Attribute name="urn:mace:unimore.it:attribute-def:unimore_taxpayer_number" id="unimoreTaxPayerNumber"/> <Attribute name="urn:mace:unimore.it:attribute-def:unimore_spid_email" id="unimoreSpidEmail"/> <Attribute name="urn:mace:unimore.it:attribute-def:unimore_spid_gn" id="unimoreSpidGn"/> <Attribute name="urn:mace:unimore.it:attribute-def:unimore_spid_sn" id="unimoreSpidSn"/> <Attribute name="urn:mace:unimore.it:attribute-def:unimore_spid_code" id="unimoreSpidCode"/> <Attribute name="urn:mace:unimore.it:attribute-def:unimore_spid_date_of_birth" id="unimoreSpidDateOfBirth"/>
Gli unici attributi presenti saranno il codice fiscale, la mail personale, la data di nascita, il codice univoco dell'IdP SPID (lo spidCode) ed il nome e cognome.
Richiedere solo SPId (oppure solo utenti col TOTP) necessariamente
SPId
Aggiungere nella <Location> del virtual host:
<Location /secure>
AuthType shibboleth
ShibRequestSetting requireSession 1
ShibRequestSetting forceAuthn 1
ShibRequestSetting authnContextClassRef https://www.spid.gov.it/SpidL2
ShibRequestSetting authnContextComparison minimum
Require shib-attr ou dipendenti esterni studenti
#Require valid-user
</Location>
Se non è possibile usare apache2 bisogna ricorrre ad un ApplicationOverride:
<ApplicationOverride id="spid_only">
<Sessions lifetime="28800" timeout="3600"
handlerSSL="true"
cookieProps="; secure; HttpOnly"/>
<SessionInitiator type="SAML2">
<samlp:AuthnRequest xmlns:samlp="urn:oasis:names:tc:SAML:2.0:protocol" ID="foo" Version="2.0" IssueInstant="2012-01-01T00:00:00Z">
<samlp:RequestedAuthnContext Comparison="minimum" xmlns:saml="urn:oasis:names:tc:SAML:2.0:assertion">
<saml:AuthnContextClassRef>https://www.spid.gov.it/SpidL2</saml:AuthnContextClassRef>
</samlp:RequestedAuthnContext>
</samlp:AuthnRequest>
</SessionInitiator>
</Session>
</ApplicationOverride>
(non testato: meglio prima provarlo; manca il forceAuthn="true" senza il quale ci sono errori di sessione per gli utenti che hanno già una sessione con lo IdP ma non in SPID).
L'effetto di richiedere l'autenticazione con https://www.spid.gov.it/SpidL2 è che lo IdP non mostra i campi username e password, ma solo il bottone 'login con SPID'.
Ad accesso effettuato, gli attributi dello shibboleth-sp (che sono sinonimi):
Shib-Authentication-Method Shib-AuthnContext-Class
devono avere come valore: https://www.spid.gov.it/SpidL2
TOTP
Per richiedere ad esempio MFA o SPId, dovrebbe bastare mettere nella location protetta:
<RequireAll>
require authnContextClassRef https://www.spid.gov.it/SpidL2 urn:oasis:names:tc:SAML:2.0:ac:classes:TimeSyncToken
Require shib-attr affiliation member@unimore.it
</RequireAll>
Siccome il TOTP subentra dopo la fare username e password, l'autorizzazione è un processo a posteriori che verifica se negli attributi:
Shib-Authentication-Method Shib-AuthnContext-Class
è presente: urn:oasis:names:tc:SAML:2.0:ac:classes:TimeSyncToken