[WSS] Fournisseurs d’authentification sous Windows SharePoint Service 3.0

Jeudi 7 décembre 2006

Avant de rentrer dans le vif du sujet, je vous rappelle que WSS (Windows Sharepoint Service) version 3.0 est sortie en version RTM depuis le 13 novembre. Vous pouvez le téléchargement librement (à condition d’avoir un Windows authentique!) à cette adresse : http://www.microsoft.com/downloads/…. Vous y trouverez les versions US, FR, et autres.
La procédure d’installation est sensiblement la même que celle que j’avais décrite pour la beta 2 (lire mon post du 20/07) hormis que vous installerez directement le .NET 3.0 étant sortie en RTM à la place des runtimes du Workflow Foundation.
Si vous ne connaissez pas WSS, je vous invite également à lire mon précédent post qui en fait une courte introduction.

Par défaut un site WSS est configuré pour utiliser une authentification de type Windows où chaque compte utilisateur du site est un utilisateur NT (stocké dans la base SAM local ou Active Directory sur un domaine). Pratique dans le cadre d’un portail entreprise ou école mais sur internet cela n’est pas forcement une bonne chose !

Sous WSS vous avez la possibilité de changer le fournisseur d’authentification et donc « facilement » de pouvoir utiliser celui de l’ ASP.NET2 (SqlMembershipProvider/SqlRoleProvider) où les comptes utilisateur seront stockés sur une base SQL ce qui sera plus appréciable pour l’administration.

1/ Préparation de la base
L’instance SQL de WSS (SSEE) n’est exploitable (car verrouillé), il vous faudra donc une autre instante en installant, par exemple, la version Express d’ SQL Server 2005. Une fois opérationnelle, créez une base « MonSiteWSS » ainsi qu’un utilisateur SQL pouvant lire et écrire dans la base.
Enfin utilisez l’utilitaire aspnet_regsql.exe (contenu dans C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727) sur votre base pour préparer les tables ASP.NET

2/ Configuration du Web.config
Editez le fichier Web.config de votre application WSS (C:\Inetpub\wwwroot\wss\VirtualDirectories\xxx) pour y rajouter :

  • La chaine de connexion à votre base. Exemple (à placer dans la balise <configuration>) :
1
2
3
4
<connectionStrings>
    <add name="maConnString"
            connectionString="server=MONSERVER\SQLEXPRESS;database=MonSiteWSS;user id=MonUser;password=MonMotDePasse"            providerName="System.Data.SqlClient" />
</connectionStrings>
  • Le MembershipProvider (dans <system.web>) et RoleProvider :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<membership defaultProvider="monMembershipProvider">
   <providers>
     <add name="monMembershipProvider"
             type="System.Web.Security.SqlMembershipProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
             connectionStringName="maConnString" enablePasswordRetrieval="false" enablePasswordReset="true"             requiresQuestionAndAnswer="false" applicationName="/" requiresUniqueEmail="false" passwordFormat="Hashed"             maxInvalidPasswordAttempts="5" minRequiredPasswordLength="1" minRequiredNonalphanumericCharacters="0"             passwordAttemptWindow="10" passwordStrengthRegularExpression="" />
   </providers>
</membership>
<roleManager enabled="true" defaultProvider="monRoleProvider">
   <providers>
     <add name="monRoleProvider"
             type="System.Web.Security.SqlRoleProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
             connectionStringName="maConnString" applicationName="/" />
   </providers>
</roleManager>

Effectuez aussi ces changements dans le Web.config de l’application central de Sharepoint vous comprendrez plus tard pourquoi (merci TheMit ^^) !!

3/ Gestion des comptes
Le but ici est d’avoir une page (ou un site) d’administration des comptes. Pour cela plusieurs solutions sont viables. Par exemple :

  • En créant un site ASP.NET sous Visual Studio 2005, y rajouter la connection string, membership et role provider dans le web.config. Puis dans le menu « Web Site » cliquer sur « ASP.NET Configuration » pour lancer le site d’administration. Dans l’onglet Security l’on pourra administrer les comptes et les rôles.

  • En créant une simple page ASP.NET que l’on vient placer dans le site WSS (dans un dossier admin par exemple) et qui utilise la classe System.Web.Security.Membership et System.web.Security.roles pour gérer vos comptes. (possibilité d’utiliser la MasterPage de WSS pour votre page histoire d’intégrer à fond votre page d’admin dans votre site WSS).

Une fois que vous avez mis en place un moyen d’administration de vos comptes, créez un 1er compte (nommé Admin par exemple).

4/ Changer le fournisseurs d’authentification de votre site WSS
Le changement est assez simple :

  1. Connectez vous à l’ Administration centrale de SharePoint 3.0 (dans les Outils d’administrations)
  2. Dans l’onglet « Gestion des applications », cliquez sur « Fournisseurs d’authentification ».
  3. Sélectionnez la zone de l’application que vous souhaitez modifié (Zone : Par défaut, Internet, Intranet, …)
  4. Sur la page « Modifier l’authentification », sélectionnez l’authentification de type « Formulaires »
  5. Entrez dans « Nom du fournisseur d’appartenances » le nom de votre Membership Provider (dans notre exemple monMembershipProvider) et dans « Nom du gestionnaire de rôles » le nom de votre Role Provider (ici monRoleProvider).
  6. Puis enregistrez les modifications

Avant de quitter l’administration central, n’oubliez pas de définir votre 1er compte comme « Administrateurs de collections de sites » pour qu’il puisse se connecter ! Pour cela toujours dans l’onglet « Gestion des applications », sélectionnez « Administrateurs de collections de sites » et entrez le nom du compte (ex: Admin). C’est la que les informations (connstring, membership, etc..) ajoutées dans le Web.config du site de l’administration central prend tout son sens sinon l’administration central ne reconnaitra pas votre utilisateur !

En retournant sur votre site, vous verrez une belle page de login

.. avec la possibilité de gérer tous vos comptes online (on peut ensuite créer une page d’inscription, récupération des pwd perdu et tout cela très facilement/rapidement avec les objets ASP.NET2)

Alors pas si compliqué :) Un bon article de Andrew Connell est disponible ici. La procédure est un peu différente et l’article beaucoup plus détaillé. A lire !

Moi je dis, vive WSS :)

[NetFx3] Présentation du Windows Communication Foundation (WCF)

Mercredi 8 novembre 2006

Résumé:
WCF pour Windows Communication Foundation est l’une de quatre nouvelles briques apportées par .NET Framework 3.0. Cette brique unifie le développement des applications distribuées. Cet article présentera les bases de cette plateforme avec un exemple concret d’application en mode de client-service.

Sommaire:

   * Introduction
    * 1 Présentation du WCF
          o    1.1 Présentation
          o    1.2 Installation
    * 2 Fonctionnement et l'ABC du WCF
          o     2.1 Presentation
          o     2.2 Les EndPoints : l'ABC du WCF
    * 3 Développer avec WCF
          o     3.1 Création du service
          o     3.2 Création de l'host (partie serveur)
          o     3.3 Création du client
    * 4 Demo : Développer un mini service d'annuaire
          o     4.1 Création du service MonPremierServiceWCF
          o     4.2 Création de l'host MaPremiereHostWCF
          o     4.3 Création du client MonPremierClientWCF
          o     4.4 Conclusion
    * 5 Aller plus loin dans WCF
          o     5.1 IsOneWay et CallbackContract
          o     5.2 Gestion des sessions
          o     5.3 Gestion de la sécurité
    * Conclusion

Pour ceux qui serait intéressé :

[Atlas] Microsoft ASP.NET AJAX Beta 1

Samedi 21 octobre 2006

Hop la, depuis hier est sortie la version Beta 1 du projet Atlas maintenant renommé en Microsoft ASP.NET AJAX ainsi qu’une nouvelle release du AJAX Control ToolKit avec 3 nouveaux controls (DropDown, MutuallyExlcusiveCheckBox et ValidatorCallout).

Des deux cotés l’on remarque pas mal de gros changements au niveau des proprietes des controls. Déjà le ScriptManager ne propose plus de ErrorMessage. Les Triggers des UpdatePanel ont eux aussi changés. On retrouve deux types de triggers : PostBackTrigger et AsyncPostBackTrigger. Ex:

1
2
<asp:AsyncPostBackTrigger
         ControlID="imgGalerie" EventName="Click" />

Vous remarquez aussi le changement du TagPrefix des controls d‘atlas à asp. De même l’assembly à renommé en Microsoft.Web.Extensions.

Du coté des Controls Toolkits, les proprietes de plusieurs controls sont à mettre directement dans la balise mère et non dans des balises filles du type « …..Details » ou « …Property ». Exemple :

1
2
3
<atlasToolkit:RoundedCornersExtender ID="rcViewer"
                runat="server" Color="White" Radius="6"
                TargetControlID="plViewer" />

Bref, compter de 10min à une bonne heure, en fonction de la taille de votre projet pour migrer votre code pour la beta 1 de ce magifique Framework :)

  • Microsoft ASP.NET AJAX :

http://ajax.asp.net/

  • Microsoft ASP.NET AJAX Beta 1 :

http://www.microsoft.com/downloads/……

  • ASP.NET AJAX Controls ToolKit :

http://ajax.asp.net/ajaxtoolkit/

NDepend : Analysez votre code

Samedi 16 septembre 2006

C’est en lisant le blog de Patrice (encore bon anniversaire à toi au passage ^^) que j’ai découvert l’outil NDepend de Patrick Smacchia.

Pour reprendre la description officielle :

NDepend is a tool for .NET developers and architects. It analyses assemblies and source code of .NET applications and generates reports which contain design quality metrics, warnings and advices and diagrams.

En d’autre terme, c’est un outil d’analyse d’ assembly .NET :)

Vous trouverez 3 executables :

  • NDepend.Console.exe : le moteur d’analyse
  • NDepends.Project.exe : application de gestion des projets NDepend pour configurer les options d’analyse, les assembly à analyser, etc..
  • VisualNDepend.exe : outils de visualisation de l’analyse en mode graphique et d’interrogation de résultat grâce à son langage QCL

Votre assembly sera analysé selon plus d’une 50aines de metriques classés en 6 catégories :

  • Métriques sur l’application
  • Métriques sur les assembly
  • Métriques sur les namespaces
  • Métriques sur les types
  • Métriques sur les champs
  • Métriques sur les methodes

La liste complète et documentations associées : http://www.ndepend.com/Metrics.aspx

A cela est rajouté un langage d’interrogation un peu comme le SQL : le QCL dont les specs sont à l’adresse : http://www.ndepend.com/CQL.htm.
Par exemple, pour afficher la liste des methodes dont le nombre d’instructions IL est supérieur à 200 triée de manière décroissante on passera la requete :

[sql] SELECT METHODS WHERE NbILInstructions > 200 ORDER BY NbILInstructions DESC 

Je l’ai testé et franchement cet outil est vraiment génial et super bien foutu. Il m’est surtout d’une très grande aide pour mon projet SimImmuno II dont le projet a commencé depuis près d’un an ^_^

Alors n’hésitez pas, la beta 2 est gratuite jusque fin Janvier 2007 :)

S’amuser avec MSN et .NET : DotMSN

Mercredi 13 septembre 2006

DotMSN est un projet OpenSource proposé par la socièté Xih Solutions disponnible à l’adresse : http://www.xihsolutions.net/dotmsn/.
DotMSN est une assembly .NET écrite en C# qui implémente la quasi-totalité du protocole MSN dans sa version 9.
Vous pourrez grâce à DotMSN:

  • gérer les connexions à MSN, les status, données personnels et images perso
  • gérer la ContactList (ajout, suppression, bloquer, autoriser)
  • gérer de multiples conversations, les emoticones, texte décoré, etc…
  • interface avec Hotmail (connexion, avertissement des nouveaux mail, etc..)
  • gestion des transferts (fichiers, emoticones, images perso des contacts)

Bref, grâce à DotMSN vous pouvez redevelopper entierement votre propre client MSN. La seule chose à la limite qu’il manque, c’est la gestion du Wizz :)

Toutes les specs de l’assembly sont disponnible à l’adresse: http://www.xihsolutions.net/dotmsn/api
DotMSN contient 3 espaces de nom :

  • XihSolutions.DotMSN : classes de base pour la connexion/deconnexion, conversation, parametres persos, etc…
  • XihSolutions.DotMSN.Core : c’est le moteur, là où se trouve toute l’implémentation du protocole. Nous n’avons pas besoin d’utiliser les classes qu’il renferme.
  • XihSolutions.DotMSN.DataTransfer : toutes les classes en rapport avec le transfert de fichiers, images, emoticones, etc..

Pour démarrer, commencez par instancier la classe Messenger (dans XihSolutions.DotMSN) puis remplir la propriété Credentials avec comme Account et Password votre compte MSN et le ClientID = « msmsgs@msnmsgr.com » et ClientCode = « Q1P7W2E4J9R8U3S5″ pour enfin lancer la méthode Connect

1
2
3
4
5
6
7
Dim msn As New Messenger()
msn.Credentials = New XihSolutions.DotMSN.Credentials()
msn.Credentials.ClientID = "msmsgs@msnmsgr.com"
msn.Credentials.ClientCode = "Q1P7W2E4J9R8U3S5"
msn.Credentials.Account = "VOTRE_COMPTE_MSN"
msn.Credentials.Password = "VOTRE_PWD_MSN"
msn.Connect()

Vous êtes maintenant connecté au service MSN mais pas encore en ligne. Pour cela abonnez-vous à l’évenement SignedIn dans Nameserver de votre objet MSN (AddHandler msn.Nameserver.SignedIn, AddressOf ….). L’évenement sera appellé dès que votre connexion sera effective. En reponse à l’appel de cet evenement, placez le code :

1
2
msn.Owner.Status = PresenceStatus.Online
msn.Owner.Name = "VOTRE_PSEUDO"

Le code aura pour but de définir votre pseudo ainsi que votre status.

La proprièté Owner permet donc de definir votre profil, nom, image perso, status, etc… Vous trouverez aussi la propriété ContactList pour la liste de vos contacts. Exemple pour afficher votre ContactList :

1
2
3
4
For Each c As Contact In session.MSNSession.ContactList.All
     Debug.WriteLine(String.Format("Email: {0} - Status : {1} - Autorisé : {2}", _
              c.Mail, c.Status.ToString(), c.OnAllowedList.ToString())
Next

Il faudra aussi vous abonnez à l’évenement ConversationCreated de la classe Messenger qui averti qu’une nouvelle conversation est crée. Vous recuperez alors l’objet Conversation qui contient la propriété Switchboard pour pouvoir lire les messages, en envoyer, lancer des invitations de transfert de fichiers, etc… A ce titre, dès qu’une conversation est crée, n’oubliez pas aussi de vous abonnez à l’événement Conversation.Switchboard.TextMessageReceived permettant d’être averti de l’arrivée d’un message.

Enfin pour finir, après la connexion du service MSN, oubliez pas non plus de vous abonnez à l’évenement TransferInvitationReceived de l’objet Messenger permettant d’être averti de l’envoi d’une invitation de transfert. Vous pourrez alors l’accepter en mettant True à la propriété Accept de MSNSLPInvitationEventArgs et démarrer le transfert dans TransferSession.StartDataTransfer(False) (False pour un transfert non direct et True pour direct).
Encore une fois, il faudra vous abonnez à l’évenement TransferFinished de la propriété TransferSession pour être averti de la fin du téléchargement.
Pour enregistrer le fichier transferé en dur dans un fichier :

1
2
3
4
5
Dim stream As New FileStream("CHEMIN_DU_FICHIER", FileMode.Create, FileAccess.Write, FileShare.Read)
With CType(transferSession.DataStream, MemoryStream)
      stream.Write(.GetBuffer(), 0, .Position)
      stream.Close()
End With

Voila, vous êtes maintenant paré pour ecrire votre propre client MSN ^_^ Le mieux, pour bien comprendre, est de regarder les specs de l’assembly pour trouver tous les evenements et methodes dont vous aurez besoin. Vous trouverez de toute facon, un client de démo avec les sources fournis en téléchargeant l’assembly DotMSN. Si avez des soucis, n’hesitez pas à me contacter :)