[SharePoint] Mettre en place une authentification Windows Live Id
Transcription
[SharePoint] Mettre en place une authentification Windows Live Id
Mettre en place une authentification Windows Live Id sur son site SharePoint By Gael Duhamel (http://gaelduhamel.spaces.live.com) Je vais à travers cet article en deux parties vous montrer comment implémenter les 2 authentifications formulaire (communément appelé fba pour Forms Based Authentication) qui gagnent à être connus car elles peuvent représenter une excellente alternative à la fameuse authentification via SQL : - SharePoint List Membership Provider Windows Live Authentication Membership Provider Pour mettre en place ces 2 authentifications, je vais utiliser la capacité de SharePoint à fournir pour un même contenu plusieurs authentifications possibles (Alternate Access Mapping). Configurer l’Alternate Access Mapping Pour réaliser cet exercice, je vais avoir besoin de 3 url : - Extranet : http://splist.spgael.sharepoint.local pour l’authentification via une liste SharePoint Internet : http://live.spgael.sharepoint.local pour l’authentification via Windows Live Intranet : http://spgael.sharepoint.local pour l’authentification via Windows qui est la base de l’application SharePoint et donc celle définit par défaut. Je ne vais ici monter qu’une seule application puisque pour l’autre, ce sera exactement la même manipulation (à l’exception bien sur du choix de la zone). Pour utiliser l’alternate acces mapping, rendez-vous sur l’administration centrale de SharePoint dans la partie « Application Management ». Cliquez sur « Créer ou étendre une application web » : Cliquez sur « Etendre une application web » : Dans l’écran qui suit, faite bien attention d’avoir sélectionné la bonne application web à étendre : Dans la dernière section, renseignez votre url ainsi que la zone correspondante : Pour le moment, vous pouvez laisser la valeur par défaut pour le provider, nous reviendrons sur cette étape lors de la configuration de nos custom provider. Pour aller plus loin sur l’Alternate access mapping, je vous conseille la lecture de ses articles : - What every SharePoint administrator needs to know about Alternate Access Mappings (Part 1 of 3) What every SharePoint administrator needs to know about Alternate Access Mappings (Part 2 of 3) What every SharePoint administrator needs to know about Alternate Access Mappings (Part 3 of 3) Windows Live Authentication Membership Provider Ce membership provider est disponible sur CodePlex : http://www.codeplex.com/CKS/Release/ProjectReleases.aspx?ReleaseId=7746 Ajout et déploiement de la solution Première étape, ajoutez votre solution ! Pour cela, nous allons utiliser la ligne de commande stsadm avec l’option addsolution. Ouvrez donc une fenêtre shell et tapez : c:\Program Files\Common Files\Microsoft Shared\web server extensions\12\bin\stsadm.exe -o addsolution -filename c:\FBA\Live\CKS.MembershipProvider.WindowsLiveAuthentication.wsp Une fois la solution correctement ajoutée, il nous faut maintenant la déployer. Pour cela, deux solutions, via : - La ligne de commande stsadm et les options deploysolution et Execadmsvcjobs : c:\Program Files\Common Files\Microsoft Shared\web server extensions\12\bin\stsadm.exe -o deploysolution -name CKS.MembershipProvider.WindowsLiveAuthentication.wsp -immediate allowgacdeployment c:\Program Files\Common Files\Microsoft Shared\web server extensions\12\bin\stsadm.exe -o execadmsvcjobs - L’interface web de l’administration centrale de SharePoint : Cliquez sur la solution : Cliquez sur « Deploy Solution » : Ici, vous pouvez choisir le moment pour déployer votre solution et ensuite cliquez sur le bouton « OK » : Vérifiez que votre solution a bien été déployée : Pour ma part, je préfère utiliser l’interface SharePoint car je peux savoir de suite si ma solution a été correctement déployée. Enregistrer votre application Windows Live ID Il vous faut maintenant enregistrer votre application auprès de live.com. Vous devez faire cela afin de récupérer un ApplicationID ainsi que Clé secrète qui vous permettra d’identifier et authentifier vos utilisateurs auprès de Live.com. Rendez-vous donc sur https://msm.live.com/app/default.aspx et cliquez sur Register an application. Remplissez les champs : Attention : Return URL doit se terminer par /_layouts/liveauth-handler.aspx Sur l’écran suivant, notez bien votre ApplicationID, car nous en aurons besoin pour configurer notre provider. Configurer votre provider Pour commencer, nous allons spécifier à notre application web d’utiliser l’authentification via Windows Live ID. Pour cela ouvrez l’administration centrale de SharePoint dans l’onglet « Application Management » et cliquez sur « Authentication Providers ». Sélectionnez la zone (cf. Alternate access mapping) à modifier et n’oubliez pas de vous assurer que l’application web sélectionnée est bien la bonne. Dans la section type d’authentification, sélectionnez « Formulaire » : Dans la partie « Nom du membership provider » et « Nom du rôle manager », entrez ce que vous souhaitez, ces valeurs seront à reporter plus tard dans notre web.config. Notre application web SharePoint est donc configurée pour utiliser l’authentification via Windows Live ID, il nous reste plus qu’à configurer correctement les applications web pour qu’elles reconnaissent notre nouveau provider. Pour cela, nous allons utiliser la ligne de commande stsadm qui a été étendue d’une nouvelle option addwindowsliveauth. Ouvrez donc un shell et tapez : c:\Program Files\Common Files\Microsoft Shared\web server extensions\12\bin\stsadm.exe -o addwindowsliveauth -appid <application id> appkey <application secret key> -appmode <http/https> -profsite <URL du site qui contient la liste des profiles> -proflist <nom de la liste des profiles utilisateurs> -locked <URL pour rediriger les utilisateurs bloqués> -url <URL de l’application web> -member <Nom du membership> -role <Nom du role> Pour éclaircir un peu les paramètres car ce n’est pas vraiment explicite et bien documenté : - appid : Il s’agit de l’application id fournis par Live.com lors de votre enregistrement appkey : Il s’agit de la secret key que vous avez fournis lors de votre enregistrement appmode : Option http ou https. Cela depend si votre site web tourne ou non en https profsite : Url du site hébergeant la liste des utilisateurs ayant accès à votre site (à bien évidement mettre dans une partie sécurisée ;)) proflist : Nom de la liste contenant les utilisateurs ayant accès à votre site. Lors de la première utilisation, la liste sera automatiquement créée. locked : URL ayant un accès anonyme vers laquelle les utilisateurs non enregistrés seront redirigés (prenez par exemple la page AccessDenied.aspx). url : Application web à modifier. En fait, la commande stsadm vient ajouter les lignes nécessaires à votre web.config member : Nom du membership renseigné dans la configuration de votre provider role : Nom du role manager renseigné dans la configuration de votre provider Attention : Il vous faut appliquer cette ligne de commande sur chaque site nécessitant un accès aux utilisateurs WindowsLiveID (Administration centrale de SharePoint comprise) Pour terminer, ouvrez le fichier web.config de votre application web configurée pour recevoir l’authentification Windows Live ID afin de modifier la page de login a ouvrir ainsi que configurer le paramètre membership et role manager par defaut : Avant : <authentication mode="Forms"> <forms loginUrl="/_layouts/login.aspx" /> </authentication> ... <membership> <providers> <add name="WindowsLiveMembership" type="CKS.WindowsLiveAuthentication.LiveMembershipProvider, CKS.WindowsLiveAuthentication, Version=1.0.0.0, Culture=neutral, PublicKeyToken=b5adbad25a892e4a" /> </providers> </membership> <roleManager> <providers> <add name="WindowsLiveRoleManager" type="CKS.WindowsLiveAuthentication.LiveRoleProvider, CKS.WindowsLiveAuthentication, Version=1.0.0.0, Culture=neutral, PublicKeyToken=b5adbad25a892e4a" /> </providers> </roleManager> Après : <authentication mode="Forms"> <forms loginUrl="/_layouts/liveauth-handler.aspx?action=login" /> </authentication> ... <membership defaultProvider="WindowsLiveMembership"> <providers> <add name="WindowsLiveMembership" type="CKS.WindowsLiveAuthentication.LiveMembershipProvider, CKS.WindowsLiveAuthentication, Version=1.0.0.0, Culture=neutral, PublicKeyToken=b5adbad25a892e4a" /> </providers> </membership> <roleManager defaultProvider="WindowsLiveRoleManager" enabled="true" cacheRolesInCookie="true" cookieName="liveroles"> <providers> <add name="WindowsLiveRoleManager" type="CKS.WindowsLiveAuthentication.LiveRoleProvider, CKS.WindowsLiveAuthentication, Version=1.0.0.0, Culture=neutral, PublicKeyToken=b5adbad25a892e4a" /> </providers> </roleManager> Après avoir enregistrée les modifications, faite IISReset. Pour terminer la configuration, il ne nous reste plus qu’a activer la feature de synchronisation (utile si vous avez plusieurs sites fonctionnant avec l’authentification via Windows Live Id). Se connecter et gérer les permissions Dans mon cas, j’ai 2 sites sur une même base SharePoint : - http://spgael.sharepoint.local : Intranet en authentification windows http://live.spgael.sharepoint.local : Internet en authentification Windows Live ID, avec l’accès anonyme autorisé. A noter : J’ai modifié la sécurité des deux listes créées par notre provider pour qu’elle ne soit visible que par l’administrateur. En effet, je n’ai pas envie que les utilisateurs puissent visualiser l’ensemble des informations des membres. Lorsque qu’un utilisateur arrive sur mon site internet, il a donc cette page : Lorsque qu’il clique sur « Se connecter », l’utilisateur est directement envoyé sur l’interface live.com pour s’authentifier. Renseignez votre identifiant Live et cliquez sur le bouton « Sign In » Une fois votre authentification validée sur Live.com, vous êtes rediriges sur le portail et connecte. Une page vous invite à renseigner vos informations personnelles (le projet étant open source, il est extrêmement facile de modifier par la suite ce comportement ou les informations). Remplissez donc les informations et cliquez sur le bouton « OK ». A noter : Sur les screenshots qui suivent, j’ai volontairement barré d’un gros et moche trait noir le Passport Unique Id (PUID) de mon compte live. Vous voila donc maintenant sur le site internet. Retour sur notre application intranet (qui est celle par défaut et que j’utilise pour piloter mon site internet), pour voir ce qu’il y a dans la liste des membres. On peut donc voir que je suis bien enregistré dans la liste des utilisateurs Windows Live du portail. Au passage, vous pouvez remarquer sur la gauche que j’ai 3 listes qui sont invisibles pour le moment en mode anonyme ou connecté sur le site internet). Nous allons maintenant ajouter l’utilisateur au groupe des visiteurs afin qu’il puisse accéder sur le site internet a la liste « Une Liste ». Pour cela, allez sur la page de gestion du groupe visiteur : Vous pouvez maintenant accéder à la liste « Une Liste » : Comme expliqué un peu plus haut, j’ai masqué mon PUID. Pour corriger cela, il vous suffit d’éditer : - le code du blog user profile (BlogUserProfile.cs) comme ci : o Ligne 29 : Remplacer l’accesseur lecture par ceci public string DisplayName { get { if (String.IsNullOrEmpty(strDisplayName)) return strId; else return strDisplayName; } set { strDisplayName = value; } } - le code de votre Membership Provider (LiveMembershipProvider.cs) comme ceci : o Ligne 138 : MembershipUser user = new MembershipUser(ApplicationName, bup.DisplayName /* au lieu de bup.Id */, bup.Id, bup.Email, "", "", bup.Approved, bup.Locked, bup.Created, bup.LastLogin, bup.LastLogin, DateTime.Now, bup.LockedOn); o Ligne 145 : MembershipUser user = new MembershipUser(ApplicationName, bup.DisplayName /* au lieu de bup.Id */, bup.Id, bup.Email, "", "", bup.Approved, bup.Locked, bup.Created, bup.LastLogin, bup.LastLogin, DateTime.Now, bup.LockedOn); o Ligne 201 : col.Add(new MembershipUser user = new MembershipUser(ApplicationName, bup.DisplayName /* au lieu de bup.Id */, bup.Id, bup.Email, "", "", bup.Approved, bup.Locked, bup.Created, bup.LastLogin, bup.LastLogin, DateTime.Now, bup.LockedOn)); o Ligne 219 : col.Add(new MembershipUser user = new o MembershipUser(ApplicationName, bup.DisplayName /* au lieu de bup.Id */, bup.Id, bup.Email, "", "", bup.Approved, bup.Locked, bup.Created, bup.LastLogin, bup.LastLogin, DateTime.Now, bup.LockedOn)); Ligne 232 : col.Add(new MembershipUser user = new MembershipUser(ApplicationName, bup.DisplayName /* au lieu de bup.Id */, bup.Id, bup.Email, "", "", bup.Approved, bup.Locked, bup.Created, bup.LastLogin, bup.LastLogin, DateTime.Now, bup.LockedOn)); Pour cela, n’oubliez pas de vous assurer que le champ « display name » soit bien marqué comme obligatoire dans la page « liveinfo.aspx » <asp:RequiredFieldValidator ControlToValidate="tbDisplayName" runat="server" SetFocusOnError="true" ErrorMessage="Display name is a required field" /> Ainsi que dans la liste « WindowsLiveUserListName », vous pouvez d’ailleurs modifier cela dans la création automatique de la liste sur la commande stsadm personnalisée addwindowsliveauth (fichier WindowsLiveAuthStsAdmCommand.cs) : - Ligne 404 : list.Fields.Add("DisplayName", SPFieldType.Text, true); N’hésitez pas à contribuer à ce projet des plus intéressants en postant vos bugs, évolutions. La communauté ne vie que par et grâce a vous. Je vous rappelle l’adresse : http://www.codeplex.com/CKS/Release/ProjectReleases.aspx?ReleaseId=7746 A vos comptes Live ;)