...
Pour rappel, esup-sgc permet de consolider les champs utilisateurs au travers du calcul successifs successif de "UserInfoServices" : chacun va être évalué l'un après l'autre pour un utilisateur donné (le UserInfoService suivant pourra écraser une valeur calculée par le UserInfoService précédent, l'ordre d'exécution étant définie via une propriété "order"), la clef par défaut est l'eppn (qui est la clef métier de l'utilsiateur utilisateur dans esup-sgc), mais il est également possible d'utiliser des champs utilisateurs précédemment calculés comme identifiant d'un requêtage requêtage par exemple ; Exemple : RestUserInfoService RestUserInfoService configuré sur une route pégase et utilisant un supannEtuId précédemment récupéré via un LsapUserInforServiceLdapUserInforService.
On peut avoir autant de UserInfoService qu'on le souhaite, avec autant de connexions ldap, serveurs sql, api rest, règles spel que nécessaire.
La vue /admin/userinfos doit vous permettre d'avoir une bonne vue sur de l'ensemble de votre règle, et que vos règles, vous pouvez y visualiser au passage le temps d'exécution du calcul final de chaque règle pour un utilisateur donné, le temps de calcul total est également indiqué.
L'ensemble de ces configurations sont faites dans applicationContext-services.xml ; cf la page wiki Configurations ESUP-SGC et ESUP-NFC-TAG-SERVER#applicationContext-services.xml
...
Usuellemment, sauf cas particulier où on permet à un extérieur de demander une carte (voire importer une carte dans le cadre d'une mise en place en multi-tenants) via les seules informations récupérées depuis une authentification fédérée (fédération ESR portée par Renter ou même eduGain), ShibUserInfoService n'est en fait pas nécessaire/utile. Le problème/défaut de ShibUserInfoService étant qu'il n'est fonctionnel qu'au moment de l'authentification utilisateur et ne peut donc pas permettre de synchroniser les champs utilisateurs en dehors de cette authentification de l'utilisateur.
Si utilisé, on le confiugrera configurera logiquement en début d'exécution (order à 1)
...
C'est sans doute le UserInfoService à privilégier, car se reposant sur l'annuaire supann de l'établissement, vértiable véritable référentiel standardisé du SI de l'établissement pour les comptes utilisateur.
...
À noter que '?' sera remplacé par l'eppn de l'utilisateur. Mais (comme pour les autres UserInfoService) il est possible aussi d'utiliser un champ préalablement calculé par un UserInfoService (même si non persité par esup-sgc d'ailleurs).
Ainsi, si on a récupéré login depuis un LdapUserInfoService précédent, on pourrait faire par exemple :
...
RestUserInfoService se veut aussi générique que les autres UserInfoService, mais notez cependant qu'il a été développé et testé avec les APIs de Pégase en première cible.
Aussi, une authentification telle qu'impléméntée dans pégase est possible par exemple. Plus généralement une Authentification REST modulaire avec OAuth 2.0 Client Credentials est fonctionnelle donc, une authentification basic ou via api key est possible également.
RestUserInfoService s'attend à récupérer des résultats en JSON, sauf pour la récéupration imagesla récupération de la photo (jpegPhoto).
Voici un exemple de configuration pour des API Pégase donc ici :
| Bloc de code | ||
|---|---|---|
| ||
<bean id="pegaseAuthProvider" class="org.esupportail.sgc.services.rest.BearerTokenAuthProvider">
<property name="tokenEndpoint" value="https://authn-app.test-example.pc-scol.fr/cas/v1/tickets"/>
<property name="bodyCredentials">
<map>
<entry key="username" value="usernamePegaseApi"/>
<entry key="password" value="passwordDePegaseApi"/>
<entry key="token" value="true"/>
</map>
</property>
</bean>
<bean id="pegaseUserInfoService" class="org.esupportail.sgc.services.userinfos.RestUserInfoService" p:order="3">
<property name="authProvider" ref="pegaseAuthProvider"/>
<property name="spelFilter" value="#userInfosInComputing['supannEtuId'] != null and !#userInfosInComputing['supannEtuId'].isEmpty()"/>
<property name="url" value="https://ins.test-univ-example.pc-scol.fr/api/ins/ext/v2/gestion/inscription/ETAB00/{supannEtuId}/"/>
<property name="sgcParam2jsonPath">
<map>
<entry key="name" value="$.apprenant.etatCivil.nomDeNaissance"/>
<entry key="pegaseCibleCode" value="$.inscriptions[?(@.principale==true && @.cible.periode.code=='2025')].cible.code"/>
<entry key="pegaseFormationCode" value="$.inscriptions[?(@.principale==true && @.cible.periode.code=='2025')].cible.formation.code"/>
</map>
</property>
</bean>
<bean id="photoPegaseUserInfoService" class="org.esupportail.sgc.services.userinfos.RestUserInfoService" p:order="4">
<property name="authProvider" ref="pegaseAuthProvider"/>
<property name="spelFilter" value="#userInfosInComputing['supannEtuIdpegaseCibleCode'] != null and !#userInfosInComputing['supannEtuIdpegaseCibleCode'].isEmpty()"/>
<property name="url" value="https://piece.test-univ-example.pc-scol.fr/api/pie/ext/v1/etablissements/ETAB00/codeApprenant/{supannEtuId}/codePeriode/2025/codeChemin/{pegaseFormationCode}>{pegaseCibleCode}/photo"/>
<property name="sgcParam2jsonPath">
<map>
<entry key="jpegPhoto" value=""/>
</map>
</property>
</bean> |
...
supannEtuId devra être disponible, c'est à dire récupéré ici depuis un UserInfoService précédent.
La période "2025" est donnée en dur ici, mais on pourrait également imaginer la récupérer dynamiquement depuis une base de données externe (via un SqlUserInfoService à opérer en amont) afin d'avoir une configuration stable suivant dynamiquement les changements d'années universitaires.
Un jsonPath vide fait qu'esup-sgc prend le contenu de la réponse dans son ensemble, en texte, ou en binaire/fichier si le contentType de la réponse comme par "image/"
Enfin notez ici l'usage de spelFilter qui permet de limiter ce userInfoService aux seuls utilisateurs ayant un supannEtuId de renseigné. Cette possibilité est disponbile pour tous les userInfoService depuis la version 3.3.1 d'esup-sgc. Précédemment seul le filtre eppnFilter (limité à une expression régulière sur l'eppn simplement) était diponibledisponible.
SpelUserInfoService
SpelUserInfoService permet de remanipuler les données calculés calculées par des UserInfoService afin de les reformatter par exemple, d'en déduire des données adaptées à ce que demande esup-sgc.
...