Erasmus Plus e ESI
Nell'ambito della European Student Card Initiative la Commisione Europea ha stabilito un percorso di digitalizzazione di tutti i servizi legati al programma Erasmus+ quali Online Learning Agreement (OLA), Erasmus+ mobile application, ecc. Una parte fondamentale della digitalizzazione riguarda l'autenticazione degli studenti, per la quale è stata scelta eduGAIN, cosicché gli studenti possano accedere con le proprie credenziali istituzionali e che i servizi ricevano fin da subito tutte le informazioni necessarie ad identificare correttamente gli utenti.
Indice
MyAcademicID proxy
L'accesso ai servizi Erasmus+ avviene mediante un proxy realizzato nell'ambito del progetto MyAcademicID e gestito da GEANT. Questo vuol dire che tutti i servizi legati ad Erasmus+ hanno un unico Service Provider con il seguente entityID:
https://proxy.prod.erasmus.eduteams.org/metadata/backend.xml
Il Service Provider è pubblicato in IDEM tramite eduGAIN, quindi se state già consumando i metadata edugain2idem
(vedi Metadata) non dovrete fare alcuna ulteriore azione per accedere tramite il vostro Identity Provider. In caso contrario, in primo luogo dovete contattare il Servizio IDEM GARR AAI per richiedere l'esportazione del vostro Identity Provider in eduGAIN, poi dovrete configurare i metadata di eduGAIN distributi dal Servizio (vedi Metadata).
Attributi
Gli attributi richiesti per accedere ai servizi Erasmus+ sono i seguenti.
Attributo | Descrizione | Esempio |
---|---|---|
eduPersonPrincipalName | Identificativo globalmente univoco e persistente. | username@foo.bar
|
eduPersonTargetedID | Identificativo univoco, opaco, mirato (diverso per ogni Service Provider) e persistente. | https://idp.foo.bar/idp/shibboleth!https://sp.example.com/shibboleth!a6c2c4d4-08b9-4ca7-8ff9-43d83e6e1d35
|
displayName | Nome completo. Rilasciare se non si rilascia già cn, o givenName+sn. | |
cn | Nome completo. Rilasciare se non si rilascia già displayName o givenName+sn. | Mario Rossi
|
givenName | Nome. Rilasciare se non si rilascia già displayName o cn. | Mario
|
sn | Cognome. Rilasciare se non si rilascia già displayName o cn. | Rossi
|
eduPersonAffiliation | Macro ruolo all'interno della propria organizzazione. | [member, student]
|
eduPersonScopedAffiliation | Macro ruolo all'interno della propria organizzazione con l'aggiunta del dominio. | [member@foo.bar, student@foo.bar]
|
schacPersonalUniqueCode | Codice univoco personale assegnato dalla propria organizzazione (URN). E' utilizzato per codificare e trasmettere lo European Student Identifier. | urn:schac:personalUniqueCode:int:esi:foo.bar:17585515
|
schacHomeOrganization | Dominio della propria organizzazione. | foo.bar
|
schacHomeOrganizationType | Tipo di organizzazione (URN) | urn:schac:homeOrganizationType:eu:higherEducationalInstitution
|
European Student Identifier
Lo European Student Identifier (ESI) è un identificatore globalmente univoco, persistente, non mirato (rimane lo stesso per tutti i Service Provider). Viene codificato e trasmesso tramite l'attributo schacPersonalUniqueCode
. Lo ESI supporta due modalità principali di codifica:
- per nazione: nel caso sia disponibile un codice studentesco nazionale
- per istituto: unica forma ammessa nel caso dell'Italia
Lo ESI si compone di tre parti:
- namespace URN invariabile:
urn:schac:personalUniqueCode:int:esi:
- dominio dell'organizzazione:
foo.bar
- codice identificativo dello studente (ad es. la matricola):
17585515
Lo ESI completo risultante: urn:schac:personalUniqueCode:int:esi:foo.bar:17585515
Le specifiche complete dello ESI sono disponibili sul wiki di GEANT:
https://wiki.geant.org/display/SM/European+Student+Identifier
Configurazione Identity Provider
Per rilasciare lo ESI tramite un Identity Provider (IdP) si possono usare due strategie principali: valorizzare l'attributo schacPersonalUniqueCode
completo di namespace URN e dominio direttamente nella propria Directory o esportare il solo codice identificativo dello studente e valorizzare schacPersonalUniqueCode
tramite l'IdP. La seconda strategia è più flessibile e raccomandata dal Servizio IDEM GARR AAI. Di seguito vi proponiamo degli esempi di configurazione basati su Shibboleth Identity Provider v4.x.
Configurazione dello ESI
Per creare e rilasciare lo ESI verso MyAcademicID è necessario:
- Aggiungere l'attributo
schacPersonalUniqueCode
ad Attribute Registry del proprio Identity Provider v4.x - Definire il suo comportamento nel conf/attribute-resolver.xml
- Definire le regole di rilascio nel conf/attribute-filter.xml
Attribute Registry
Creare il file conf/attributes/custom/schacPersonalUniqueCode.properties come segue per la codifica/decodifica dell'attributo schacPersonalUniqueCode
:
# schacPersonalUniqueCode
id=schacPersonalUniqueCode
transcoder=SAML2StringTranscoder
displayName.en=ESI
displayName.it=ESI
description.en=European Student Identifier
description.it=European Student Identifier
saml2.name=urn:oid:1.3.6.1.4.1.25178.1.2.14
saml1.encodeType=false
Attribute Resolver
Modo #1 - schacPersonalUniqueCode valorizzato attraverso template
Questa modalità è consigliata dal Servizio IDEM GARR AAI agli istituti che non hanno mai fatto uso di schacPersonalUniqueCode verso le risorse federate.
In questa modalità è necessario esportare l'attributo contenente il codice identificativo dello studente verso l'IdP. Ammesso che il codice sia contenuto in un attributo denominato matricolaStudente
, quest'ultimo andrà aggiunto a quelli elencati nel parametro exportAttributes
nel DataConnector definito in attribute-resolver.xml, o nel parametro idp.attribute.resolver.LDAP.exportAttributes
dentro conf/ldap.properties se utilizzato come indicato nelle guide di IDEM.
Per usare l'attributo per costruire il valore dell'ESI in schacPersonalUniqueCode
aggiungere la seguente definizione dell'attributo nel file conf/attribute-resolver.xml:
<AttributeDefinition id="schacPersonalUniqueCode" xsi:type="Template">
<InputDataConnector ref="myLDAP" attributeNames="matricolaStudente"/>
<Template>urn:schac:personalUniqueCode:int:esi:foo.bar:${matricolaStudente}</Template>
</AttributeDefinition>
NOTA BENE: Assicurarsi di modificare "foo.bar" con il proprio dominio istituzionale.
Modo #2 - schacPersonalUniqueCode valorizzato all'interno della directory istituzionale
Questa modalità è utilizzabile dagli istituti che hanno accesso in modifica alla Directory collegata all'IdP istituzionale.
In questo caso l'ESI verrà inserito direttamente nell'attributo schacPersonalUniqueCode
contenuto nella Directory. Per esportarlo aggiungere a 'conf/attribute-resolver.xml l'attributo schacPersonalUniqueCode
a quelli elencati nel parametro exportAttributes
nel DataConnector definito in attribute-resolver.xml, o nel parametro idp.attribute.resolver.LDAP.exportAttributes
dentro conf/ldap.properties se utilizzato come indicato nelle guide di IDEM.
Modo #3 - schacPersonalUniqueCode contenuto all'interno della directory istituzionale, ma è impossibile modificarla
Questa modalità è utilizzabile dagli istituti che gestiscono già l'attributo schacPersonalUniqueCode per l'accesso ad altre risorse federate e che non possono modificare la Directory collegata all'IdP istituzionale.
In questa modalità è necessario esportare l'attributo contenente il codice identificativo dello studente verso l'IdP. Ammesso che il codice sia contenuto in un attributo denominato matricolaStudente
, quest'ultimo andrà aggiunto a quelli elencati nel parametro exportAttributes
nel DataConnector definito in attribute-resolver.xml, o nel parametro idp.attribute.resolver.LDAP.exportAttributes
dentro conf/ldap.properties se utilizzato come indicato nelle guide di IDEM.
Per usare l'attributo per costruire il valore dell'ESI in schacPersonalUniqueCode
, mantenendo però i valori già esistenti, aggiungere la seguente definizione dell'attributo nel file conf/attribute-resolver.xml:
<AttributeDefinition xsi:type="ScriptedAttribute" id="schacPersonalUniqueCode">
<InputDataConnector ref="myLDAP" attributeNames="matricolaStudente schacPersonalUniqueCode"/>
<Script>
<![CDATA[
logger = Java.type("org.slf4j.LoggerFactory").getLogger("net.shibboleth.idp.attribute.resolver.esiBuilder");
logger.info('Add ESI to the user');
schacPersonalUniqueCode.addValue('urn:schac:personalUniqueCode:int:esi:foo.bar:' + matricolaStudente.getValues().get(0));
]]>
</Script>
</AttributeDefinition>
NOTA BENE: Assicurarsi di modificare "foo.bar" con il proprio dominio istituzionale.
Attribute Filter
Il Service Provider (SP) dei servizi Erasmus+ implementa il GEANT Data Protection Code of Conduct e la relativa entity category, per cui per rilasciare tutti gli attributi richiesti è sufficiente supportare il rilascio dinamico basato su CoCo lato IdP, come indicato nel filtro idem-attribute-filter-v4-ec.xml.
Nel caso in cui l'attributo schacPersonalUniqueCode
sia già utilizzato per altri servizi, è consigliabile limitare i valori rilasciati al SP di Erasmus+ al solo ESI con la regola che segue:
<!-- Release attributes to MyAcademicID IAM Service -->
<AttributeFilterPolicy id="MyAcademicID-IAM-Service">
<PolicyRequirementRule xsi:type="Requester" value="https://proxy.prod.erasmus.eduteams.org/metadata/backend.xml"/>
<AttributeRule attributeID="schacPersonalUniqueCode">
<DenyValueRule xsi:type="NOT">
<Rule xsi:type="ValueRegex" regex="^urn:schac:personalUniqueCode:int:esi:.*$"/>
</DenyValueRule>
</AttributeRule>
</AttributeFilterPolicy>
La regola sopra indicata è già contenuta nel filtro idem-filter-v4-full.xml che, se utilizzato, non comporta alcuna modifica alla configurazione per il rilascio degli attributi dell'IdP.