L’idée est simple, la mettre en pratique, un peu moins (en tout cas pour l’instant).

Cet article est destiné à un public de développeurs qui n’est pas forcément à l’aise avec la console d’administration ou tout ce qui relève des possibilités de configuration de Sharepoint…ou à des Sharepointers qui pourront peut-être passer directement à la partie Développement.

 

L’article est scindé en 3 parties :

  1. Accéder à Sharepoint dans une application Silverlight pour Windows Phone 7 (1/3) : Introduction
  2. Accéder à Sharepoint dans une application Silverlight pour Windows Phone 7 (2/3) : Côté Sharepoint
  3. Accéder à Sharepoint dans une application Silverlight pour Windows Phone 7 (3/3) : Côté client Silverlight pour WP7

Cahier des charges

  • J’ai un serveur Sharepoint 2010 existant, avec des utilisateurs référencés dans un Active Directory.
  • Je veux accéder à mes listes Sharepoint à partir d’une application Silverlight pour Windows Phone 7 pour les exploiter
  • Je veux que mes utilisateurs puissent toujours se connecter et travailler comme auparavant sur les données de Sharepoint, c’est à dire que je souhaite conserver le mode d’authentification NTML basé sur l’AD existant
  • c’est tout Sourire

Je suis donc partie d’un contexte de la vraie vie :

  • un serveur Sharepoint 2010 (Foundation) installé sur mon PC Windows 7 x64
  • qui contient des utilisateurs réels (provenant de l’AD de Microsoft), comme mes petits collègues et moi-même qui nous partageons des listes sur mon serveur.

Vous l’aurez compris, si j’en suis à vous parler du mode d’authentification, c’est qu’il ne suffit pas d’utiliser un client OData ou le Client Side Object Model pour accéder à votre Sharepoint depuis Windows Phone 7.

Je me suis librement inspirée du post de Paul Stubbs pour arriver à mes fins. Cette article va un peu plus loin et vulgarise également davantage ce qui touche à la configuration de Sharepoint.

Pourquoi ça coince

Côté Sharepoint :

Mon téléphone n’est pas dans le domaine (puisque je n’y ai pas ouvert de session comme je l’aurais fait sur mon PC)

-> C’est à mon application Silverlight de s’authentifier en renseignant “manuellement” un nom d’utilisateur et un mot de passe.
Pour cela, je vais devoir activer un deuxième mode d’authentification dans ma WebApp : l’authentification par formulaire (Form Based Authentication).

Côté Client Silverlight pour Windows Phone 7: 

  • L’API du Client Object Model n’est pas supportée sur la version de Silverlight pour Windows Phone 7
  • A la date où j’écris ce billet, l’implémentation du Client OData pour Windows Phone 7 ne supporte pas Linq, et les requêtes sont donc à construire à la main sous la forme d’une URI http. Il n’y a donc plus vraiment d’intérêt à utiliser OData pour attaquer notre Sharepoint.
  • Dans le sdk client OData pour Windows Phone 7 on trouve bien une propriété Credentials sur la classe du contexte client, mais elle ne fonctionne pas sur la version 3 de Silverlight pour Windows Phone 7.
-> Il faut trouver une manière de renseigner ces credentials Forms dans notre application :
nous utiliserons le service Web SOAP d’authentification de Sharepoint, en récupérant le cookie et en le réinjectant dans les requêtes au service SOAP de listes, qui seront ainsi reconnues comme authentifiées.

Les étapes pour arriver à nos fins

Côté Sharepoint

  1. Configurer ma WebApp pour qu’elle supporte 2 modes d’authentification :
    • NTLM c’est à dire un mode d’authentification qui utilise les credentials de l’utilisateur authentifié dans la session courante (NetworkCredentials).
      Ainsi
      mon site reste accessible comme auparavant depuis un PC.
    • Forms Based (FBA) qui va me permettre de spécifier un nom d’utilisateur et un mot de passe à l’aide de 2 chaines de caractères (en clair Triste ).
      C’est le mode d’authentification qui sera utilisée par mon application Silverlight pour Windows Phone 7

  2. Pour pouvoir réaliser le point 1. ma WebApp doit utiliser les Claims. Il faut donc faire migrer ma webApp pour  qu’elle supporte les Claims. N’hésitez pas à lire ce post qui explique simplement le fonctionnement des Claims et les mécanismes d’authentification en général dans Sharepoint 2010. 
  3. Configurer le mode d’authentification FBA : utiliser mon AD existant comme un provider d’identité, pour que les credentials passés en mode FBA soient vérifiés dans mon annuaire d’entreprise (comme c’est le cas pour mon authentification NTLM)

On peut résumer cela avec le schéma suivant qui montre les séquences des 2 scenarii d’authentification, selon que l’on se place côté PC ou côté Windows Phone 7:

 jfmuh5z0



Côté Client Silverlight pour Windows Phone 7

  1. Créer une application Windows Phone 7
  2. M’authentifier en tant que membre de l’AD auprès du service SOAP authentication.asmx de mon site Sharepoint
  3. Récupérer le CookieContainer renseigné en retour de la requête d’authentification
  4. Utiliser le service SOAP lists.asmx de mon site Sharepoint, en renseignant ce fameux CookieContainer qui me permettra de m’authentifier à Sharepoint en FBA
  5. Récupérer mes listes et les intégrer dans mon application

Voici la séquence des opérations à réaliser sous forme de schéma:

 cult01bd

Passons aux choses sérieuses

Et commençons par configurer Sharepoint dans la seconde partie de l’article:

Accéder à Sharepoint dans une application Silverlight pour Windows Phone 7 (2/3) : Côté Sharepoint

Accéder à Sharepoint dans une application Silverlight pour Windows Phone 7 (3/3) : Côté client Silverlight pour WP7