Recherche

Sommaire

Pages enfant
  • Microsoft Active Directory

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.
Commentaire: Migrated to Confluence 5.3

...

esup-ecm a la possibilité de se connecter à un annuaire LDAP pour l'authentification et l'identification.

Balise WikiLe développement de cette possibilité s'est initalement initialement naturellement concentré sur la compatibilité avec des annuaires LDAP types \[SupAnn\|http://www.cru.fr/documentation/supann/index\] .type SupAnn .

Certains utilisateurs ont eu à installer esup-ecm sur un Microsoft Active Directory, un certain nombre de modifications sont à faire pour y parvenir, on tente ici de rassembler quelques notes autour de cela.

Nuxeo gère cette possibilité nativement, on donne ici donc les configurations Nuxeo qu'il faut faire pour cela.

N'hésitez pas à contrbuer contribuer à cette page en la modifiant directement ou en y ajoutant des commentaires, cela afin d'obtenir une documentation complète, voire à permettre aux développeurs d'intégrer cette possibilité AD nativement dans esup-ecm.

Notes

Objectifs

Avec les modifs données ci-dessous, on est censé pouvoir
- utiliser AD pour s'authentifier via le couple sAMAccountName / password
- utiliser AD pour récupérer les attributs d'un utilisateur
- la récupération des groupes est ici cependant désactiver (à étudier)

default-ldap-groups-directory-bundle.xml

on désactive la récupération des groupes -> on commente tout le fichier, cf diff ci-dessous

...

Quelques notes pour pouvoir utiliser Active Directory de Microsoft avec esup-ecm.
On privilégiera cependant l'utilisation d'un annuaire ldap type Supann à celui d'un AD.
La particularité constatée de l'AD est que le full Domain Name d'un utilisateur ne comprend pas un uid=jtest mais un cn="Justin Test".
L'identifiant login étant un attribut particulier, le "sAMAccountName".

Objectifs

Avec les modifs données ci-dessous, on est censé pouvoir
- utiliser AD pour s'authentifier via le couple sAMAccountName / password
- utiliser AD pour récupérer les attributs d'un utilisateur
- la récupération des groupes est ici cependant désactiver (à étudier)

default-ldap-groups-directory-bundle.xml

on désactive la récupération des groupes -> on commente tout le fichier,

cf diff ci-dessous

Bloc de code

Index: /opt/ori-oai/ori-oai-src/esup-ecm-svn/esup-ecm-config-plugin/src/main/resources/config/default-ldap-groups-directory-bundle.xml

======================================================================
\--\- /opt/ori-oai/ori-oai-src/esup-ecm-svn/esup-ecm-config-plugin/src/main/resources/config/default-ldap-groups-directory-bundle.xml    xml	(revision 628)
\++\+ /opt/ori-oai/ori-oai-src/esup-ecm-svn/esup-ecm-config-plugin/src/main/resources/config/default-ldap-groups-directory-bundle.xml    	(working copy)
@@ \-10,66 \+10,4 @@
&nbsp;&nbsp;   <\!-\- the groups LDAP directory for users is required to make this bundle work \-->
&nbsp;&nbsp;   <require>org.nuxeo.ecm.directory.ldap.storage.users</require>
&nbsp;
\-&nbsp;  <extension target="org.nuxeo.ecm.directory.ldap.LDAPDirectoryFactory"
\-&nbsp;&nbsp;&nbsp;-    point="directories">
\-
\-&nbsp;&nbsp;&nbsp;-    <directory name="groupDirectory">
\-
\-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\!-\-      <!-- Reuse the default server configuration defined for userDirectory \-->
\-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-      <server>default</server>
\-
\-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-      <schema>group</schema>
\-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-      <idField>groupname</idField>
\-
\-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-
-      <searchBaseDn><at:var at:name="ldapSearchBaseDn" /></searchBaseDn>
\-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-      <searchFilter>(\|(objectClass=groupOfNames)(objectClass=groupOfURLs))</searchFilter>
\-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-      <searchScope>subtree</searchScope>
\-
\-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-      <readOnly>true</readOnly>
\-
\-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\!-\-      <!-- comment <cache\* /> tags to disable the cache \-->
\-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\!-\-      <!-- cache timeout in seconds \-->
\-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-      <cacheTimeout>3600</cacheTimeout>
\-
\-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\!-\-      <!-- maximum number of cached entries before global invalidation \-->
\-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-      <cacheMaxSize>1000</cacheMaxSize>
\-
\-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-      <creationBaseDn><at:var at:name="ldapSearchBaseDn" /></creationBaseDn>
\-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
-      <creationClass>top</creationClass>
\-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-      <creationClass>groupOfUniqueNames</creationClass>
\-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-      <rdnAttribute>cn</rdnAttribute>
\-
\-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-      <fieldMapping name="groupname">cn</fieldMapping>
\-
\-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-      <references>
\-
\-
\-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\!-\-
-        <!-- LDAP reference resolve DNs embedded in uniqueMember attributes
\-
\-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-          If the target directory has no specific filtering policy, it is most
\-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-          of the time not necessary to enable the 'forceDnConsistencyCheck' policy.
\-
\-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;' policy.
-
-          Enabling this option will fetch each reference entry to ensure its
\-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-          existence in the target directory.
\-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \-->
\-
\-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-        -->
-
-        <ldapReference field="members" directory="userDirectory"
\-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-          forceDnConsistencyCheck="false"
\-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; staticAttributeId="member"
\-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-          staticAttributeId="member"
-          dynamicAttributeId="memberURL" />
\-
\-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-        <ldapReference field="subGroups" directory="groupDirectory"
\-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; forceDnConsistencyCheck="false"
\-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-          forceDnConsistencyCheck="false"
-          staticAttributeId="uniqueMember"
\-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-          dynamicAttributeId="memberURL" />
\-
\-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <inverseReference field="parentGroups"
\-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-        <inverseReference field="parentGroups"
-          directory="groupDirectory" dualReferenceField="subGroups" />
\-
\-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-      </references>
\-
\-&nbsp;&nbsp;&nbsp;-    </directory>
\-
\-&nbsp;  </extension>
\-
&nbsp; </component>

default-ldap-users-directory-bundle.xml

On adapte ce fichier à l'utilisation de l'Active Directory Microsoft,

cf diff ci-dessous

Bloc de code

Index: /opt/ori-oai/ori-oai-src/esup-ecm-svn/esup-ecm-config-plugin/src/main/resources/config/default-ldap-users-directory-bundle.xml
===================================================================
\--\- /opt/ori-oai/ori-oai-src/esup-ecm-svn/esup-ecm-config-plugin/src/main/resources/config/default-ldap-users-directory-bundle.xml&nbsp;&nbsp; &nbsp;	(revision 628)
\++\+ /opt/ori-oai/ori-oai-src/esup-ecm-svn/esup-ecm-config-plugin/src/main/resources/config/default-ldap-users-directory-bundle.xml&nbsp;&nbsp; &nbsp;	(working copy)
@@ \-35,10 \+35,11 @@
&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;11 @@

         Only the authentication of users (bind) use the credentials entered
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;         through the login form if any.-->
\-&nbsp;&nbsp; &nbsp;&nbsp;-	  @begin.ldap.bind@
\-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-      <bindDn>@ldap.bindDn@</bindDn>
\-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-      <bindPassword>@ldap.bindPassword@</bindPassword>
\-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-      @end.ldap.bind@
+
\+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;+      <bindDn>le sAMAccountName d'un "admin" dans l'AD</bindDn>
\+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;+      <bindPassword>son password</bindPassword>
+
&nbsp;&nbsp;&nbsp;&nbsp;     </server>
&nbsp;
&nbsp;&nbsp;
   </extension>
@@ \-52,8 \+53,8 @@
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;       <idField>username</idField>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;       <passwordField>password</passwordField>
&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
       <searchBaseDn><at:var at:name="ldapSearchBaseDn" /></searchBaseDn>
\-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-      <searchClass>person</searchClass>
\+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;+      <searchClass>User</searchClass>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\!-\       <!-- To additionally restricte entries you can add an
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;         arbitrary search filter such as the following:
&nbsp;
@@ \-63,7 \+64,12 @@
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
       -->
&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\!-\
       <!-- use subtree if the people branch is nested \-->
\-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-      <searchScope>onelevel</searchScope>
\+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;+      <searchScope>subtree</searchScope>
\+&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;
\+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\!-\+      <!-- using 'subany', search will match toto. use 'subfinal' to
\+&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;+	   match toto and 'subinitial' to match toto. subinitial is the
\+&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;+	   default behaviour-->
\+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+      <substringMatchType>subany</substringMatchType>
&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
       <readOnly>true</readOnly>
&nbsp;
@@ \-74,26 \+80,28 @@
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\!-\
       <!-- maximum number of cached entries before global invalidation \-->
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;       <cacheMaxSize>1000</cacheMaxSize>
&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
       <creationBaseDn><at:var at:name="ldapSearchBaseDn" /></creationBaseDn>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;       <creationClass>top</creationClass>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;       <creationClass>person</creationClass>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;       <creationClass>organizationalPerson</creationClass>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <creationClass>inetOrgPerson</creationClass>
\-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;       <creationClass>inetOrgPerson</creationClass>
-      <rdnAttribute>uid</rdnAttribute>
\+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;+      <rdnAttribute>sAMAccountName</rdnAttribute>
&nbsp;
\-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-      <fieldMapping name="username">uid</fieldMapping>
\-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-      <fieldMapping name="firstName"><at:var at:name="ldapFirstName" /></fieldMapping>
\-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-      <fieldMapping name="lastName"><at:var at:name="ldapLastName" /></fieldMapping>
\-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
-      <fieldMapping name="company"><at:var at:name="ldapCompagny" /></fieldMapping>
\-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-      <fieldMapping name="email"><at:var at:name="ldapEmail" /></fieldMapping>
\-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;
\+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"ldapEmail" /></fieldMapping>
-
+      <fieldMapping name="username">sAMAccountName</fieldMapping>
\+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;+      <fieldMapping name="password">userPassword</fieldMapping>
\+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;+      <fieldMapping name="firstName">givenName</fieldMapping>
\+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;+      <fieldMapping name="lastName">sn</fieldMapping>
\+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;+      <fieldMapping name="company">compagny</fieldMapping>
\+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;+      <fieldMapping name="email">mail</fieldMapping>
+
\+<\!--&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <references>
&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;email">mail</fieldMapping>
+
+<!--
       <references>

         <inverseReference field="groups" directory="groupDirectory"
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;           dualReferenceField="members" />
&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
       </references>
\-
\+-->
&nbsp;&nbsp;&nbsp;&nbsp;     </directory>
&nbsp;
&nbsp;&nbsp;
   </extension>