Avant propos.
ori-oai-workflow a la possibilité de se connecter à un annuaire LDAP pour l'authentification et l'identification.
Le développement de cette possibilité s'est initalement naturellement concentré sur la compatibilité avec des annuaires LDAP type SupAnn .
Certains utilisateurs ont eu à installer ori-oai-workflow 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.
N'hésitez pas à contrbuer à 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 ori-oai-workflow.
Notes
Quelques notes pour pouvoir utiliser Active Directory de Microsoft avec ori-oai-workflow.
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 et ses groupes
main-config.properties :
ldap.managerDn = le sAMAccountName d'un "admin" dans l'AD
ldap.managerPassword = son password
acegi-authentication-ldap.xml
- On décommente l'usage de ldap.managerDn et ldap.managerPassword
- On ajoute un bloc extraEnvVars, cf diff ci-dessous
Index: /opt/ori-oai/ori-oai-src/ori-oai-workflow-svn/conf/properties/spring/acegi/acegi-authentication-ldap.xml
===================================================================
--- /opt/ori-oai/ori-oai-src/ori-oai-workflow-svn/conf/properties/spring/acegi/acegi-authentication-ldap.xml (revision 1694)
+++ /opt/ori-oai/ori-oai-src/ori-oai-workflow-svn/conf/properties/spring/acegi/acegi-authentication-ldap.xml (working copy)
@@ -9,14 +9,23 @@
class="org.acegisecurity.ldap.DefaultInitialDirContextFactory">
<constructor-arg
value="${ldap.providerUrl}" />
- <!-- uncomment it if you want to connect vith username/password (see main-cinfig.properties)
+ <!-- uncomment it if you want to connect vith username/password (see main-cinfig.properties) -->
<property name="managerDn">
<value>${ldap.managerDn}</value>
</property>
<property name="managerPassword">
<value>${ldap.managerPassword}</value>
</property>
- -->
+ <property name="extraEnvVars">
+ <map>
+ <entry>
+ <key>
+ <value>java.naming.referral</value>
+ </key>
+ <value>follow</value>
+ </entry>
+ </map>
+ </property>
</bean>
</beans>
acegi-authentication.xml
On surcharge le userSearch donné par défaut avec acegi, cf diff ci-dessous
Index: /opt/ori-oai/ori-oai-src/ori-oai-workflow-svn/conf/properties/spring/acegi/acegi-authentication.xml
===================================================================
--- /opt/ori-oai/ori-oai-src/ori-oai-workflow-svn/conf/properties/spring/acegi/acegi-authentication.xml (revision 1694)
+++ /opt/ori-oai/ori-oai-src/ori-oai-workflow-svn/conf/properties/spring/acegi/acegi-authentication.xml (working copy)
@@ -82,8 +82,27 @@
<property name="peopleSearchBase" value="${ldap.people.peopleSearchBase}" />
<property name="uidAttribute" value="${ldap.people.uidAttribute}" />
<property name="mailAttribute" value="${ldap.people.mailAttribute}" />
+ <property name="userSearch"><ref bean="userSearch"/></property>
</bean>
+ <bean id="userSearch"
+ class="org.acegisecurity.ldap.search.FilterBasedLdapUserSearch">
+ <constructor-arg index="0">
+ <!--value>dc=ul,dc=edu,dc=lb</value-->
+ <value></value>
+ </constructor-arg>
+ <constructor-arg index="1">
+ <value>(sAMAccountName={0})</value>
+ </constructor-arg>
+ <constructor-arg index="2">
+ <ref bean="initialDirContextFactory" />
+ </constructor-arg>
+ <property name="searchSubtree">
+ <value>true</value>
+ </property>
+ </bean>
+
+
<bean id="oriLdapAuthoritiesPopulator"
class="org.orioai.workflow.services.application.OriLdapAuthoritiesPopulator">
<constructor-arg>
OriBindAuthenticator.java
Certaines parties du code doivent à ce jour être commentées.
Cf diff ci-dessous
Index: /opt/ori-oai/ori-oai-src/ori-oai-workflow-svn/src/org/orioai/workflow/services/application/OriBindAuthenticator.java
===================================================================
--- /opt/ori-oai/ori-oai-src/ori-oai-workflow-svn/src/org/orioai/workflow/services/application/OriBindAuthenticator.java (revision 1694)
+++ /opt/ori-oai/ori-oai-src/ori-oai-workflow-svn/src/org/orioai/workflow/services/application/OriBindAuthenticator.java (working copy)
@@ -78,12 +78,14 @@
// If DN patterns are configured, try authenticating with them directly
Iterator dns = getUserDns(username).iterator();
+ /*
while (dns.hasNext() && (user == null)) {
String dn = (String) dns.next();
log.debug("retrieveUser :: dn : " + dn);
user = bindWithDn(dn, username);
log.debug("retrieveUser :: user : " + user);
}
+ */
// Otherwise use the configured locator to find the user
// and authenticate with the returned DN.
@@ -136,11 +138,13 @@
LdapUserDetails user = null;
+ /*
while (dns.hasNext() && (user == null)) {
String dn = (String) dns.next();
log.debug("retrieveUsers :: dn : " + dn);
user = bindWithDn(dn, userUid);
}
+ */
// Otherwise use the configured locator to find the user
// and authenticate with the returned DN.