...
La première partie du fichier comporte les « UserInfoService » ainsi que les « SpelUserInfoService » . Ces deux entités ont pour but de peupler les informations des demandeurs de carte à l’aide des différentes sources de données présentent dans le SI de l'établissement (ou dans les SI des établissements partneaires - cas d'une authentification shibboleth extérieure, ou encore de l'usage d'un 'meta-annuaire' multi-établissements).
Trois methodes Quatre méthodes sont implémentées dans le SGC SGC :
ShibUserInfoService (recupération des données via le context Shibboleth)
LdapUserInfoService
SqlUserInfoService
- RestUserInfoService
Les spelUserInfoService sont des règles qui s’appliquent ensuite pour calculer certains attributs de l’utilisateur.
...
On note que l'usage de shibboleth permet de récupérer des informations sur un individu extérieur au SI sans connexion directe d'Esup-SGC au SI de cet individu. Le fonctionnement de shibboleth fait cependant que ces informations ne pourront pas être mises à jour régulièrement sans connexion régulière de l'individu au SGC. Aussi la récupération des informations également depuis le LDAP au moins pour les utilisateurs internes au SI est à implémenter (en place ou même en plus de shibboleth).
Les requêtes se font par défaut en utilisant l'eppn (eduPersonPrincipalName) en clef ; depuis la version 3.2.0, il est possible également de faire une requête en utilisant un champ préalablement récupéré depuis une autre source.
On peut par exemple récupérer via ldap la majorité des champs en utilisant le searchFilter par défaut (eduPersonPrincipalName={eppn}), dont supannEtuId par exemple - puis utiliser ce supannEtuId dans un "userinfoservice" de type RestUserInfoService implémentant l'appel à l'API Pegase par exemple, comme illustré dans les commentaires du fichier applicationContext-services.xml
https://github.com/EsupPortail/esup-sgc/commit/383b95e3feb894814c46ddeedb5515d79f0b89b8
→ Merci de consulter https://github.com/EsupPortail/esup-sgc/blob/master/src/main/resources/META-INF/spring/applicationContext-services.xml qui donne quelques exemples des possibilités de récupération de champs utilisateur via ces différents "UserInfoService".
| Nom du champ esup-sgc | Usage | Obligatoire | Source à 'privilégier' / Format | ||||
|---|---|---|---|---|---|---|---|
| eppn | Identifiant métier : eduPersonPrincipalName | Oui | eduPersonPrincipalName, identifiant métier dans esup-sgc, permet par défaut de faire le lien -> shib, ldap et sql | ||||
| Nom du champ esup-sgc | Usage | Obligatoire | Source à 'privilégier' / Format | ||||
| eppn | Identifiant métier : eduPersonPrincipalName | Oui | eduPersonPrincipalName - obligatoire dans toutes les sources - car permet de faire le lien -> shib, ldap et sql | ||||
| Envoi d’email d’information lors de l’évolution de la carte ; ticket paybox, ... et aussi pour crous/izly → obligatoire | Oui | shib/ldap - champ mail | |||||
| eduPersonPrimaryAffiliation | Catégorisation population – moteur de recherche | Non | shib/ldap - champ eduPersonPrimaryAffiliation | ||||
| supannEtuId | moteur de recherche | Non | shib/ldap - champ supannEtuId | ||||
| supannEmpId | moteur de recherche | Non | shib/ldap - champ supannEmpId | ||||
| supannCodeINE | affichage / construction identifiant ESCR / identfiant crous/izly pour les étudiants → obligatoire dans CROUS/IZLY et ESCR | Oui | shib/ldap - champ supannCodeINE | ||||
| supannEntiteAffectationPrincipale | moteur de recherche | Non | shib/ldap - champ supannEntiteAffectationPrincipale | ||||
| firstname | Affichage / moteur de recherche | Oui | shib/ldap - champ givenname | ||||
| name | Affichage / moteur de recherche | Oui | shib/ldap - champ sn | ||||
| schacDateOfBirth | Date de naissance - obligatoire dans les contrôles d’accès.Envoi d’email d’information lors de l’évolution de la carte ; ticket paybox, ... et aussi pour crous/izly → obligatoire | Oui | shib/ldap - champ | schacDateOfBirthschacExpiryDate | Date de fin de droits – les cartes de l’individu sont marquées comme caduques cette date passée. Format UTC : yyyyMMddHHmmss'Z' Cette date est également envoyée aux services qui ont besoin d'une date de fin (expiration) telles que les contrôles d'accès, ESCR, le CROUS (dueDate). | Oui||
| eduPersonPrimaryAffiliation | Catégorisation population – moteur de recherche | Non | shib/ldap - champ | schacExpiryDateeduPersonPrimaryAffiliation | |||
| referenceStatut | Population crous (psg, etd, prs, hbg, fct, fpa, stg) - permet de calculer le tarif et société crous depuis le fichier ESIST.xml | Oui | sql | ||||
| indice | Indice du personnel - permet de calculer le tarif et société crous depuis le fichier ESIST.xml | Non | sql | ||||
| secondaryId | Identifiant secondaire quelconque – affichage / moteur de recherche / web service spécificité COMUE NU : doit correspondre au leocode | Non | ... | ||||
| institute | Établissement, affichage ... | Non | règle d'un spelUserInfoService : nom (libellé) de l'établissement | ||||
| supannEtuId | moteur de recherche | Non | shib/ldap - champ supannEtuId | ||||
| supannEmpId | moteur de recherche | Non | shib/ldap - champ supannEmpId | ||||
| supannCodeINE | affichage / construction identifiant ESCR / identfiant crous/izly pour les étudiants → obligatoire dans CROUS/IZLY et ESCR | Oui | shib/ldap - champ supannCodeINE | ||||
| supannEntiteAffectationPrincipale | moteur de recherche | Non | shib/ldap - champ supannEntiteAffectationPrincipale | ||||
| firstname | Affichage / moteur de recherche | supannEtablissement | Code RNE Établissement - permet de calculer le tarif et société crous depuis le fichier ESIST.xml Depuis la 1.1.1, ce code RNE ainsi récupéré est envoyé dans l'API CROUS en tant que rneOrgCode | Oui | shib/ldap - champ | supannEtablissement code UAI / RNE :givenname | |
| name | université de RouenaddressAffichage / moteur de recherche | Non | peut correspondre à supannEntiteAffectationPrincipale ou champs sql spécifique | externalAddress | Affichage / moteur de recherche | Non | |
| recto1 | Libellé sur recto | Non | ldap, sql, ou/et calculé via des règles d'un spelUserInfoService | ||||
| recto2 | Libellé sur recto | Non | ldap, sql, ou/et calculé via des règles d'un spelUserInfoService | ||||
| recto3 | Libellé sur recto | Non | ldap, sql, ou/et calculé via des règles d'un spelUserInfoService | ||||
| recto4 | Libellé sur recto | Non | ldap, sql, ou/et calculé via des règles d'un spelUserInfoService | ||||
| recto5 | Libellé sur recto | Non | ldap, sql, ou/et calculé via des règles d'un spelUserInfoService | ||||
| verso1 | Libellé sur verso (dématérialisé) | Non | ldap, sql, ou/et calculé via des règles d'un spelUserInfoService | ||||
| verso2 | Libellé sur verso (dématérialisé) | Non | ldap, sql, ou/et calculé via des règles d'un spelUserInfoService | ||||
| verso3 | Libellé sur verso (dématérialisé) | Non | ldap, sql, ou/et calculé via des règles d'un spelUserInfoService | ||||
| Oui | shib/ldap - champ sn | ||||||
| schacDateOfBirth | Date de naissance - obligatoire dans les contrôles d’accès. | Oui | shib/ldap - champ schacDateOfBirth | ||||
| schacExpiryDate | Date de fin de droits – les cartes de l’individu sont marquées comme caduques cette date passée. Format UTC : yyyyMMddHHmmss'Z' Cette date est également envoyée aux services qui ont besoin d'une date de fin (expiration) telles que les contrôles d'accès, ESCR, le CROUS (dueDate). | Oui | shib/ldap - champ schacExpiryDate | ||||
| referenceStatut | Population crous (psg, etd, prs, hbg, fct, fpa, stg) - permet de calculer le tarif et société crous depuis le fichier ESIST.xml | Oui | sql | ||||
| indice | Indice du personnel - permet de calculer le tarif et société crous depuis le fichier ESIST.xml | Non | sql | ||||
| secondaryId | Identifiant secondaire quelconque – affichage / moteur de recherche / web service spécificité COMUE NU : doit correspondre au leocode | Non | ... | ||||
| institute | Établissement, affichage ... | Non | règle d'un spelUserInfoService : nom (libellé) de l'établissement | ||||
| supannEtablissement | Code RNE Établissement - permet de calculer le tarif et société crous depuis le fichier ESIST.xml Depuis la 1.1.1, ce code RNE ainsi récupéré est envoyé dans l'API CROUS en tant que rneOrgCode | Oui | shib/ldap - champ supannEtablissement code UAI / RNE : | ||||
| address | Affichage / moteur de recherche | Non | peut correspondre à supannEntiteAffectationPrincipale ou champs sql spécifique | ||||
| externalAddress | Affichage / moteur de recherche | Non | |||||
| recto1 | Libellé sur recto | Non | ldap, sql, | verso4 | Libellé sur verso (dématérialisé) | Non | ldap, sql,ou/et calculé via des règles d'un spelUserInfoService |
| recto2 | Libellé sur | verso (dématérialisé)recto | Non | ldap, sql, ou/et calculé via des règles d'un spelUserInfoService | |||
| freeField1 | Champ libre - peut servir à la recherche/affichage | Non | libre | ||||
| freeField2 | Champ libre - peut servir à la recherche/affichage | Non | libre | ||||
| freeField3 | Champ libre - peut servir à la recherche/affichage | Non | libre | supannRefId donnant des numéros de cartes 'externes', cad non issus du SGC (et donc issus d'un autre SGC) Déprécié : merci d'utiliser csn4ExternalCard et control4ExternalCard | Non | shib/ldap - champ supannRefId - atend en dur | |
| recto3 | Libellé sur recto | Non | ldap, sql, ou/et calculé via des règles d'un spelUserInfoService | ||||
| recto4 | Libellé sur recto | Non | ldap, sql, ou/et calculé via des règles d'un spelUserInfoService | ||||
| recto5 | Libellé sur recto | Non | ldap, sql, ou/et calculé via des règles d'un spelUserInfoService | ||||
| verso1 | Libellé sur verso (dématérialisé) | Non | ldap, sql, ou/et calculé via des règles d'un spelUserInfoService | ||||
| verso2 | Libellé sur verso (dématérialisé) | Non | ldap, sql, ou/et calculé via des règles d'un spelUserInfoService | ||||
| verso3 | Libellé sur verso (dématérialisé) | Non | ldap, sql, ou/et calculé via des règles d'un spelUserInfoService | ||||
| verso4 | Libellé sur verso (dématérialisé) | Non | ldap, sql, ou/et calculé via des règles d'un spelUserInfoService | ||||
| verso5 | Libellé sur verso (dématérialisé) | Non | ldap, sql, ou/et calculé via des règles d'un spelUserInfoService | ||||
| freeField1 | Champ libre - peut servir à la recherche/affichage | Non | libre | ||||
| freeField2 | Champ libre - peut servir à la recherche/affichage | Non | libre | ||||
| freeField3 | Champ libre - peut servir à la recherche/affichage | Non | libre | ||||
supannRefId4ExternalCard | supannRefId donnant des numéros | ||||||
| csn4ExternalCard | csn des cartes 'externes', cad non issus du SGC (et donc issus d'un autre SGC) | Non | le-numero-csn (on pourra utiliser le champ supannRefId pour le faire transiter) | ||||
| access-control4ExternalCard | numéro de carte de contrôle d'accès des cartes 'externes', cad non issus du SGC (et donc issus d'un autre SGC) | Non | le-numero-access-control (on pourra utiliser le champ supannRefId pour le faire transiter) | ||||
| jpegPhoto4ExternalCard | jpegPhoto donnant la photo de cartes 'externes', cad non issus du SGC (et donc issus d'un autre SGC) Déprécié : merci d'utiliser csn4ExternalCard et control4ExternalCard | Non | shib/ldap - champ | jpegPhoto||||
| jpegPhoto | jpegPhoto donnant la photo par défaut pour un utilisateur : c'est cette photo qui est proposée par défaut lors de la première demande de carte ou via la demande de carte via l'API REST (sans spécifier une photo spécifique) | Non | shib/ldap - champ jpegPhoto sql : jpegPhoto correspondant à une photo jpeg exportée en base64 | ||||
| userType | affichage : onglet par userType | Oui | règle d'un spelUserInfoService Attention, le nombre maximal de caractères du userType est limité à 3 ; les libellés à donner dans les messages i18n sont libres quand à eux ; | ||||
| template | thème (template) de carte à utiliser | Oui | règle d'un spelUserInfoService - doit correspondre à une clef de template | ||||
| editable | true ou false selon que l'utilisateur est 'éditable ou non' | Non | remplace l'usage de ROLE_USER_NO_EDITABLE (qui en tant que 'groupe' doit forcément correspondre à un groupe/champ ldap) | ||||
| requestFree | true ou false selon que l'utilisateur doit payer le renouvellement de la carte | Non | remplace l'usage de ROLE_USER_RENEWAL_PAYED (qui en tant que 'groupe' doit forcément correspondre à un groupe/champ ldap) si utilisé, il vous faut supprimer la référence à ROLE_USER_RENEWAL_PAYED dans sgcMappingGroupesRoles (et inversement) | ||||
| blockUserMsg | Texte HTML affiché à l'utilisateur (vue utilisateur) en lieu et place du formulaire de demande de carte. Si vide (ou non spécifié dans la configuration), le formulaire de demande eest inchangé simplement. | Non | règle d'un spelUserInfoService - peut permettre de personnaliser le message disant à l'utilisateur qu'il ne peut pas demander de carte actuellement via eusp-sgc (car son inscription n'est pas en règle par exemple). | ||||
| synchronize | Champ permettant d'indiquer que l'utilisateur (et ses cartes) doit être synchronisé depuis les userInfoServices. | Non | règle d'un spelUserInfoService - dans la configuration donnée par défaut, on met synchronize à 'false' pour les utilisateurs n'ayant plus d'adresses mail de renseignées dans le Système d'Information (ldap/bd). | ||||
| academicLevel | Champ academicLevel permettant de transmettre le niveau d'étude de l'étudiant (en cours) à l'API ESCR (carte étudiante européenne). Ce niveau, si transmis, est notamment affiché derrière l'url correrspondant au qrcode de la carte étudiante européenne (page internet précisant si l'individu est effectivement étudiant ). | Non | Cf la doc de l'API ESCR : |
Note supplémentaire sur le editable (et requestFree qui se comporte de la même manière) : après avoir utilisé un temps le userInfo editable (ou requestFree) et que vous voulez finalement revenir à l'usage de ROLE_USER_NO_EDITABLE (ou ROLE_USER_RENEWAL_PAYED),
il vous faut également supprimer les références au groupe ROLE_USER_NO_EDITABLE (ou ROLE_USER_RENEWAL_PAYED) et remettre les editable à true (ou request_free à true) dans la base esupsgc pour réinitialiser les caculs :
delete from roles where role='ROLE_USER_NO_EDITABLE';
update user_account set editable = true;
ou
delete from roles where role='ROLE_USER_RENEWAL_PAYED';
update user_account set request_free = true;
caducIfEmpty
Si vous souhaitez rendre caduques les cartes des utilisateurs qui ne sont plus remontés par le SI (ou qui n'ont plus le droit d'avoir de carte selon des règles internes, comme l'appartenance à un groupe ldap) alors même que la date de fin (schacExpiryDate dans esup-sgc) qui a été récupérée lorsque celle-ci était encore disponible reste postérieure à la date du jour, l'utilisation de caducIfEmpty peut être utile.
Dans applicationContext-services.xml vous pouvez mettre :
supannRefId - atend en dur | |||
| csn4ExternalCard | csn des cartes 'externes', cad non issus du SGC (et donc issus d'un autre SGC) | Non | le-numero-csn (on pourra utiliser le champ supannRefId pour le faire transiter) |
| access-control4ExternalCard | numéro de carte de contrôle d'accès des cartes 'externes', cad non issus du SGC (et donc issus d'un autre SGC) | Non | le-numero-access-control (on pourra utiliser le champ supannRefId pour le faire transiter) |
| jpegPhoto4ExternalCard | jpegPhoto donnant la photo de cartes 'externes', cad non issus du SGC (et donc issus d'un autre SGC) | Non | shib/ldap - champ jpegPhoto sql : jpegPhoto correspondant à une photo jpeg exportée en base64 |
| jpegPhoto | jpegPhoto donnant la photo par défaut pour un utilisateur : c'est cette photo qui est proposée par défaut lors de la première demande de carte ou via la demande de carte via l'API REST (sans spécifier une photo spécifique) | Non | shib/ldap - champ jpegPhoto sql : jpegPhoto correspondant à une photo jpeg exportée en base64 |
| userType | affichage : onglet par userType | Oui | règle d'un spelUserInfoService Attention, le nombre maximal de caractères du userType est limité à 3 ; les libellés à donner dans les messages i18n sont libres quand à eux ; |
| template | thème (template) de carte à utiliser | Oui | règle d'un spelUserInfoService - doit correspondre à une clef de template |
| editable | true ou false selon que l'utilisateur est 'éditable ou non' | Non | remplace l'usage de ROLE_USER_NO_EDITABLE (qui en tant que 'groupe' doit forcément correspondre à un groupe/champ ldap) |
| requestFree | true ou false selon que l'utilisateur doit payer le renouvellement de la carte | Non | remplace l'usage de ROLE_USER_RENEWAL_PAYED (qui en tant que 'groupe' doit forcément correspondre à un groupe/champ ldap) si utilisé, il vous faut supprimer la référence à ROLE_USER_RENEWAL_PAYED dans sgcMappingGroupesRoles (et inversement) |
| blockUserMsg | Texte HTML affiché à l'utilisateur (vue utilisateur) en lieu et place du formulaire de demande de carte. Si vide (ou non spécifié dans la configuration), le formulaire de demande eest inchangé simplement. | Non | règle d'un spelUserInfoService - peut permettre de personnaliser le message disant à l'utilisateur qu'il ne peut pas demander de carte actuellement via eusp-sgc (car son inscription n'est pas en règle par exemple). |
| synchronize | Champ permettant d'indiquer que l'utilisateur (et ses cartes) doit être synchronisé depuis les userInfoServices. | Non | règle d'un spelUserInfoService - dans la configuration donnée par défaut, on met synchronize à 'false' pour les utilisateurs n'ayant plus d'adresses mail de renseignées dans le Système d'Information (ldap/bd). |
| academicLevel | Champ academicLevel permettant de transmettre le niveau d'étude de l'étudiant (en cours) à l'API ESCR (carte étudiante européenne). Ce niveau, si transmis, est notamment affiché derrière l'url correrspondant au qrcode de la carte étudiante européenne (page internet précisant si l'individu est effectivement étudiant ). | Non | Cf la doc de l'API ESCR : |
| pic | Champ pic utilisé pour générer l'ESCN en utilisant un pic spécifique à l'étudiant ciblé en lieu et place du pic donné par défaut dans la configuration du bean escUidFactoryService de applicationContext-crous.xml ; utile pour un esup-sgc servant plusieurs établissements et relié à ESCR. | Non |
Note supplémentaire sur le editable (et requestFree qui se comporte de la même manière) : après avoir utilisé un temps le userInfo editable (ou requestFree) et que vous voulez finalement revenir à l'usage de ROLE_USER_NO_EDITABLE (ou ROLE_USER_RENEWAL_PAYED),
il vous faut également supprimer les références au groupe ROLE_USER_NO_EDITABLE (ou ROLE_USER_RENEWAL_PAYED) et remettre les editable à true (ou request_free à true) dans la base esupsgc pour réinitialiser les caculs :
delete from roles where role='ROLE_USER_NO_EDITABLE';
update user_account set editable = true;
ou
delete from roles where role='ROLE_USER_RENEWAL_PAYED';
update user_account set request_free = true;
caducIfEmpty
Si vous souhaitez rendre caduques les cartes des utilisateurs qui ne sont plus remontés par le SI (ou qui n'ont plus le droit d'avoir de carte selon des règles internes, comme l'appartenance à un groupe ldap) alors même que la date de fin (schacExpiryDate dans esup-sgc) qui a été récupérée lorsque celle-ci était encore disponible reste postérieure à la date du jour, l'utilisation de caducIfEmpty peut être utile.
Dans applicationContext-services.xml vous pouvez mettre :
| Bloc de code | ||||
|---|---|---|---|---|
| Bloc de code | ||||
| ||||
<bean id="userInfoService" class="org.esupportail.sgc.services.userinfos.UserInfoService"> <property name="caducIfEmpty" value="caducIfEmpty"/> </bean> |
...
- %csn% (en hexadécimal)
- %reverse_csn% (le csn retourné par paires, en hexadécimal)
- %csn_dec% (en décimal)
- %reverse_csn_dec% (le csn retourné par paires, en décimal)
- %eppn%
- %escn%
- %esi%
- %secondary_id%
- %csn_dec%
- décimal)
- %reverse_csn_dec% (le csn retourné par paires, en décimal)
- %eppn%
- %escn%
- %esi%
- %secondary_id%
- %enabled_date% (la date d'activation de la carte - au format generalizedTime - yyyyMMddHHmmss'Z' )
- %due_date% (la date de fin de validité de la carte - au format generalizedTime - yyyyMMddHHmmss'Z' - peut permettre d'informer supanncmsdatefin)
- %etat_date% (la date de dernier changement d'état de la carte - au format generalizedTime - yyyyMMddHHmmss'Z' - correspondra logiquement dans le ldap à %enabled_date% )
- %etat% (l'état de la carte - correspondra logiquement à ENABLED )
- %photo%
- ... et enfin les identifiants de cartes générés par esup-sgc, via des 'CardIdService' (cf CardIdsService)
- dont %access-control% pour l'identifiant de contrôle d'accès
...
| Bloc de code | ||||
|---|---|---|---|---|
| ||||
<bean id="apiCrousService" class="org.esupportail.sgc.services.crous.ApiCrousService"> <property name="enable" value="false"/> <property name="webUrl" value="https://api-pp.nuonet.fr" /> <property name="appIdclientId" value="xxxxxxxxxxxxx" /> <property name="appSecretclientSecret" value="yyyyyyyyyyyy" /> <property name="accessUrl" value="https://acces.lescrous.fr"/> <property name="restTemplate" ref="restTemplate" /> </bean> |
Pour récupérer appId et appSecret la procédure est la suivante :
...
/>
</bean> |
Pour récupérer appId et appSecret la procédure est la suivante :
- se rendre sur https://dev-pp.lescrous.fr afin de vous créer une application et demander la souscription à l'API Beforeizly.
- une fois vos tests validés, vous pouvez vous connecter avec le même utilisateur sur https://dev.lescrous.fr et faire la même démarche pour obtenir vos identifiants de production.
clientId et clientSecret doivent être informés en fonction.
- accessUrl doit rester https://acces.lescrous.fr pour la pre-production comme la production
- webUrl doit être renseigné à https://api-pp.nuonet.fr pour la préproduction et https://api.lescrous.fr pour la production.
Attention : les opérations sur les API de la pré-production comme de la production de l'API Crous/Izly peuvent provoquer l'envoi de mails auw ayants-droits manipulés.
...
EsistCrousService :
Fait référence au fichier XML de calcul des tarifs CROUS
...
Nom : « Ecriture SGC »
Configuration NFC : « Ecriture ESUP SGC » (spécifié dans applicationContext-desfire.xml)
Application externe : « Web Service Write Esup SGC »
Contrôle du tagId : « via Esup SGC »
Valeur par défaut pour la validation sans confirmation : true → cela permet de valider le bon encodage de la carte, si cette valeur est laissée à false [non cochée], sans la validation manuelle, la carte reste à l'état "en cours d'impression", et dans le cadre de l'édition en 1 temps/passe, la carte est réimprimée/réencodée en continue !
- Visible : true
- Application d'écriture pour esup-sgc-client: true
Voir aussi la configuration des applications optionnelles : Applications ESUP-SGC / ESUP-NFC-TAG optionnelles
