Esup-nfc-tag-server permet d'utiliser comme lecteur/borne de badge NFC :

Ce projet vise à permettre et faciliter le développement de services autour des cartes NFC dites "multiservice"

Il propose une architecture standardisée et connectée autour du badgeage d'une carte présentant un identifiant (CSN ou identifiant codé en Desfire AES) correspondant à une carte valide d'un individu connu du système d'information.

L'application Esup-nfc-tag-server est développée en Spring (ROO) et tourne sur Tomcat.

Installation

Pré-requis

Configuration Apache Shibboleth

L'authentification repose sur Shibboleth. Apache doit être configuré pour faire du mod_shib.

Une fois le SP Shibboleth et Apache configurés usuellement (voir : https://services.renater.fr/federation/docs/installation/sp), il faut sécuriser /manager et /nfc en ajoutant ceci à la conf apache (à adapter cependant en fonction des versions d'Apache et mod_shib) :

<Location /manager>
AuthType shibboleth
ShibRequestSetting requireSession 1
require shib-session
ShibUseHeaders On
</Location>
<Location /nfc>
AuthType shibboleth
ShibRequestSetting requireSession 1
require shib-session
ShibUseHeaders On
</Location>

 

Configuration PostgreSQL

host all all 127.0.0.1/32 password
create database esupnfctag;
create USER esupnfctag with password 'esup';
grant ALL ON DATABASE esupnfctag to esupnfctag;

 

Paramétrage mémoire JVM :

Pensez à paramétrer les espaces mémoire JVM :

export JAVA_OPTS="-Xms1024m -Xmx1024m -XX:MaxPermSize=256m"

Pour maven :

export MAVEN_OPTS="-Xms1024m -Xmx1024m -XX:MaxPermSize=256m"

Sources : https://github.com/EsupPortail/esup-nfc-tag-server

git clone https://github.com/EsupPortail/esup-nfc-tag-server

Configurations

Au niveau de l'application, les fichiers de configuration à modifier sont les suivants : 

3 services distincts correspondent à l'implémentation DES API définis dans org.esupportail.nfctag.service.api :

Versioning de la configuration

D'une manière générale il est conseillé de faite des commits GIT locaux pour sauvegarder vos modification de configuration.

Par exemple, lors que vous avez fini la configuration du fichier "src/main/resources/META-INF/spring/applicationContext-custom.xml" vous pouvez executer les commandes suivantes depuis la racine de vos sources (/opt/esup-sgc):

git add src/main/resources/META-INF/spring/applicationContext-custom.xml
git commit -m "config prod univ-ville-fr"

La modification du fichier applicationContext-custom.xml sera versionnée ce qui permet de concerver les traces de toutes les modification (procédure à faire à chaque modification). De plus lors d'une mise à jour d'ESUP-SGC (git pull) la configuration ne sera pas écrasée.

NfcAuthConfig

NfcAuthConfig correspond à la façon dont la carte est authentifiée/identifiée.

Les 2 implémentations proposées actuellement sont l'authentification par lecture du simple CSN (Card Serial Number) d'une part, et l'authentification par Mifare Desfire AES d'autre part. Ces implémentations sont très liées à EsupNfcTagDroid (ie l'APK, la partie mobile) aussi une nouvelle implémentation d'un NfcAuthConfig nécessitera(it) sans doute la modification de EsupNfcTagDroid.

Implémentations actuellement disponibles :

Les 2 autres services TagIdCheckApi et AppliExtApi sont indépendants quant à eux de EsupNfcTagDroid et de nouvelles implémentations de ces services peuvent être envisagées, même si le recours à leurs implémentations sous forme de Web Service REST doit être naturellement privilégiées.

TagIdCheckApi

TagIdCheckApi correspond à la façon dont on récupère l'identification d'un individu depuis un identifiant de carte (identifiant CSN ou issu de la lecture d'un fichier Desfire). Cette identification de l'individu consiste en son eppn, nom, prénom.

Implémentations actuellement disponibles :

AppliExtApi

AppliExtApi correspond à l'application cible finale du badgeage :

Implémentations actuellement disponibles :

 

Les services utilisables avec la carte peuvent être configurés dans le fichier src/main/resources/META-INF/spring/applicationContext-custom.xml.

Exemples

AppliExt

<bean id="esupSgcExtApi" class="org.esupportail.nfctag.service.api.impl.AppliExtRestWs">
	<property name="isTagableUrl" value="https://esup-sgc.univ-ville.fr/wsrest/nfc/isTagable"/>
	<property name="validateTagUrl" value="https://esup-sgc.univ-ville.fr/wsrest/nfc/validateTag"/>
	<property name="locationsUrl" value="https://esup-sgc.univ-ville.fr/wsrest/nfc/getLocations"/>
<!--   	<property name="displayUrl" value="https://esup-sgc.univ-ville.fr/wsrest/nfc/verso"/> -->
	<property name="description" value="Web Service Carte Culture"/>
	<property name="backgroundColor" value="rgb(121, 119, 116)"/>
	<property name="header" value="https://carte-culture.univ-rouen.fr/resources/images/logo.jpg"/>
</bean>

TagIdCheck

<bean id="tagIdCheckApiCarteCulture" class="org.esupportail.nfctag.service.api.impl.TagIdCheckRestWs">
	<property name="tagIdCheckUrl" value="https://carte-culture.univ-rouen.fr/nfc-ws/tagIdCheck"/>
	<property name="description" value="via Carte Culture"/>
</bean>
 
Pour tester l'application rapidement, ajouter ce tagIdCheck (qui retournera toujours un résultat):
 
<bean id="tagIdCheckApiDummy" class="org.esupportail.nfctag.service.api.impl.TagIdCheckDummyWs">
	<property name="description" value="TagIdCheckDummy"/>
</bean>

 

AuthConfig

Pour une configuration d'authentification de carte par CSN :

<bean id="csnAuthConfig" class="org.esupportail.nfctag.service.api.impl.CsnAuthConfig">
<property name="description" value="Authentification CSN"/>
</bean>

Pour une configuration d'authentification de carte par Mifare Desfire AES :

<bean id="desfireAuthConfig" class="org.esupportail.nfctag.service.api.impl.DesfireAuthConfig">
	<property name="desfireKeyNumber" value="01"/>
	<property name="desfireAppId" value="A123F1"/>
	<property name="desfireAppName" value="test-app"/>
	<property name="readFileCommand" value="90BD0000070000000016000000"/>
	<property name="desfireKey" value="/var/local/key"/>
	<property name="description" value="Authentification DESFIRE"/>
</bean>

Base de données

src/main/resources/META-INF/persistence.xml

afin que les tables soient préalablement créées, notamment la table big_file sur lequel on souhaite mettre le trigger lo_manage, vous devez démarrer l'application une fois ; en n'oubliant pas ensuite, pour ne pas écraser la base au redémarrage, de modifier src/main/resources/META-INF/persistence.xml : create-> update - cf ci-dessous.

src/main/resources/META-INF/spring/database.properties

database.driverClassName=org.postgresql.Driver

database.url=jdbc\:postgresql\://localhost\:5432/esupnfctag

database.username=esupnfctag

database.password=esup

Logs

logbacksrc/main/resources.xml

modifier le fichier pour paramétrer l'adresse mail d'envoi et le chemin du fichier de log

Obtention du war pour déploiement sur tomcat ou autre :

mvn clean package

Lancement de la mise à jour de la base de données

mvn exec:java -Dexec.args="dbupgrade"

 

Droits utilisateur

Le rôle ROLE_ADMIN est necessaire pour gérer l'application

Il est à paramétrer dans application-context-security.xml. L'authentification/identification se fait en shibboleth, le credentialsRequestHeader est à paramétrer en fonction de vos attributs shibboleth; ainsi que le authUserDetailsService.

Paramétrage via l'IHM

A cette adresse :
https://esupnfctag.univ-ville.fr/manager/applications
Ajouter une application. Pour un test, choisir Authentification CSN, Dummy !, le tagIdCheck qui convient (voir implémentation du tagIdCheck)

Test de l'application sans EsupNfcTagDroid et sans EsupNfcTagArduino

L'idée est de tester le process de badgeage en simulant les appels HTTP du badgeur EsupNfcTagDroid et/ou EsupNfcTagArduino

En utilisant cette adresse :

https://esupnfctag.univ-ville.fr/nfc-index?apkVersion=1-2099-01-01-00-00-00-dev&imei=123456

L'application va vérifier les différent service autorisés pour la personne connectée et créer une entrée dans Device (dans notre cas Dummy location) puis rediriger vers le « live » de ce lieu.

http://esupnfctag.univ-ville.fr/live?numeroId=6847041179388220887

Il est alors possible de simuler un badgeage csn via une commande curl ex :

 

curl -X POST -H "Content-type:application/json" -d '{"csn":"045371d2fd3a80","numeroId":"6847041179388220887"}' http://esupnfctag.univ-ville.fr/csn-ws

Une fenetre de validation doit apparaître sur le « live »