ESUPSGC

Arborescence des pages

Comparaison des versions

Légende

  • Ces lignes ont été ajoutées. Ce mot a été ajouté.
  • Ces lignes ont été supprimées. Ce mot a été supprimé.
  • La mise en forme a été modifiée.

...

Ces pages sont avant tout techniques ; pour une bonne compréhension du projet, merci de vous référer au site officiel : https://europeanstudentcard.eu

Une présentation (slides) datant de juin 2021 est également disponible en complément de cette page wiki : ESUP-SGC, son intégration dans le projet Carte Étudiante Européenne [CNCEU - Juin 2021]

Notez cependant que lors de la migration du Router ESC en novembre 2024, un certain nombre de fonctionnalités ont été abandonnées, et les ambitions du projet, notamment en matière de fonctionnalités via le NFC (sans contact), ont ainsi été revues à la baisse.
Vous pourrez retrouver des éléments autour de ces fonctionnalité dans une page archivée d'esup-sgc : Carte étudiante européenne - Archivé

Le projet de carte étudiante européenne comporte plusieurs volets techniques que nous allons aborder un par un se résume ainsi actuellement à 2 volets: 

Sommaire

Impression et utilisation du QR-Code 

Présentation

Pour fonctionner, ESUP-SGC imprime puis encode la carte en 2 étapes successives et distinctes.

...

Le QR-Code européen consiste en une url dans laquelle on retrouve  l'url d'accès au serveur ESC http://esc.gg/ suivi d'un numéro de carte 'ESCN' qui est un identifiant codé en hexadécimal, formaté pour une meilleur lecture avec des - supplémentaires.

Exemple : 50228de1 d88b02c1-8944894e-1038-a3d5a711-001999465982

Cet ESCN est construit pour être unique, ESUP-SGC utilise directement la librairie escn-generator disponible depuis les repositories centraux de maven (le code source y est également donné) : https://search.maven.org/artifact/eu.europeanstudentcard/escn-generator

Cet identifiant de carte est construit via l'heure système suffixé d'un code qui correspond au pic de l'établissement lui-même préfixé par un numéro supplémentaire.

Dans l'exemple de  50228de1de  d88b02c1-8944894e-1038-a3d5a711-001999465982 on  on retrouve ainsi le code pic 999465982 de l'Université de Rouen Normandie.

On note que la "version" hexadecimal correspond à 50228de189441038a3d5001999465982à d88b02c1894e1038a711001999465982, soit une chaîne hexadecimale de 16 octets.

...

ESUP-SGC préfère en effet l'usage du sans-contact au scan de QR-Code.

Mise en oeuvre

La configuration de la génération de ce QR-Code se fait dans src/main/resources/META-INF/spring/applicationContext-crous.xml

Bloc de code
languagexml
themeRDark
<bean id="escUidFactoryService" class="org.esupportail.sgc.services.esc.EscUidFactoryService">
<property name="pic" value="le-code-pic-de-letablissement"/>
<property name="prefixe" value="1 " /> <!-- si plusieurs sgc, l'établissement doit les distinguer par un préfixe différent -->
<property name="qrCodeUrlPrefixe" value="http://esc.gg/" /> <!-- pour l'instance ESC de pre-production on mettra http://pp.esc.gg/ -->
</bean>

On active l'utilisation du QR6Code QR-Code européen (en lieu de l'usage de l'EPPN en tant que QR6CodeQR-Code) en allant dans l'interface web, "Admin" >  "Configurations" > "QRCODE_ESC_ENABLED" que l'on doit mettre à true.

Enregistrement d'une carte dans ESC-R

Présentation

Pour que la carte puisse être reconnue par un service d'un établissement européen partenaire, il faut que celui-ci puisse la récupérer techniquement depuis ESCR qui est la plateforme d'échange (le hub ou Router) des identifiants de cartes/étudiants du projet ESC.

...

L'identifiant de carte est l'ESCN.L

Confère cette documentation Renater, l'identifiant de l'utilisateur ESI (European Student Identifier) pour les établissements français est construit ainsi : code pays - code pic - code ine.: urn:schac:personalUniqueCode:int:esi:fr:<INE>

ESUP-SGC reconstruit simplement cet identifiant depuis l'INE : la La connaissance de l'INE est donc obligatoire ici.

Mise en oeuvre

La configuration d'esup-sgc en tant que client ESCR pour enregistrer les cartes se fait dans src/main/resources/META-INF/spring/applicationContext-crous.xml

Bloc de code
languagexml
themeRDark
	<bean id="europeanStudentCardService" class="org.esupportail.sgc.services.esc.ApiEscrService">
		<property name="enable" value="true"/>
		<property name="webUrl" value="httphttps://apirouter.europeanstudentcard.eu/v1esc-rest/api/v2" />
		<property name="key" value="clef-a-recuperer-auprès-d-escr" />
		<property name="restTemplate" ref="restTemplate" />
		<property name="countryCode" value="FR"/>
		<property name="picInstitutionCode" value="le-code-pic-de-letablissement"/>
		<!--  
		Type of cards. Possibles values are :
		1 - passive card, with no electronic -> PASSIVE 
		2 - Smartcard without European common data zone -> SMART_NO_CDZ
		3 - Smartcard with European common data zone -> SMART_CDZ
		4 - Smartcard on which application may be installed by service providers
		 -> SMART_MAY_SP
        -->
 		<property name="cardType" value="2SMART_NO_CDZ"/>
	</bean>

Pour proposer à certains "userType" (populations) d'utilisateurs d'activer leur carte dans ESCR, il faut renseigner le paramètre DISPLAY_FORM_EUROPEAN_CARD dans l'interface web, "Admin" >  "Configurations".

Le paramètre ENABLE_EUROPEAN_CARD permet quant à lui de sélectionner les userType pour lesquels on active par défaut la carte dans ESCR. 

...

Générer un token d'

...

Présentation

Pour qu'une carte extérieure puisse être reconnue par ESUP-SGC, il faut déclarer ESUP-SGC dans ESCR.

Ainsi ESUP-SGC sera présenté aux étudiants adhérents au dispositif ESC, et ils pourront accepter que leur carte et informations personnelles soient transmises à votre ESUP-SGC.

Mise en oeuvre

...

API

...

  • Sélectionner "Organisations" sur le menu de gauche
  • Dans le tableau qui s'affiche, cliquez sur l'icône "oeil"
  • Dans le tableau API tokens, cliquer sur "+ ADD", nommez-le ("esup-sgc" par exemple) et mettez une date lointaine, sauf si vous souhaitez le changer régulièrement
  • Le token s'affiche une seule fois, reportez le dans la configuration du bean europeanStudentCardService (key) 

Nouveau logo ESC

En 2024, l'hologramme ESC a été abandonné au profit d'un nouveau logo à imprimer au niveau du QR-Code.
Voir : https://erasmus-plus.ec.europa.eu/news/new-european-student-card-logo-a-fresh-look-for-improved-access-to-student-services

ESUP-SGC embarque les différentes déclinaisons de ce logo - cf https://github.com/EsupPortail/esup-sgc/tree/master/src/main/webapp/images/esc-logo

Pour les intégrer dans vos templates, vous pouvez modifier la CSS de votr thème de carte (Admin < Thèmes de cartes) en gardant à l'esprit que lors d'une édition en 1 temps,

  1. le "#right img" (ainsi que #right::after et #right::before depuis esup-sgc 2.6.1) est caché pour le panneau noir 
  2. alors que le "#left p et #left img"  (ainsi que #left::after et #left::before depuis esup-sgc 2.6.1) sont cachés pour les panneaux couleurs.

Aussi, imprimer le logo en noir et blanc par exemple est relativement simple car on peut s'appuyer sur l'image du qr-code qui est également imprimé en noir et blanc : 

Bloc de code
languagecss
#specimenCarte #qrcode {
    position: absolute;   
    padding-top: 0.4cm;
    background-repeat: no-repeat;
    background-position-y: 0cm;
    background-size: 1.8cm auto;
    background-image: url(/resources/images/esc-logo/esc-logo-vertical-bw.svg);
    bottom: 0.1cm;
    width: 1.8cm;
    right: 0.1cm;
} 


Imprimer le logo en couleur est peu plus compliqué car il faut s'appuyer sur le bloc #right, qui n'est pas caché (édition 1 temps) par ./src/main/webapp/WEB-INF/views/manager/print-card-b64.jspx lors de l'usage du panneau couleur
On peut écrire : 

Bloc de code
languagecss
#specimenCarte #right::after {
    background-image: url("/resources/images/esc-logo/esc-logo-vertical-color.svg");
    background-size: 1.8cm;
    background-repeat: no-repeat;
    display: inline-block;
    width: 1.8cm; 
    height: 0.5cm;
   content: '';
   top: 3cm;
   left: 6.65cm;
  position: absolute;
}

À noter que suivant vos configurations, la génération des BMP pour l'édition en 1 passe demandera de positionner plutôt l'url absolue (plutôt que relative) du logo ESC SVG dans ces CSS

Au niveau d'esup-sgc, vous pouvez mettre dans security.properties

Bloc de code
accessRestrictionWSescr=hasHeader('escr-key','123456789ABCDEF')

Notez qu'à la fois le nom de l'entête http (escr-key ici) et sa valeur (123456789ABCDEF) sont libres. Il faudra simplement reporter les mêmes dans l'interface ESCR.

En supposant que votre ESUP-SGC est accessible en https://esup-sgc.univ-ville.fr, vous devrez ainsi remplir les champs demandés lors de l'enregistrement de votre service ainsi : 

  • API root url : https://esup-sgc.univ-ville.fr/wsescr
  • Api Key Header name : escr-key
  • Api Key : 123456789ABCDEF
  • Activation Endpoint : /activate
  • Deactivation Endpoint : /deactivate
  • Card added Endpoint : /addcard
  • Card deleted Endpoint : /deletecard
  • Student updated Endpoint : /updatestudent
  • Student deleted Endpoint : /deletestudent

Ecriture et lecture électronique de la DEUINFO (implémenté, en cours de validation)

Info

Cette possibilité est implémentée côté ESUP-SGC et proposée dès maintenant dans la branche master sur github côté ESUP-SGC et ESUP-NFC-TAG, cependant elle n'est pas encore validée et opérationnelle encore sur l'ESCR de production.

Présentation

La DEUINFO correspond à une application Desfire dans laquelle on indique l'identifiant de carte ESCN (présenté déjà au travers du QR-Code) de manière électronique.

La DEUINFO propose cet identifiant en clair, et donc lisible très simplement. Dans le même temps, la DEUINFO propose des mécanismes de chiffrement permettant de garantir de manière satisfaisante le caractère officiel de la carte.

L'application est ainsi construite suivant ce schéma : 

Image Removed

Mise en oeuvre

La mise en oeuvre de l'encodage de l'application DEUINFO se fait principalement côté esup-nfc-tag-server. De même esup-nfc-tag-server permet également de lire et vérifier l'ensemble des mécanismes d'une DEUINFO.

Une partie correspondant aux mécanismes de signatures et certificats se fait cependant côté ESUP-SGC.

Au préalable, vous aurez suivi la procédure ESC permettant de générer vos clefs et certificats d'établissements propres à la DEUINFO. Vous aurez également récupéré la clef de base ESC (clef partagée entre établissement mais qui doit restée secrète) permettant la diversification des clefs selon ESCN et UID.

ESUP-SGC

Dans applicationContext-crous.xml, modifiez le bean escDeuInfoService pour le décommenter au besoin et faire pointer la clef et certificat vers la clef et certificat récupéré depuis la procédure ESC : 

Bloc de code
	<bean id="escDeuInfoService" class="org.esupportail.sgc.services.esc.EscDeuInfoService">
		<property name="deuInfoPrivateKey" value="classpath:META-INF/security/esc/ca.intermediate.key.der"/>
		<property name="deuInfoPublicKey" value="classpath:META-INF/security/esc/ca.intermediate.cert.der" />
	</bean>

La récupération éventuelle des certificats des établissements partenaires lors de la lecture et validation de la DEUINFO d'une carte partenaire utilise l'API europeanStudentCardService déjà paramétré. Aussi rien d'autre n'est à paramétré côté ESUP-SGC

ESUP-NFC-TAG

Ecriture

Dans la structure de votre carte dans laquelle se trouve déjà par exemple votre applciation de contrôle d'accès, vous allez rajouter une nouvelle application ainsi :

Bloc de code
languagexml
 <!-- Application DEUINFO de la carte étudiante européenne 
		nok A3 : ISO enbaled, 3 AES keys
		amks OA :  configuration changeable, free directory list access without master key
-->
<bean class="org.esupportail.nfctag.beans.DesfireApplication" p:desfireAppId="F58840" p:amks="0B" p:nok="83">
	<property name="files">
		<util:list>
			<!-- ESCN File 
							communicationSettings 00 : communication plain text for clear access
							accessRights E000 : - read access clear 'E' 
	              								- write access '0' master key only
	              								- read/write access clear '0'
	             								- change acces rights '0' master key only
	              								- fileSize : 16bits -> 000010 -> 100000. 
			-->
			<bean class="org.esupportail.nfctag.beans.DesfireFile"
p:fileNumber="00" p:communicationSettings="00" p:accessRights="E000"
p:tagWriteApi-ref="escnDeuInfoTagWriteEsupSgc" />

			<!-- Signature (71 ou 72 octets) - taille variable  -->
			<bean class="org.esupportail.nfctag.beans.DesfireFile"
p:fileNumber="01" p:communicationSettings="00" p:accessRights="E000"
p:tagWriteApi-ref="signatureDeuInfoTagWriteEsupSgc" />
			<!-- Certificat - taille variable  -->
			<bean class="org.esupportail.nfctag.beans.DesfireFile"
p:fileNumber="02" p:communicationSettings="00" p:accessRights="E000"
p:tagWriteApi-ref="certDeuInfoTagWriteEsupSgc"/>
		</util:list>
	</property>
	<property name="keys">
		<util:list>
			<!-- master key of deuInfo application : private app master key of the university -->
			<bean class="org.esupportail.nfctag.beans.DesfireKey" 
p:keyNo="00" p:keyVer="00" p:key="00000000000000000000000000000000" />
			<!-- deuinfo master key diversified with ESCN -->
			<bean class="org.esupportail.nfctag.beans.DesfireKey" 
p:keyNo="01" p:keyVer="00" p:desfireKeyService-ref="escnDeuInfoDiversifiedKeyService" />
			<!-- deuinfo master key diversified with CSN -->
			<bean class="org.esupportail.nfctag.beans.DesfireKey" 
p:keyNo="02" p:keyVer="00" p:desfireKeyService-ref="csnDeuInfoDiversifiedKeyService" />
		</util:list>
	</property>
</bean>

...

Pour que cela fonctionne vous devez en plus également ajouté 5 beans supplémentaires référencés dans cette configuration : 

Bloc de code
languagexml
    <bean id="escnDeuInfoTagWriteEsupSgc" class="org.esupportail.nfctag.service.api.impl.TagWriteRestWs">
		<property name="idFromCsnUrlTemplate" value="https://esup-sgc.univ-ville.fr/wsrest/nfc/getEscDeuInfoEscn?csn={0}"/>
    </bean>
    
    <bean id="signatureDeuInfoTagWriteEsupSgc" class="org.esupportail.nfctag.service.api.impl.TagWriteRestWs">
		<property name="idFromCsnUrlTemplate" value="https://esup-sgc.univ-ville.fr/wsrest/nfc/getEscDeuInfoSignature?csn={0}"/>
    </bean>
    
    <bean id="certDeuInfoTagWriteEsupSgc" class="org.esupportail.nfctag.service.api.impl.TagWriteRestWs">
		<property name="idFromCsnUrlTemplate" value="https://esup-sgc.univ-ville.fr/wsrest/nfc/getEscDeuInfoCertificat?csn={0}"/>
    </bean>

    <bean id="csnDeuInfoDiversifiedKeyService" class="org.esupportail.nfctag.service.desfire.DesfireDiversificationService">
		<property name="baseKey" value="11111111111111111111111111111111"/>
    </bean>
    
    <bean id="escnDeuInfoDiversifiedKeyService" class="org.esupportail.nfctag.service.desfire.DesfireDiversificationService">
		<property name="baseKey" value="11111111111111111111111111111111"/>
		<property name="tagWriteApi">
			<bean class="org.esupportail.nfctag.service.api.impl.TagWriteRestWs">
				<property name="idFromCsnUrlTemplate" value="https://esup-sgc.univ-ville.fr/wsrest/nfc/getEscDeuInfoEscn?csn={0}"/>
		    </bean>
		</property>
    </bean>

Ici la clef 11111111111111111111111111111111 est donnée 2 fois de suite et elle doit correspondre à la clef de base de diversification fourni par ESC. Cette clef est partagée par tous les établissements, il est important de faire en sorte de ne pas la divulguer !

Délégation d'applications Mifare Desfire EV2 (en cours d'implémentation)

...

.