L'application serveur du projet EsupNfcTag est nommé EsupNfcTagServer, elle est développée en Spring (ROO) et tourne sur Tomcat.
JDK 8
Maven (dernière version 3.2.x)
Shibboleth
Apache + mod_shib
Postgresql (8 ou 9) : le mieux étant de l'installer via le système de paquets.
Tomcat 8
L'authentification repose sur Shibboleth. Apache doit être configuré pour faire du mod_shib.
Une fois le SP Shibboleth et Apache configurés usuellement (voyez les documentations RENATER pour ce faire), 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> |
pg_hba.conf : ajout de
host all all 127.0.0.1/32 password |
redémarrage de postgresql
psql
create database esupnfctag; create USER esupnfctag with password 'esup'; grant ALL ON DATABASE esupnfctag to esupnfctag; |
git clone https://github.com/EsupPortail/esup-nfc-tag-server.git |
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 :
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 :
CsnAuthConfig : implémentation de la lecture csn
DesfireAuthConfig : implémentation de la récupération d'un identifiant issu de la lecture d'un fichier chiffré Mifare Desfire AES
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 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 :
TagIdCheckRestWs : recupération des identifants via webservices REST
TagIdCheckSql : recupération des identifants via une base de données
TagIdCheckLdap : recupération des identifants via un annuaire LDAP
AppliExtApi correspond à l'application cible finale du badgeage :
Implémentations actuellement disponibles :
AppliExtDummy : permet de tester l'application, elle renvoit un lieu (Dummy Location)
AppliExtRestWs : s'appuie sur des webservices REST pour fournir les lieux et generer les badgeages
Les services
utilisables avec la carte peuvent être configurés dans le fichier
src/main/resources/META-INF/spring/applicationContext-custom.xml
.
AppliExt
<bean id="carteCultureExtApi" class="org.esupportail.nfctag.service.api.impl.AppliExtRestWs"> <property name="isTagableUrl" value="https://carte-culture.univ-rouen.fr/nfc-ws/isTagable"/> <property name="validateTagUrl" value="https://carte-culture.univ-rouen.fr/nfc-ws/validateTag"/> <property name="locationsUrl" value="https://carte-culture.univ-rouen.fr/nfc-ws/getLocations"/> <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> |
isTagable :
adresse
du webservice permettant de contrôler si un badge est valide
validateTagUrl :
adresse du webservice permettant de confirmer un badgeage
locationsUrl :
adresse du webservice retournant la liste des « lieux » disponible
pour l'utilisateur courant (utilisateur du lecteur de carte)
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> |
tagIdCheckUrl :
adresse du webservice permettant de retrouver une personne en
fonction de sont idantifiant de carte (csn ou idp2s)
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="desfireAuthConfigComue" class="org.esupportail.nfctag.service.api.impl.DesfireAuthConfig"> <property name="desfireKeyNumber" value="01"/> <property name="desfireAppId" value="A123F1"/> <property name="readFileCommand" value="90BD0000070000000016000000"/> <property name="desfireKey" value="/var/local/key"/> <property name="description" value="Authentification DESFIRE COMUE"/> </bean> |
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
logback
src/main/resources
.xml
modifier
le fichier pour paramétrer l'adresse mail d'envoi et le chemin du
fichier de log
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.
mvn clean package
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)
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 »