je teste Alfresco community 1.3.0. Je parviens à...

cancel
Showing results for 
Search instead for 
Did you mean: 
unknown-user
Active Member

je teste Alfresco community 1.3.0. Je parviens à...

Bonjour,

je teste Alfresco community 1.3.0. Je parviens à m'authentifier sur notre serveur LDAP en paramètrant userNameFormat comme suit:
employeenumber=%s,ou=person,o=myuniversity,c=be

En fait nous ne voulons PAS  utiliser "employeenumber" pour l'identification des utilisateurs car ceux-ci disposent d'un login plus pratique, qui se trouve placé dans un attibut LDAP dénommé "UID".  C'est ce login que nous voudrions voir utiliser comme identifiant par Alfresco.  Est-ce possible ?

Dans ce genre de situation, pour utiliser un attribut de LDAP comme identifiant sans connaître a priori le "DN", certains logiciels font d'abord une recherche anonyme dans LDAP avec l'identifiant souhaité ("UID" ds notre cas) comme filtre.  Il font ensuite l'authentification en faisant un  "bind" avec le dn ainsi trouvé.  Ce scénario est-il envisageable dans Alfresco ?

Question subsidiaire: il y a-t-il une différence à ce sujet avec la version Entreprise ?  Certains messages du forum anglais disent que la connexion ldap ne fonctionne pas dans la version Community, mais je constate que si puisque je parviens à m'indentifier dans Alfresco avec  "employeenumber".  Quid ??

Merci pour toute aide.
Bernard.
6 Replies
unknown-user
Active Member

Re: je teste Alfresco community 1.3.0. Je parviens à...

J'arrive plus ou moins à mes fins grâce à la synchronisation: l'attribut "UID" dans LDAP est comme je le souhaitais utilisé comme nom de login.

A quoi sert dès lors la partie "LDAP authentication configuration" dans le fichier ldap-authentication-context.xml ? 
Elles doivent bien servir à quelque chose puisque j'obtiens un plantage lorsque j'enlève les lignes qui s'y rapportent :
System Error  
javax.faces.FacesException: Error calling action method of component with id loginForm:submit
caused by:
javax.faces.el.EvaluationException: Exception while invoking expression #{LoginBean.login}
caused by:
org.alfresco.error.AlfrescoRuntimeException: Not implemented

Autre chose que je ne comprends pas:  pour l'authentification LDAP je n'ai pas défini un utilisateur ayant des droits spécifiques  pour lire les infos de tous les utilisateurs et groupes (je n'utilise pas l'import des groupes car nos groupes dans LDAP ne sont pas définis dans des noeuds séparés (un DN par groupe) comme Alfresco le souhaite).  Pourtant les attributs des utilisateurs LDAP (email, …) sont importés correctement.

Enfin, IMPOSSIBLE de trouver de sacré fichier xml qui contiendrait l'export des utilisateurs dans LDAP…. pouvez-vs me dire où il se trouve et/ou comment il se nomme ??

Bernard.
unknown-user
Active Member

Re: je teste Alfresco community 1.3.0. Je parviens à...

… quand je dis que j'arrive à mes fins, faut voir …


- le chargement des utilisateurs depuis le LDAP s'arrête après 2000 utilisateurs du à une limitation actuelle de notre serveur LDAP.  Je ne sais pas dès lors tester une identification sur Alfresco car mon login personnel n'est pas dans ces 2000 premiers utilisateurs;

- j'ai finalement trouvé le fichier d'import en xml dans "$CATALINA_HOME/temp/", mais je l'ai trouvé en raison d'erreurs qui ont suivi sa création car si tout se passait bien il aurait du être détruit  automatiquement ;

- maintenant  je constate que qlq secondes après le démarrage suite à  l'importation des utilisateurs j'ai une erreur:
13:44:16,299 ERROR [quartz.core.ErrorLogger] Job (DEFAULT.ldapPeopleJobDetail threw an exception.
org.quartz.SchedulerException: Job threw an unhandled exception. [See nested exception: org.alfresco.repo.importer.ExportSourceImporterException: Failed to import]
        at org.quartz.core.JobRunShell.run(JobRunShell.java:202)
        at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:516)
* Nested Exception (Underlying Cause) —————
org.alfresco.repo.importer.ExportSourceImporterException: Failed to import
        at org.alfresco.repo.importer.ExportSourceImporter.doImport(ExportSourceImporter.java:206)
        at org.alfresco.repo.importer.ImporterJob.execute(ImporterJob.java:36)
        at org.quartz.core.JobRunShell.run(JobRunShell.java:191)
        at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:516)
Caused by: org.alfresco.repo.search.SearcherException: Index has no root node.  Check that the correct index locations are being used.
        at org.alfresco.repo.search.impl.lucene.query.LeafScorer.initialise(LeafScorer.java:224)
        at org.alfresco.repo.search.impl.lucene.query.LeafScorer.<init>(LeafScorer.java:134)
        at org.alfresco.repo.search.impl.lucene.query.PathScorer.createPathScorer(PathScorer.java:159)
        at org.alfresco.repo.search.impl.lucene.query.PathQuery$StructuredFieldWeight.scorer(PathQuery.java:250)
        at org.apache.lucene.search.IndexSearcher.search(IndexSearcher.java:85)
        at org.apache.lucene.search.Hits.getMoreDocs(Hits.java:64)
        at org.apache.lucene.search.Hits.<init>(Hits.java:43)
        at org.apache.lucene.search.Searcher.search(Searcher.java:33)
        at org.apache.lucene.search.Searcher.search(Searcher.java:27)
        at org.alfresco.repo.search.impl.lucene.LuceneSearcherImpl.query(LuceneSearcherImpl.java:254)
        at org.alfresco.repo.search.SearcherComponent.query(SearcherComponent.java:77)
        at org.alfresco.repo.importer.ImporterComponent$NodeImporter.resolveImportedNodeRef(ImporterComponent.java:1007)
        at org.alfresco.repo.importer.ImporterComponent$NodeImporter.end(ImporterComponent.java:730)
        at org.alfresco.repo.importer.ImporterComponent.parserImport(ImporterComponent.java:345)
        at org.alfresco.repo.importer.ImporterComponent.importView(ImporterComponent.java:211)
        at org.alfresco.repo.importer.ExportSourceImporter.doImport(ExportSourceImporter.java:174)
        … 3 more
je ne sois pas de quoi il s'agit, je n'avais pas cette erreur au début de mes tests lors des premiers imports. (nb: je n'importe pas de groupe !

Comment faire en outre pour faire disparaûtre ces utilisateurs dans Alfresco ?  Si j'essaie d'en supprimr un:
13:55:06,887 ERROR [ui.common.Utils] Failed to delete User due to error: Transaction has been rolled back because it has been marked as rollback-only
org.springframework.transaction.UnexpectedRollbackException: Transaction has been rolled back because it has been marked as rollback-only
        at org.springframework.transaction.support.AbstractPlatformTransactionManager.commit(AbstractPlatformTransactionManager.java:465)
        at org.springframework.transaction.interceptor.TransactionAspectSupport.doCommitTransactionAfterReturning(TransactionAspectSupport.java:266)
        at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:106)
        at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:170)
        at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:176)
        at $Proxy14.isCurrentUserTheSystemUser(Unknown Source)
        at org.alfresco.repo.security.permissions.impl.acegi.ACLEntryVoter.vote(ACLEntryVoter.java:189)
        at net.sf.acegisecurity.vote.AffirmativeBased.decide(AffirmativeBased.java:69)
        at net.sf.acegisecurity.intercept.AbstractSecurityInterceptor.beforeInvocation(AbstractSecurityInterceptor.java:394)
        at net.sf.acegisecurity.intercept.method.aopalliance.MethodSecurityInterceptor.invoke(MethodSecurityInterceptor.java:77)
        at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:170)
        at org.alfresco.repo.security.permissions.impl.ExceptionTranslatorMethodInterceptor.invoke(ExceptionTranslatorMethodInterceptor.java:40)
        at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:170)
        at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:96)
        at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:170)
        at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:176)
        at $Proxy40.deletePerson(Unknown Source)
        at org.alfresco.web.bean.users.UsersBean.deleteOK(UsersBean.java:300)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:585)
        at org.apache.myfaces.el.MethodBindingImpl.invoke(MethodBindingImpl.java:129)
        at org.apache.myfaces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:63)
        at javax.faces.component.UICommand.broadcast(UICommand.java:106)
        at javax.faces.component.UIViewRoot._broadcastForPhase(UIViewRoot.java:90)
        at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:164)
        at org.apache.myfaces.lifecycle.LifecycleImpl.invokeApplication(LifecycleImpl.java:316)
        at org.apache.myfaces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:86)
        at javax.faces.webapp.FacesServlet.service(FacesServlet.java:105)
        at org.alfresco.web.app.servlet.AlfrescoFacesServlet.service(AlfrescoFacesServlet.java:49)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
        at org.alfresco.web.app.servlet.AuthenticationFilter.doFilter(AuthenticationFilter.java:73)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
        at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
        at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:178)
        at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:126)
        at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105)
        at org.apache.catalina.valves.FastCommonAccessLogValve.invoke(FastCommonAccessLogValve.java:495)
        at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107)
        at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148)
        at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:869)
        at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:664)
        at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:527)
        at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:80)
        at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:684)
        at java.lang.Thread.run(Thread.java:595)
lme
Partner

Re: je teste Alfresco community 1.3.0. Je parviens à...

Bonjour,

On va essayer de répondre à toutes les questions Smiley Happy

En fait nous ne voulons PAS  utiliser "employeenumber" pour l'identification des utilisateurs car ceux-ci disposent d'un login plus pratique, qui se trouve placé dans un attibut LDAP dénommé "UID".  C'est ce login que nous voudrions voir utiliser comme identifiant par Alfresco.  Est-ce possible ?
Il ne me semble pas que ce soit possible. Alfresco fait ce qu'on appelle un FastBind sur le LDAP (c'est à dire, pas de recherche de DN avant le bind). Dans votre cas, il faudra obligatoirement utiliser employeenumber pour s'authentifier sur alfresco.
Ce comportement doit pouvoir se changer dans Alfresco. Vous avez les sources, il ne vous reste plus qu'à trouver le temps et les compétences Smiley Happy Et si possible redonner le résultat de votre travail à la communauté.

Question subsidiaire: il y a-t-il une différence à ce sujet avec la version Entreprise ?  Certains messages du forum anglais disent que la connexion ldap ne fonctionne pas dans la version Community, mais je constate que si puisque je parviens à m'indentifier dans Alfresco avec  "employeenumber".  Quid ??
La version Entreprise est uniquement une version Community avec le support d'Alfresco (et la correction de quelques bugs, notamment concernant l'authentification en ntlm).

J'arrive plus ou moins à mes fins grâce à la synchronisation: l'attribut "UID" dans LDAP est comme je le souhaitais utilisé comme nom de login.

A quoi sert dès lors la partie "LDAP authentication configuration" dans le fichier ldap-authentication-context.xml ?
Il faut bien dissocier l'authentification via LDAP et la synchronisation des utilisateurs et des groupes via LDAP. Je vous renvoie vers un autre sujet ou j'explique cela un peu plus en détail :
http://forum.alfresco-fr.org/viewtopic.php?pid=1233#p1233

Autre chose que je ne comprends pas:  pour l'authentification LDAP je n'ai pas défini un utilisateur ayant des droits spécifiques  pour lire les infos de tous les utilisateurs et groupes (je n'utilise pas l'import des groupes car nos groupes dans LDAP ne sont pas définis dans des noeuds séparés (un DN par groupe) comme Alfresco le souhaite).  Pourtant les attributs des utilisateurs LDAP (email, …) sont importés correctement.
Alfresco se bind tout simplement en Anonymous sur le serveur LDAP.

- le chargement des utilisateurs depuis le LDAP s'arrête après 2000 utilisateurs du à une limitation actuelle de notre serveur LDAP.  Je ne sais pas dès lors tester une identification sur Alfresco car mon login personnel n'est pas dans ces 2000 premiers utilisateurs;
Si vous utilisez OpenLDAP, je vous renvoie vers cette page du wiki alfresco :
http://wiki.alfresco.com/wiki/Enterprise_Security_and_Authentication_Configuration#Open_LDAP_pointer...

- maintenant  je constate que qlq secondes après le démarrage suite à  l'importation des utilisateurs j'ai une erreur:
Mouais, ça ressemble à un dépôt corrompu. Si vous n'avez pas de données importantes dans Alfresco, je vous invite à repartir d'un dépôt vierge pour continuer vos tests. Pour cela, il faut supprimer le contenu du dossier alf_data et supprimer toutes les tables de la base de données (si vous utilisez mysql).


Laurent
unknown-user
Active Member

Re: je teste Alfresco community 1.3.0. Je parviens à...

On ne peut plus claires comme réponses !  Vous confirmez tout ce que je présentais.
Un tout grand merci LaurentM pour ces éclaircissements, pour le moins nécessaires.

Bernard.
unknown-user
Active Member

Re: je teste Alfresco community 1.3.0. Je parviens à...

quelque chose m'inquiète quand même: là je suis sur un serveur de test et donc, pas de problème pour réinstaller une base Alfresco "propre";
mais quid sur un serveur qui serait en production ??
Qu'aurait-il fallu backuper a minima pour nous retrouver dans une saine situation ? TOUT le répertoire ald_data, dans son intégralité ?
Est-il vraiment nécessaire de supprimer les fichiers de données pour retrouver une situation stable ?

Bernard.
unknown-user
Active Member

Re: je teste Alfresco community 1.3.0. Je parviens à...

cf. solution au problème d'identification LDAP sur base d'un attribut sur
http://forum.alfresco-fr.org/viewtopic.php?id=335

Bernard