[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 ;)