Arborescence des pages

Comparaison des versions

Légende

  • Ces lignes ont été ajoutées. Ce mot a été ajouté.
  • Ces lignes ont été supprimées. Ce mot a été supprimé.
  • La mise en forme a été modifiée.

Note d'installation pour l'utilisation des groupes Grouper dans le portail esup 3.2.4 via le GroupStore ESCO du RECIA.

conventions :

<esupSrc> : le réperoire des sources d' update du package du portail eSup

<uportalSrc> : le répertoire du check out de uPortaldes sources du portail dans le package eSup (obtenu après le ant unzip)

<customDir> : le répertoire des custom de eSup.

...

Les dépendances pour l'api grouper et le groupStore RECIA (ESCO)

Pour la compilation

  • Ajout d'un repository
    Bloc de code
    cp <esupSrc>/uPortal_rel-3.2.4/pom.xml <customDir>/uPortal/

Edition du fichier pom.xml pour ajouter les repository

...

Bloc de code
 <repository>
            <id>Recia</id>
            <name>esco repo</name>
            <url>http://www.esco-portail.org/nexus/content/repositories/public/</url>
            <releases><enabled>true</enabled></releases>
            <snapshots><enabled>false</enabled></snapshots>
        </repository>
  • Ajout des dépendances
Bloc de code
cp <esupSrc>/uPortal_rel-3.2.4/uportal-impl/pom.xml <customDir>/uPortal/uportal-impl/

...

ajouter les lignes suivantes dans la liste des dependencies, juste avant le commentaire <!- - esup dependencies - ->

Bloc de code
<!-- esco dependencies -->
    <dependency>
      <groupId>org.esco.grouper</groupId>
      <artifactId>esco-grouper-portal-groupManager</artifactId>
      <version>0.0.3-grouper-1.6.3</version>
      <exclusions>
        <exclusion>
           <groupId>org.springframework</groupId>
           <artifactId>spring</artifactId>
        </exclusion>
        <exclusion>
           <groupId>net.sf.ehcache</groupId>
           <artifactId>ehcache</artifactId>
        </exclusion>
      </exclusions>
    </dependency>
    <dependency>
        <groupId>edu.internet2.middleware.subject.provider</groupId>
        <artifactId>ldap-source-adapter</artifactId>
        <version>0.0.3-grouper-1.6.3</version>
        <exclusions>
        <exclusion>
           <groupId>org.springframework</groupId>
           <artifactId>spring</artifactId>
        </exclusion>
        <exclusion>
           <groupId>net.sf.ehcache</groupId>
           <artifactId>ehcache</artifactId>
        </exclusion>
      </exclusions>
    </dependency>

...

La deuxième dépendance est facultative, nous l'utilisons afin d'éviter des connexion connexions multiples au ldap, cela agit comme la définition d'un pool ldap. Il s'agit en fait de l'intégration de vtldap faite part l'université de washington disponible ici http://staff.washington.edu/fox/grouper/Image Removed, pour , d'autres fonctions peuvent aussi être utilisées mais le mieux est de se référer à la documentation fournie dans les sources du projet.

Pour des raisons de praticité ces sources ont été intégrées sous forme de module au projet maven du groupStrore RECIAdu groupStore ESCO.

Pour la prise en compte des groupes grouper par le portail

  • Fichier à adapter
Bloc de code

cp <uportalSrc>/uportal-impl/src/main/resources/properties/groups/compositeGroupServices.xml <customDir>/uPortal/uportal-impl/src/main/resources/properties/groups/
  • Ajouter le service pour le groupStore ESCO en ajoutant cette définition :
Bloc de code

<\!-\- ESCO-Grouper service to use Gouper groups \-->
&nbsp; <service>
&nbsp;&nbsp;&nbsp; <name>ESCO-GROUPER</name>
&nbsp;&nbsp;&nbsp; <service_factory>org.esco.portal.groups.grouper.ESCOReferenceIndividualGroupServiceFactory</service_factory>
&nbsp;&nbsp;&nbsp; <entity_store_factory>org.esco.portal.groups.grouper.EntityStoreFactory</entity_store_factory>
&nbsp;&nbsp;&nbsp; <group_store_factory>org.esco.portal.groups.grouper.EntityGroupStoreFactory</group_store_factory>
&nbsp;&nbsp;&nbsp; <entity_searcher_factory>org.esco.portal.groups.grouper.EntitySearcherFactory</entity_searcher_factory>
&nbsp;&nbsp;&nbsp; <internally_managed>false</internally_managed>
&nbsp;&nbsp;&nbsp; <caching_enabled>false</caching_enabled>
&nbsp; </service>

  • Modifier le service du groupStore "local" ainsi
Bloc de code


<service>
&nbsp;&nbsp;&nbsp; <name>local</name>
&nbsp;&nbsp;&nbsp; <service_factory>org.esco.portal.groups.grouper.ESCOReferenceIndividualGroupServiceFactory</service_factory>
&nbsp;&nbsp;&nbsp; <entity_store_factory>org.jasig.portal.groups.ReferenceEntityStoreFactory</entity_store_factory>
&nbsp;&nbsp;&nbsp; <group_store_factory>org.esco.portal.groups.grouper.ESCOReferenceEntityGroupStoreFactory</group_store_factory>
&nbsp;&nbsp;&nbsp; <entity_searcher_factory>org.jasig.portal.groups.ReferenceEntitySearcherFactory</entity_searcher_factory>
&nbsp;&nbsp;&nbsp; <internally_managed>true</internally_managed>
&nbsp;&nbsp;&nbsp; <caching_enabled>true</caching_enabled>
&nbsp; </service>

Cette définition est nécessaire afin de pouvoir retourner les groupes grouper liés à un groupes uPortal, cela est effectué sous forme de decorator.

  • Définir le mapping entre les groupes Grouper et locaux

définir le fichier <customDir>/uPortal/uportal-impl/src/main/resources/properties/groups/esco-GroupLoad.xml

Bloc de code
 
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
<properties>

   <comment>
      Properties used to define how the the Grouper groups should be loaded
      in the native uPortal groups.
   </comment>

   <!-- Duration validity, in seconds, for the Grouper requests. -->
   <entry key="grouper.requests.cache.duration">25</entry>

   <!--
        Defines the grouper groups to load in uPortal groups.
        keys denote a uPortal group name and values are semicolon separated
        lists of grouper stems. The group loaded are the root groups
        in the stems.

    For instance, all groups in the stem esco:admin that are not member of another group
        are loaded in the Portal Administrator group:
    <entry key="Portal Administrators">esco:admin</entry>
    -->
    <entry key="Administrateurs Portail">esco:admin:central</entry>
    <entry key="Tout le monde">esco:Etablissements;esco:Applications</entry>
    <entry key="Proprietaires de fragment">esco:admin:esco-lo</entry>
</properties>

Pour la configuration de Grouper

il est nécessaire de placer les fichiers de configuration grouper nécessaires, pour faire cela il vous faudra récupérer les fichiers suivants dans le répertoire conf de l'api-grouper (normalement sur l machine où grouper est installé):

  • grouper.properties
  • grouper.hibernate.properties
  • ehcache.xml
  • grouper.ehcache.xml
  • morphString.properties
  • sources.xml

Et adapter selon les besoins les fichiers suivants :

  • grouper.properties
  • grouper.hibernate.properties
  • sources.xml

*Si vous avez décidé d'installer le module ldap-source-adapter
il vous faudra configurer le fichier sources.xml selon cet exemple :

Bloc de code

<?xml version="1.0" encoding="utf-8"?>

<!--
  LdapSourceAdapter configuration
-->

<sources>

  ...


  <source adapterClass="edu.internet2.middleware.subject.provider.LdapSourceAdapter">
    <id>uwpds</id>
    <name>UW PDS</name>
    <type>person</type>

    <!-- Note that most of the ldap configuration is in the properties file 
         The filename can be a file in your classpath or an absolute pathname
      -->

    <init-param>
      <param-name>ldapProperties_file</param-name>
      <param-value>ldap.properties</param-value>
    </init-param>
     
    
     <init-param>
      <param-name>SubjectID_AttributeType</param-name>
      <param-value>uwRegID</param-value>
    </init-param>
    <init-param>
      <param-name>Name_AttributeType</param-name>
      <param-value>uwNetID</param-value>
    </init-param>
    <init-param>
      <param-name>Description_AttributeType</param-name>
      <param-value>displayName</param-value>
    </init-param>

    <search>
        <searchType>searchSubject</searchType>
        <param>
            <param-name>filter</param-name>
            <param-value>
                (&amp;(uwRegID=%TERM%)(objectclass=uwPerson))
            </param-value>
        </param>
        <param>
            <param-name>scope</param-name>
            <param-value>
                SUBTREE_SCOPE            
            </param-value>
        </param>
        <param>
            <param-name>base</param-name>
            <param-value>
            </param-value>
        </param>
         
    </search>
    <search>
        <searchType>searchSubjectByIdentifier</searchType>
        <param>
            <param-name>filter</param-name>
            <param-value>
                (&amp;(|(uwnetID=%TERM%)(uwStudentID=%TERM%))(objectclass=uwPerson))
            </param-value>
        </param>
        <param>
            <param-name>scope</param-name>
            <param-value>
                SUBTREE_SCOPE            
            </param-value>
        </param>
        <param>
            <param-name>base</param-name>
            <param-value>
            </param-value>
        </param>
    </search>
    
    <!-- use the firstlastfilter to allow: last, first lookup -->
    <search>
       <searchType>search</searchType>
         <param>
            <param-name>filter</param-name>
            <param-value>
                 (&amp;(|(uwNetID=%TERM%)(sn=%TERM%))(uwNetId=*)(objectclass=uwPerson)))
            </param-value>
        </param>
         <param>
            <param-name>firstlastfilter</param-name>
            <param-value>
     (&amp;(uwPersonRegisteredSurname=%LAST%)(uwPersonRegisteredFirstMiddle=%FIRST%*)(uwnetid=*)(objectClass=uwPerson))
            </param-value>
        </param>
        <param>
            <param-name>scope</param-name>
            <param-value>
                SUBTREE_SCOPE            
            </param-value>
        </param>
         <param>
            <param-name>base</param-name>
            <param-value>
            </param-value>
        </param>
    </search>
    ///Attributes you would like to display when doing a search 
    <attribute>uwNetID</attribute>
    <attribute>uwEWPName</attribute>
    <attribute>uwSWPName</attribute>
    <attribute>uwEWPDept1</attribute>
   
  </source>

</sources>

côté RECIA nous avons juste modifié ces paramtères :

Bloc de code

....
<source adapterClass="edu.internet2.middleware.subject.provider.LdapSourceAdapter">
    <id>esco:ldap</id>
    <name>JNDI Source Adapter esco:ldap</name>
    <type>person</type>

    <!-- Note that most of the ldap configuration is in the properties file 
         The filename can be a file in your classpath or an absolute pathname
    -->

    <init-param>
      <param-name>ldapProperties_file</param-name>
      <param-value>ldap.properties</param-value>
    </init-param>

    <init-param>
      <param-name>Multiple_Results</param-name>
      <param-value>false</param-value>
    </init-param>
....

c'est à dire la classe de l'adapterClass qui change et l'ajout des deux init-param à la place des param ldap ( INITIAL_CONTEXT_FACTORY, PROVIDER_URL, SECURITY_AUTHENTICATION, SECURITY_PRINCIPAL, SECURITY_CREDENTIALS)

et ajouter un fichier ldap.properties avec cet exemple de conf :

Bloc de code

# ldap source adapter properties
# 
# for a complete list of properties see:
#      http://code.google.com/p/vt-middleware/wiki/vtldap#Configuration_Properties
#
#


edu.vt.middleware.ldap.ldapUrl=ldap://pds.example.edu:389
edu.vt.middleware.ldap.base=dc=example,dc=edu
edu.vt.middleware.ldap.searchScope=SUBTREE

# authn if simple
edu.vt.middleware.ldap.serviceUser=cn=admin,dc=example,dc=edu
edu.vt.middleware.ldap.serviceCredential=admin_password

# authn for sasl external (certificates)
#edu.vt.middleware.ldap.authtype=EXTERNAL
#edu.vt.middleware.ldap.tls=true
#edu.vt.middleware.ldap.serviceUser=cn=admin.example.edu
# these to use PEM format cert and key
#pemCaFile=/path/to/ca.pem
#pemCertFile=/path/to/cert.pem
#pemKeyFile=/path/to/key.pem

# pooling options
edu.vt.middleware.ldap.pool.minPoolSize = 2
edu.vt.middleware.ldap.pool.maxPoolSize = 5

Adaptation des sources uPortal

Afin de pouvoir intégrer correctement les groupes grouper de cette façon il est nécessaire de modifier quelques classes du portail, d'une part pour éviter des problèmes de blocage lors de la remontées des groupes et de leur membres quand il y a beaucoup de groupe (cas du contexte RECIA, rencontré à partir de 6000-7000 groupes).

Etape 3 : Patch du gestionnaire  de groupes d'uPortal

Balise Wiki
L'utilisation de ":" comme séparateur dans le nommage des groupes dans Grouper pose un problème au gestionnaire groupes d' uPortal. Ce problème a déjà été reporté dans le \[Jira de uPortal\|https://issues.jasig.org/browse/UP-2994\]&nbsp; Bill Brown a déjà proposé un patch \[https://issues.jasig.org/secure/attachment/11917/rel-3-2-patches.patch\|https://issues.jasig.org/secure/attachment/11917/rel-3-2-patches.patch\].

Pour ce faire, j'ai tout simplement modifié les fichiers source de uPortal avec les différences décrites dans le fichier patch.

Etape 4 : Initialisation et déploiement

Et pour finir : ant init deploy

Bien entendu, il faut redémarrer le portail.