Monter un partage Sharepoint Office365 sur Linux (Webdav/Davfs)

Dans le cadre de mon travail, je développe une application web (nommée Tools) qui fait office de boite à outils pour le groupe Zenitude. L'idée de l'application est de fournir un ensemble d'outils pour faciliter le travail de mes collaborateurs.

Parmi la flopée de fonctionnalités, on trouve des interfaces qui affichent des données récupérées depuis des fichiers Excel. Elles sont analysées et mises en page par l'application (graphiques et tableaux).

Ces fichiers sont initialement déposés sur un espace collaboratif Sharepoint délivré par Office365. J'avais pour objectif de travailler avec les API de Microsoft mais c'est un véritable calvère. C'est mal documenté et le support technique de premier niveau est complètement naze. Du coup, je me suis résolu à faire des formulaires pour déposer les fichiers manuellement.

Pour éviter d'avoir des formulaires d'upload de fichier, je souhaite monter le partage Sharepoint sur le serveur afin d'accéder, en quasi temps réel, au contenu des fichiers qui m'intéressent. Microsoft fournit OneDrive qui est un outil de synchronisation pour monter le partage Sharepoint sur son ordinateur mais seul Microsoft Windows et IOS sont supportés. Il s'appuie sur le protocole WebDAV mais authentifie les utilisateurs avec le protocole OAuth2.

Sous Linux, davfs2 permet de faire des montages WebDAV dans son système de fichiers. La problématique d'authentification via OAuth2 est réelle car impossible de passer un couple login/mot de passe classique. Une solution existe et consiste à récupérer des cookies générés après l'authentification OAuth2 via un navigateur et indiquer à davfs2 de les injecter dans les requêtes HTTP WebDAV.

Pour des questions de sécurité, j'ai ajouté à l'organisation Office365 un compte utilisateur qui, par défaut, ne peut lire que les fichiers du partage. Lorsque que je me connecte à Office365 via un navigateur web en utilisant ce compte, 2 cookies sont créés : rtFa et FedAuth. Il faut conserver leur valeur respective car nous en auront besoin pour configurer le montage.

On va installer le driver davfs2 pour réaliser le montage :

# aptitude install davfs2

Je décide que le point de montage sera dans /mnt/sharepoint. Dans /etc/davfs2/davfs2.conf, on indique à davfs2 d'ajouter les cookies. Il faut bien évidement remplacer XXXXXX et YYYYYY par ce que vous avez récupéré :

[/mnt/sharepoint/]
ask_auth 0
add_header Cookie rtFa=XXXXXX;FedAuth=YYYYYY

Il reste maintenant à faire le montage :

# mount.davfs -o ro "https://foo.sharepoint.com/bar/Documents partages" /mnt/sharepoint

Si tout se passe bien, vous devrier avoir le montage fonctionnel. Ça ne sera pas détaillé ici mais vous pouvez maintenant affiner la configuration, faire du cache sur les fichiers, gérer les permissions plus finement, passer par /etc/fstab pour automatiser le montage, etc.

Sharepoint Office365 sur Linux : automatiser l'authentification (v2)

Sharepoint Office365 sur Linux : automatiser l'authentification (v2)

En septembre 2018, je publiais un article pour automatiser l'authentification sur Sharepoint…

Sharepoint Office365 sur Linux : automatiser l'authentification

Sharepoint Office365 sur Linux : automatiser l'authentification

Suite de l'aventure avec Sharepoint ! On a pu passer 2 étapes cruciales pour jouer avec Sha…

Sharepoint Office365 sur Linux (Webdav/Davfs) avec des fichiers accentués

Sharepoint Office365 sur Linux (Webdav/Davfs) avec des fichiers accentués

Suite de l'aventure avec Sharepoint ! Je me suis rendu compte que les répertoires et les fi…


  • Sytoka
  • A t-on le moyen de le faire sans être root (édition sous /etc avec cette solution) et comment tu automatises puisqu'il faut récupérer les cookies or je soupçonne que leur valeurs varient dans le temps ?
  • Simon
  • À priori, tu peux ajouter ton utilisateur au groupe `davfs2` ce qui doit lui permettre de faire des montages du type. Le fichier de config dans `/etc/` est par défaut accessible par tout le monde. DavFS charge aussi le fichier charge également le fichier `~/.davfs2/davfs2.conf` s'il existe.

    Je n'ai pas automatisé la récupération des cookies et je ne sais pas encore s'ils vont périmer ou pas.
  • Simon
  • Je confirme que la durée de vie des cookies est courte. Je vais travailler sur une solution pour automatiser la récupération de ces cookies.
  • Thomas
  • Bonjour, j'ai suivi votre tutoriel et ça fonctionne très bien. J'ai juste un endroit où j'ai des changements. Quand je montage un partage SharePoint office 365 vers une machine Linux, cela fonctionne mais mes cookies je croient change. Ce qui fait que le partage existe toujours mais si je fais une modification, elle n'est pas prise en compte car les cookies ont expirés. Comment pourraient on faire pour que cela ne change pas. J'ai vu dans les post précédent que vous parliez d'automatiser pour la récupération des cookies mais comment pouvons nous mettre ça en place?

    Merci

  • Thomas
  • Bonjour Simon, Merci pour votre retour. le Tuto est très bien réalisé. Les valeurs (rtfa et fedauth) que l'on doit injecter dans le fichier de conf davfs, s'injectent elle manuellement ou automatiquement dans la conf? je crois que le rtfa change souvent. y'a t'il un moyen que cela s'injecte automatiquement a chaque cron quotidien pour éviter que j'injecte les valeurs dans le fichier de conf de façon manuelle?

  • Simon
  • Le script se content de récupérer le contenu des 2 cookies. C'est à toi de faire un outil intermédiaire qui les injecte dans ta configuration. Personnellement, je traite le json avec jq et j'ai un fichier "template" de davfs.conf que je copie dans /etc/davfs.conf et que je modifie avec sed

  • Alex
  • Salut,

    Merci pour ton article.

    Je suis presta chez un client, ma boite de presta utilise un sharepoint que j'aurais aimé monter quelquepart en local.

    Evidement je n'ai pas de droit root.

    J'ai téléchargé et compilé davfs, je bloque à l'étape "Lorsque que je me connecte à Office365 via un navigateur web en utilisant ce compte, 2 cookies sont créés : rtFa et FedAuth." Comment peut on récupérer les différents cookies? dans Firefox je n'ai accès qu'a la liste des sites qui ont inscrit des cookies sur le disque, pas au détails de ceux-ci et encore moins leur valeur...

    Y a t'il une astuce?

  • Simon
  • Bonjour,

    Vous pouvez les récupérer avec la console de debug : https://upload.deblan.org/r.php/u/2019-07/5d2dfcfe.png?q=auto

    • Aller sur le site Sharepoint
    • Se connecter
    • Une fois la page d'accueil Sharepoint ouverte, ouvrez la console avec F12
    • Cliquez sur l'onglet Réseau puis sélectionnez HTML
    • Rafraîchissez la page et vous verrez la requête HTTP pour la page d'accueil
    • Cliquez dessus et un panneau va s'afficher pour voir tous les détails dont les cookies depuis l'onglet Cookies
  • Thomas
  • Bonjour Simon, Merci pour votre retour. le Tuto est très bien réalisé. Les valeurs (rtfa et fedauth) que l'on doit injecter dans le fichier de conf davfs, s'injectent elle manuellement ou automatiquement dans la conf? je crois que le rtfa change souvent. y'a t'il un moyen que cela s'injecte automatiquement a chaque cron quotidien pour éviter que j'injecte les valeurs dans le fichier de conf de façon manuelle?

Ajouter un commentaire

Votre commentaire - Vous pouvez utiliser du markdown

Renouveler