applicationContext-desfire.xml
Dans le ficher applicationContext-desfire.xml on trouve la structure et les données qui seront écrites sur la carte lors de l’encodage.
Un premier objet DesfireTag décrit la carte en elle même :
- p:formatBeforeWrite précise si la carte doit être formatée avant l'encodage
- p:keyStart spécifie la PICC Master Key qui sera utilisée pour s'authentifier sur la carte avant l'encodage
- p:keyTypeStart est le type de la clé (DES ou AES) pré-positionnée sur la carte avant l'encodage
- p:keyFinish spécifie la PICC Master Key qui sera positionnée sur la carte après l'encodage (si pas de changement de clé, il faut saisir la même valeur de pour p:keyStart)
- p:keyTypeFinish est le type de la clé (DES ou AES) positionnée sur la carte après encodage (si pas de changement de clé, il faut saisir la même valeur de pour p:keyTypeStart)
- p:keyVersionFinish est le numéro de version attribué à la nouvelle clé en fin d'encodage (n'a aucune incidence sur le fonctionnement de la carte mais peut permettre de s'assurer que l'encodage est bien complet)
Une clé de type p:keyStart="0000000000000000" p:keyTypeStart="DES" est une clé PICC par défaut pour une carte Desfire. Avec cette clé la carte reste formatable facilement à l'aide d'un smartphone par exemple.
<bean id="desfireComueTagEsupSgc" class="org.esupportail.nfctag.beans.DesfireTag" p:formatBeforeWrite="false" p:keyStart="0000000000000000" p:keyTypeStart="DES" p:keyFinish="0000000000000000" p:keyTypeFinish="DES" p:keyVersionFinish="00"> <property name="applications"> <util:list> <bean class="org.esupportail.nfctag.beans.DesfireApplication" p:desfireAppId="AB0123" p:amks="0B" p:nok="84"> <property name="files"> <util:list> <bean class="org.esupportail.nfctag.beans.DesfireFile" p:fileNumber="00" p:communicationSettings="03" p:accessRights="1223" p:fileSize="1F0000" p:tagWriteApi-ref="idp2sTagWriteEsupSgc"/> </util:list> </property> <property name="keys"> <util:list> <bean class="org.esupportail.nfctag.beans.DesfireKey" p:keyNo="00" p:keyVer="01" p:key="00000000000000000000000000000000"/> <bean class="org.esupportail.nfctag.beans.DesfireKey" p:keyNo="01" p:keyVer="01" p:key="00000000000000000000000000000000"/> <bean class="org.esupportail.nfctag.beans.DesfireKey" p:keyNo="02" p:keyVer="01" p:key="00000000000000000000000000000000"/> <bean class="org.esupportail.nfctag.beans.DesfireKey" p:keyNo="03" p:keyVer="01" p:key="00000000000000000000000000000000"/> </util:list> </property> </bean> </util:list> </property> </bean>
L'objet DesfireTag peut contenir une liste de DesfireApplication.
Voici la structure d’une application DesfireApplication:
<bean class="org.esupportail.nfctag.beans.DesfireApplication" p:desfireAppId="AB0123" p:amks="0B" p:nok="84"> <property name="files"> <util:list> <bean class="org.esupportail.nfctag.beans.DesfireFile" p:fileNumber="00" p:communicationSettings="03" p:accessRights="1223" p:fileSize="1F0000" p:tagWriteApi-ref="idp2sTagWriteEsupSgc"/> </util:list> </property> <property name="keys"> <util:list> <bean class="org.esupportail.nfctag.beans.DesfireKey" p:keyNo="00" p:keyVer="01" p:key="00000000000000000000000000000000"/> <bean class="org.esupportail.nfctag.beans.DesfireKey" p:keyNo="01" p:keyVer="01" p:key="00000000000000000000000000000000"/> <bean class="org.esupportail.nfctag.beans.DesfireKey" p:keyNo="02" p:keyVer="01" p:key="00000000000000000000000000000000"/> <bean class="org.esupportail.nfctag.beans.DesfireKey" p:keyNo="03" p:keyVer="01" p:key="00000000000000000000000000000000"/> </util:list> </property> </bean>
Dans cet exemple, l'application a pour identifiant p:desfireAppId="AB0123", elle est configurée avec p:nok à 84 qui indique 4 clés AES
L'application peut contenir des fichiers de type DesfireFile et des clés DesfireKey
Dans notre cas l'application possède un fichier numéro "00" (p:fileNumber="00")
Le ficher est paramétré avec les autorisations suivantes p:accessRights="1223" :
clé 1 pour la lecture
clé 2 pour l’écriture
clé 2 pour lecture et écriture
clé 3 pour le changement d’autorisations
La clé 0 est la Master Key de l'application, dans l’exemple toutes les clés sont à zéro et insérées en tant que version "01" (p:keyVer="01")
Il n'est plus nécessaire de préciser le type de clé au niveau des beans DesfireKey, celui-ci est déterminé par la valeur de l'attribut p:nok de la DesfireApplication :
- le premier chiffre représente de type (0 : DES, 8 : AES)
- le deuxième est le nombre de clés
L'attribut p:type doit etre supprimé au niveau des clés
La valeur à écrire dans le fichier est définie par p:tagWriteApi-ref
Il faut configurer l’url qui permet de récupérer cette valeur (ici c'est esup-sgc qui fournit la donnée) :
<bean id="idp2sTagWriteEsupSgc" class="org.esupportail.nfctag.service.api.impl.TagWriteRestWs"> <property name="idFromEppnInitUrl" value="https://esup-sgc-test.univ-rouen.fr/wsrest/nfc/idFromEppnInit"/> </bean>
applicationContext-custom.xml
Ajout d'une configuration NFC pour une authentification en DESFIRE (NfcAuthConfig)
<bean id="desfireAuthSiServices" class="org.esupportail.nfctag.service.api.impl.DesfireReadConfig"> <property name="desfireKeyNumber" value="01"/> <property name="desfireFileNumber" value="00"/> <property name="desfireAppId" value="AB0123"/> <property name="desfireAppName" value="si-service"/> <property name="desfireFileOffset" value="000000"/> <property name="desfireKey" value="00000000000000000000000000000000"/> <property name="description" value="Authentification SI Service COMUE"/> </bean>
L'attribut desfireFileSize n'est plus nécessaire, il doit etre supprimé.
Ajout d'une application d' affichage du verso de la carte (AppliExtApi)
<bean id="esupSgcVersoExtApi" class="org.esupportail.nfctag.service.api.impl.AppliExtRestWs"> <property name="isTagableUrl" value="https://esup-sgc-test.univ-ville.fr/wsrest/nfc/isTagable"/> <property name="validateTagUrl" value="https://esup-sgc-test.univ-ville.fr/wsrest/nfc/validateTag"/> <property name="getLocationsUrl" value="https://esup-sgc-test.univ-ville.fr/wsrest/nfc/locationsVerso"/> <property name="displayUrl" value="https://esup-sgc-test.univ-ville.fr/wsrest/nfc/verso"/> <property name="description" value="Web Service Verso"/> </bean>
La nouvelle propriété displayUrl permet de définir l'emplacement des données qui seront affichées suite à la validation d'un tag. Esup-sgc peut retourner le verso en fonction du csn via cette adresse https://esup-sgc-test.univ-ville.fr/wsrest/nfc/verso.