CMIS avec un utilisateur non-admin et auth external

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

CMIS avec un utilisateur non-admin et auth external

Bonjour,

Je cherche à intégrer Typo3 et Alfresco, de façon à afficher sur le portail les documents de l'utilisateur stockés dans Alfresco. C'est un nouveau projet, on utilise la version 4 (mais si vous me dites que notre problème est résolu par une nightly, c'est potentiellement suffisant pour l'instant Smiley Wink ).

Typo3 et Alfresco s'appuient sur le même serveur LDAP, l'authentification fonctionne des deux côtés (avec un mot de passe ou directement en NTLM).
J'ai également configuré Alfresco avec une authentification externe en premier dans la chaine d'authentication, de façon à ce qu'un header X-Alfresco-Remote-User dans la requête HTTP permette d'être directement authentifié. J'ai testé, si je tape directement sur l'interface web d'Alfresco avec ce header défini, ça fonctionne.

Reste à "brancher" Typo3 et Alfresco ensemble, via CMIS.
Pour ça, j'ai installé l'extension atol_cmis de typo3, et l'ai configurée avec le login/mdp de l'admin alfresco (par défaut cette extension est configurée avec un user/mdp statique qu'elle pousse vers les endpoints CMIS Alfresco en utilisant une authentification HTTP Basic via curl). Ça fonctionne. J'ai également essayé avec mon login/mdp LDAP (non défini dans la base locale d'utilisateurs Alfresco), ça fonctionne aussi.

Seulement ce que je voudrais, c'est utiliser le nom de l'utilisateur connecté à Typo3 (et non pas toujours le même, pour que mon visiteur ne voie que ses propres documents, et pas toute l'arborescence). Je ne peux pas stocker le mot de passe de l'utilisateur en session, parce qu'il ne le saisit pas s'il utilise NTLM (la majorité des cas).

J'ai donc patché l'extension pour ne pas faire d'authentification Http-Basic, et envoyer à la place le nom d'utilisateur dans un header X-Alfresco-Remote-User (i.e. utiliser l'authentification 'external'). Le header est bien envoyé (vérifié en capturant le trafic réseau), par contre le moteur CMIS d'Alfresco renvoie un 401 Unauthorized et exige une authentification Basic (i.e. il ignore complètement l'authenticateur external dans la chaine d'authentication Alfresco).

Le connecteur CMIS est-il compatible avec l'authentification external ?
Si oui, quelle configuration faut-il utiliser pour qu'il la prenne en compte ?
Pour l'instant ma config est celle récupérée dans le Wiki, à savoir :
authentication.chain=external1:external,alfrescoNtlm1:alfrescoNtlm,passthru1:passthru,ldap1:ldap-ad
##
external.authentication.enabled=true
external.authentication.defaultAdministratorUserNames=Administrateur
external.authentication.proxyUserName=
##
ntlm.authentication.sso.enabled=false
ntlm.authentication.mapUnknownUserToGuest=false
alfresco.authentication.authenticateCIFS=false
##
passthru.authentication.authenticateCIFS=true
passthru.authentication.domain=MyDOM
passthru.authentication.servers=mydom.fr
passthru.authentication.defaultAdministratorUserNames=Administrateur
##
ldap.authentication.active=false
ldap.synchronization.active=true
ldap.authentication.allowGuestLogin=false
ldap.authentication.userNameFormat=%s@mydom.fr
ldap.authentication.java.naming.provider.url=ldap://mydom.fr:389
ldap.authentication.defaultAdministratorUserNames=Administrateur
ldap.synchronization.groupSearchBase=ou=Groupes,dc=mydom,dc=fr
ldap.synchronization.userSearchBase=ou=Web-Ax-Users,dc=mydom,dc=fr
# Ci-dessous mettre un user/mdp valide pour se connecter à l’AD
ldap.synchronization.java.naming.security.principal=sync@mydom.fr
ldap.synchronization.java.naming.security.credentials=xxxxxxxxxxxxx<mot de passe>

A défaut, j'ai pensé à trois stratégies :
- soit en demandant un filtrage plus précis à Alfresco (il me semble qu'une requête CMIS utilise un langage proche de SQL, du style "select * from cmis:document" ==> je me demande s'il est possible d'y ajouter un truc du style "inner join ACLs on … where ACLs.userName=xxxx" ?). Je ne connais pas assez CMIS pour savoir faire ça, mais si vous m'indiquez une solution je saurai l'implémenter dans l'appel depuis Typo3.
- soit en récupérant les ACLs des documents lus depuis Alfresco, et en n'affichant que ceux qui ont une permission cms:read pour l'utilisateur connecté (la solution à défaut de tout le reste, mais cela suppose qu'Alfresco va renvoyer beaucoup plus de document que ceux affichés au final, donc j'aimerais éviter)
- patcher Alfresco pour que ça fonctionne (mais je ne connais pas du tout le code d'Alfresco, ni CMIS).

Qu'en pensez-vous ?
Existe-t-il une solution qui fonctionne "out of the box" (i.e. sans trop de développement) pour coupler CMIS et auth external ?

Merci
3 Replies
dadou
Member II

Re: CMIS avec un utilisateur non-admin et auth external

Bonjour,tu a dit que tu a également configuré Alfresco avec une authentification externe en premier dans la chaine d'authentication, de façon à ce qu'un header X-Alfresco-Remote-User dans la requête HTTP permette d'être directement authentifié. J'ai testé, si je tape directement sur l'interface web d'Alfresco avec ce header défini, ça fonctionne.
SVP pouvez vous me dire comment tu a configuré alfresco avec authentification NTLM?parce que j'ai installé drupal et alfresco et j'ai  un lien qui exige l'authentification au alfresco je veux que les utilisateurs soient redirigé au back du alfresco sans entrer login/password.Merci bcq
lbndev
Member II

Re: CMIS avec un utilisateur non-admin et auth external

SVP pouvez vous me dire comment tu a configuré alfresco avec authentification NTLM?parce que j'ai installé drupal et alfresco et j'ai  un lien qui exige l'authentification au alfresco je veux que les utilisateurs soient redirigé au back du alfresco sans entrer login/password.Merci bcq
Bonjour Dadou,

Soit tu tapes directement sur Alfresco et il s’occupe de NTLM (cf conf ci-dessus), soit tu passes par un frontal (moi Typo3, toi Drupal) : dans ce cas c'est au frontal de gérer NTLM et de passer l'identifiant de l'utilisateur à Alfresco ensuite (avec external). A partir de là, je te renvoie à la doc de Drupal et son intégration avec Apache (libapache2-authenntlm-perl est ton ami).

Comme ton post ne répond pas à ma question mais en pose une autre, je t'invite à créer un autre sujet si tu veux une réponse plus détaillée.

Sinon, quelqu'un pour mon problème ?

(En guise de workaround, pour info, nous avons une solution qui se connecte en admin, récupère les ACL via CMIS et fait le filtrage côté TYPO3, mais cela génère pas mal de traffic)
koi29doc
Member II

Re: CMIS avec un utilisateur non-admin et auth external

Bonjour,

j'ai également le même problème, j'utilise uniquement une authentication external (SSO) et cela ne fonctionne pas avec CMIS…
De plus je n'ai trouvé aucune réponse sur le net concernant ce problème ou le moyen de le contourner