[Résolu] Problème de synchronisation LDAP

cancel
Showing results for 
Search instead for 
Did you mean: 
3snet
Member II

[Résolu] Problème de synchronisation LDAP

Bonjour à tous,

J’ai installé la version 3.3 Community, j’ai configuré le lien LDAP pour l’utilisation de l’authentification vie Active Directory (AD) (voir fichier de config).
Lorsque j’essai de me connecte avec un login qui se trouve dans AD, j’ai les résultats suivants :
1. Si j’utilise l’attribut « cn » comme login (Prenom Nom), la connexion se fait
2. Si j’utilise l’attribut « sAMAccountName » (prenom.nom, sachant que c’est ce format qui est utilisé dans le reste du SI ce qui posera peut être un  problème si on active le SSO ), je reçois un message d’échec de la connexion, et la log affiche le message suivant :

ERROR [org.springframework.extensions.webscripts.AbstractRuntime] Exception from executeScript - redirecting to status template error: 05160003 Login failed
org.springframework.extensions.webscripts.WebScriptException: 05160003 Login failed
   at org.alfresco.repo.web.scripts.bean.AbstractLoginBean.login(AbstractLoginBean.java:75)
   at org.alfresco.repo.web.scripts.bean.LoginPost.executeImpl(LoginPost.java:73)
   at org.springframework.extensions.webscripts.DeclarativeWebScript.executeImpl(DeclarativeWebScript.java:231)
   at org.springframework.extensions.webscripts.DeclarativeWebScript.execute(DeclarativeWebScript.java:64)
   at org.alfresco.repo.web.scripts.RepositoryContainer$2.execute(RepositoryContainer.java:367)
   at org.alfresco.repo.transaction.RetryingTransactionHelper.doInTransaction(RetryingTransactionHelper.java:321)
   at org.alfresco.repo.web.scripts.RepositoryContainer.transactionedExecute(RepositoryContainer.java:417)
   at org.alfresco.repo.web.scripts.RepositoryContainer.transactionedExecuteAs(RepositoryContainer.java:434)
   at org.alfresco.repo.web.scripts.RepositoryContainer.executeScript(RepositoryContainer.java:257)
   at org.springframework.extensions.webscripts.AbstractRuntime.executeScript(AbstractRuntime.java:307)
   at org.springframework.extensions.webscripts.AbstractRuntime.executeScript(AbstractRuntime.java:178)
   at org.springframework.extensions.webscripts.servlet.WebScriptServlet.service(WebScriptServlet.java:116)
   at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
   at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
   at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
   at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
   at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
   at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
   at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
   at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
   at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:286)
   at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:845)
   at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
   at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
   at java.lang.Thread.run(Thread.java:619)

3. Dans les deux cas le compte est créé/importé dans Alfresco (!), mais seul le Nom d'utilisateur est synchronisé (Prenom Nom ou prenom.nom selon le login utilisé) mais aucun autre attribut n’est importé. L’email par exemple n’est pas importé alors qu’il doit être utilisé pour lancer des invitations pour un espace donné.

Par ailleurs, lorsque j’essai d’ouvrir le compte « prenom.nom » depuis la liste des utilisateurs je reçois l’erreur http 500 suivante :

Le serveur a rencontré une erreur interne () qui l'a empêche de satisfaire la requête .
javax.servlet.ServletException: Could not resolve view with name 'user/prenom' in servlet with name 'Spring Surf Dispatcher Servlet'
   org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.java:1042)
   org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:798)
   org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:716)
   org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:647)
   org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:552)
   javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
   javax.servlet.http.HttpServlet.service(HttpServlet.java:717)

NB.: ce problème n’arrive pas si je consulte les fiches des utilisateurs depuis la console d’administration.

***********************************************************************************************
Environnement :

Alfresco 3.3 Community
Tomcat 6.0.18
Mysql : 5.1.35


Extrait du ldap-authentication.properties :

ldap.authentication.active=true
ldap.authentication.userNameFormat=%s
ldap.authentication.java.naming.factory.initial=com.sun.jndi.ldap.LdapCtxFactory
ldap.authentication.java.naming.provider.url=ldap://monldap:389
ldap.authentication.java.naming.security.authentication=simple
ldap.authentication.escapeCommasInBind=false
ldap.authentication.escapeCommasInUid=false
ldap.authentication.defaultAdministratorUserNames=ahmed farnoune
ldap.synchronization.active=true
ldap.synchronization.java.naming.security.authentication=simple
ldap.synchronization.java.naming.security.principal=prenom.nom@mondomaine.com
ldap.synchronization.java.naming.security.credentials=password
ldap.synchronization.queryBatchSize=0
ldap.synchronization.attributeBatchSize=0
ldap.synchronization.groupQuery=(objectclass\=groupOfNames)
ldap.synchronization.groupDifferentialQuery=(&(objectclass\=groupOfNames)(!(modifyTimestamp<\={0})))
ldap.synchronization.personQuery=(objectclass\=inetOrgPerson)
ldap.synchronization.personDifferentialQuery=(&(objectclass\=inetOrgPerson)(!(modifyTimestamp<\={0})))
ldap.synchronization.groupSearchBase=cn\=Person,cn\=Schema,cn\=Configuration,dc\=mondomaine,dc\=com
ldap.synchronization.userSearchBase=cn\=Users,dc\=mondomaine,dc\=com
ldap.synchronization.modifyTimestampAttributeName=modifyTimestamp
ldap.synchronization.timestampFormat=yyyyMMddHHmmss'Z'
ldap.synchronization.userIdAttributeName=sAMAccountName
ldap.synchronization.userFirstNameAttributeName=givenName
ldap.synchronization.userLastNameAttributeName=sn
ldap.synchronization.userEmailAttributeName=mail
ldap.synchronization.userOrganizationalIdAttributeName=o
ldap.synchronization.defaultHomeFolderProvider=userHomesHomeFolderProvider
ldap.synchronization.groupIdAttributeName=cn
ldap.synchronization.groupDisplayNameAttributeName=description
ldap.synchronization.groupType=groupOfNames
ldap.synchronization.personType=inetOrgPerson
ldap.synchronization.groupMemberAttributeName=member
ldap.synchronization.enableProgressEstimation=true
*****************************************************************************************

Merci d'avance pour votre réponse.

Très cordialement.
7 Replies
lucky
Member II

Re: [Résolu] Problème de synchronisation LDAP

Bonjour,
J'ai eu un problème plus ou moins similaire, essayez de modifier :
ldap.authentication.userNameFormat=%s
par
ldap.authentication.userNameFormat=%s@mondomaine.com

De mon coter ca a marcher.
3snet
Member II

Re: [Résolu] Problème de synchronisation LDAP

Merci pour la réponse.
J'ai essayé ce paramètre mais le résultat est le même.

Cordialement.
lucky
Member II

Re: [Résolu] Problème de synchronisation LDAP

Ok, voila le fichier ldap-ad que j'utilise

ldap.authentication.active=true
ldap.authentication.allowGuestLogin=true
ldap.authentication.userNameFormat=%s@mondomaine.fr
ldap.authentication.java.naming.factory.initial=com.sun.jndi.ldap.LdapCtxFactory
ldap.authentication.java.naming.provider.url=ldap://monserveur.mondomaine:389
ldap.authentication.java.naming.security.authentication=simple
ldap.authentication.escapeCommasInBind=false
ldap.authentication.escapeCommasInUid=false
ldap.authentication.defaultAdministratorUserNames=Administrateur
ldap.synchronization.active=true
ldap.synchronization.java.naming.security.principal=Administrateur@modomaine.fr
ldap.synchronization.java.naming.security.credentials=monmotdepasse
ldap.synchronization.queryBatchSize=1000
ldap.synchronization.attributeBatchSize=1000
dap.synchronization.groupQuery=(objectclass\=group)
ldap.synchronization.groupDifferentialQuery=(&(objectclass\=group)(!(modifyTimestamp<\={0})))
ldap.synchronization.personQuery=(&(objectclass\=user)(userAccountControl\:1.2.840.113556.1.4.803\:\=512))
ldap.synchronization.personDifferentialQuery=(&(objectclass\=user)(userAccountControl\:1.2.840.113556.1.4.803\:\=512)(!(modifyTimestamp<\={0})))
ldap.synchronization.groupSearchBase=ou\=OU,dc=mondomaine,dc=fr
ldap.synchronization.userSearchBase=ou\=OU,dc=mondomaine,dc=fr
ldap.synchronization.modifyTimestampAttributeName=modifyTimestamp
ldap.synchronization.timestampFormat=yyyyMMddHHmmss'.0Z'
ldap.synchronization.userIdAttributeName=sAMAccountName
ldap.synchronization.userFirstNameAttributeName=givenName
ldap.synchronization.userLastNameAttributeName=sn
ldap.synchronization.userEmailAttributeName=mail
ldap.synchronization.userOrganizationalIdAttributeName=company
ldap.synchronization.defaultHomeFolderProvider=userHomesHomeFolderProvider
ldap.synchronization.groupIdAttributeName=cn
ldap.synchronization.groupDisplayNameAttributeName=displayName
ldap.synchronization.groupType=group
ldap.synchronization.personType=user
ldap.synchronization.groupMemberAttributeName=member
ldap.synchronization.enableProgressEstimation=true
Pratiquement tout est par défaut, j'ai juste modifié les lignes suivantes :

ldap.authentication.userNameFormat=%s@mondomaine.fr
ldap.authentication.java.naming.provider.url=ldap://monserveur.mondomaine:389
ldap.authentication.java.naming.security.authentication=simple
ldap.authentication.defaultAdministratorUserNames=Administrateur
ldap.synchronization.java.naming.security.principal=Administrateur@modomaine.fr
ldap.synchronization.java.naming.security.credentials=monmotdepasse
ldap.synchronization.groupSearchBase=ou\=OU,dc=mondomaine,dc=fr
ldap.synchronization.userSearchBase=ou\=OU,dc=mondomaine,dc=fr
Je pense que a la place de Administrateur on peut utiliser n'importe quel compte Admin du schéma mais j'ai pas essayer…
3snet
Member II

Re: [Résolu] Problème de synchronisation LDAP

Bonjour,

J'ai fais la même chose, mais je n'arrive toujours pas à importer autre chose que le nom de l'utilisateur (pas d'email ni telephone, ni rien d'autre d'ailleurs).
Sauf que je n'utilise pas pas un compte adminitrateur pour la variable : ldap.synchronization.java.naming.security.principal.

Est-ce-que c'est obligatoire ?

NB. : le compte importé est non modifiable. Donc on ne peut pas ajouter l'email ou le téléphone !

merci d'avance.

Bien cordialement
lucky
Member II

Re: [Résolu] Problème de synchronisation LDAP

Bonjour,
Je ne pense pas que Administrateur soit obligatoire, un compte admin du schéma windows (si on parle bien d'active directory et pas d'un ldap tiers) devrais suffire je crois…
Mais a fin de test, ça serais pas mal d'essayer avec Administrateur…
Sinon il faut vérifier le nom des propriétés, par défaut le champ d'adresse mail d'un AD s'appelle mail, c'est ce qu'on va chercher ici :

ldap.synchronization.userEmailAttributeName=mail
Si le champ par défaut est vide mais que vous avez créer un autre champ appeler email par exemple où vous enregistrez les adresses mail, il faut transformer la ligne comme ceci :

ldap.synchronization.userEmailAttributeName=email
Es ce que l'authentification fonctionne?
3snet
Member II

Re: [Résolu] Problème de synchronisation LDAP

Merci pour la réponse.

Oui l'authentification fonctionne, mais l'import ne se fait que pour le nom et pas las autres données du compte utilisé.

Merci
lucky
Member II

Re: [Résolu] Problème de synchronisation LDAP

Bonjour,
Si le fichier ldap-ad.properties est correct et que l'authentification fonctionne, c'est que le soucis est très probablement dans le nom des attributs des comptes.
Tout d'abord, es ce que vous avez avec le compte Administrateur ?

ldap.authentication.defaultAdministratorUserNames=Administrateur
ldap.synchronization.java.naming.security.principal=Administrateur@modomaine.fr

Pour vérifier le nom des attributs de l'AD, j'utilise ADSEDIT mais il faut faire attention a ne rien changer car cet outil permet de modifier n'importe quel morceau de l'ad sans vérifications …
J'ouvre ADSEDIT.msc sur mon serveur AD
Je me connecte sur DOMAIN
Je browse mes OU jusqu'a arriver sur un user (n'importe lequel..)
Je fait un clic droit et propriété sur mon user (en principe il est de la forme CN= Prenom NOM)
Je cherche dans la liste l'attribut qui correspond a l'adresse mail (chez moi : mail)

Voila, vous pouvez vérifier que vous mappez corectement les attributs comme ça.
En espérant vous avoir aider.