novembre
2011
Ces temps ci, SharePoint semble m’attaquer de toutes (web)parts !
Et ce n’est pas sans plaisir (maso :p )
Je bosse actuellement sur un portail se services internet construit sur SharePoint 2010 (entre autre) + FBA (Forms Based Auth) monté sur un AD LDS (Active Directory LightWeight Directory Services) == un (bon) LDAP à la sauce MS.
Une des fonctionnalités d’un portail est l’espace perso. Or la page d’authentification de SharePoint est … point esthétique (moche quoi).
De plus, comme tout bon portail qui se respecte, l’authentification doit pouvoir se réaliser via une petite boite (login + mdp) située sur le bord de l’écran.
Donc, dev spécifique d’un WebPart qui affiche :
– Label + input text pour le login
– Label + input pwd pour le mot de passe
– link label pour validation et postback
– link pour lien vers la page de création de compte
– link pour lien vers la page de réinitialisation de mot de passe
Deux contraintes fortes donc :
– Appel des couches d’authentification Claims de SharePoint (pas trivial)
– Paramétrage des liens des pages de création de compte et de réinitialisation de compte et ce, tout en tenant compte du fait que ces liens ne sont accessibles QU’EN mode anonyme (adieu la customisation Shared => ne fonctionne pas en anonyme)
Je ne vais pas décrire comment réaliser un webpart 2010, mais plutôt les solutions mises en places face à ces deux contraintes.
Donc une fois la WebPart créée, ascx construit, link validation et postback + méthode code behind C# en place, voici la solution :
Authentification Claims
-
Référencer la dll non « visible » du GAC, son chemin :
C:\Windows\assembly\GAC_MSIL\Microsoft.SharePoint.IdentityModel\
14.0.0.0__71e9bce111e9429c\Microsoft.SharePoint.IdentityModel.dlPour rappel : Mnu Ctx sur le projet > add reference > Coller le chemin nommé ci dessus dans la boite de dialogue et valider (après l’avoir remis sur une ligne dans notepad :p ).
-
Dans la méthode code behind mappée au link de validation, ajouter l’appel suivant :
-> SPClaimsUtility.AuthenticateFormsUser(this.Page.Request.Url, this.TbxUserName.Text.Trim(), this.TbxPwd.Text.Trim());-> SPUtility.Redirect(this.Page.Request.Url.ToString(), SPRedirectFlags.Default, this.Context);
La redirrection vers la page courante est indispensable pour permettre au moteur d’ajouter le jeton et de rafraichir la page en mode connecté (adapte les composants affichés en fonction des droits de l’utilisateur).
Paramétrage des liens
Pour permettre au WebPart d’utiliser un paramétrage en mode anonyme, je suis passé par les Propriétés de l’objet SPSite (collection de site), via une facade (pattern), histoire de coupler faiblement les choses. Le tout géré dans un EditorPart maison.
- EditorPart : Ce composant permet de personnaliser les panneaux de configuration de webPart. Ici, je m’en sers pour afficher et gérer l’enregistrement des paramètres dans les propriétés de la collection de site.
1) Création d’une classe héritant de EditorPart
2) override de EditorPart.ApplyChanges() -> appelé lorsque l’administrateur valide les settings
Le code enregistre les modification apportées dans les propriétés du SPSite (cf point suivant)
3) override de EditorPart.SyncChanges() -> appelé lorsque l’administrateur ouvre le panel de settings du webpart.
Le code récupère et place dans les controles adhoc les settings contenus dans le SPSite (cf point suivant).
4) Modif de la classe qui hérite de WebPart, override de WebPart.CreateEditorParts() qui retourne les EditorPanel propre aux finesses du WebPart (retourne mon EditorPanel maison). - Pour utiliser les propriétés de la collection de site :
1) Récupérer le SPSite concerné (le root pour moi) : En C# : SPContext.Current.Site.RootWeb
2) Affecter une propriété : En C# :
SPContext.Current.Site.RootWeb.Properties[« NomDeLaPropriete »] = « valeur »;
SPContext.Current.Site.RootWeb.Properties.Update(); // NE PAS OUBLIER3) Récupérer la propriété : en C# :
var maVal = SPContext.Current.Site.RootWeb.Properties[« NomDeLaPropriete »];
Et me voilà avec un webPart de connexion, permettant le paramétrage des liens de création de compte et de réinitialisation de mot de passe
Liens intéressants :
Comment créer une page d’authentification maison + comment fonctionne l’authentification SharePoint (différente de celle ASP.net classique -> Jeton de sécurité différent)
http://blogs.msdn.com/b/kaevans/archive/2010/07/09/creating-a-custom-login-page-for-sharepoint-2010.aspx
6 moyens de sauvegarder des Settings :
http://www.wictorwilen.se/Post/Six-ways-to-store-settings-in-SharePoint.aspx
Livre de Ted Pattison : http://shop.oreilly.com/product/9780735627468.do