Authentification par formulaire, SharePoint, SSRS et sécurité des données dans SSAS

Introduction à l’authentification par formulaire

L’authentification par formulaire dans SharePoint est basée sur la mécanique ASP.Net Membership Provider. Celle-ci date du .NET Framework 2.0, donc elle bien comprise des développeurs. Il y a aussi plusieurs providers disponibles, dont ceux fournis par Microsoft (ex. SqlAspNetMemberShipProvider).

Les raisons d’utiliser une authentification par formulaire sont variées:

  1. Une authentification propriétaire doit être utilisée. Dans ce cas, il faut développer un Custom Membership Provider.
  2. L’application est déployée sur Internet et l’utilisation de comptes Windows (ex. via un serveur ISA) est exclue.
  3. Plusieurs personnes utilisent un poste Windows sous le même compte et l’application doit les distinguer.

Claims et authentification par formulaire

Dans la version 2010 de SharePoint, Microsoft a ajouté un mode d’authentification Claims pour les applications Web. Le mode classique est toujours disponible mais ne fonctionne qu’avec l’authentification Windows. Cela veut dire que dès que l’on utilise l’authentification par formulaire, il faut configurer l’application Web en Claims.

image

Et il faut cocher l’authentification par formulaire en spécifiant le Membership Provider et le Role Provider:

image

Si vous avez activé plusieurs modes d’authentifications simultanément, les utilisateurs devront choisir la méthode avec laquelle ils souhaitent s’authentifier:

image

Claims et SSRS 2008 R2

Reporting Services 2008 R2 n’est pas Claims-Aware mais peut fonctionner lorsque SharePoint 2010 est configuré pour utiliser les Claims. Vous pouvez consulter ceci et ceci dont voici un extrait:

Because this functionality is built into SharePoint 2010 products, Reporting Services can work with this authentication model. Reporting Services is not claims-aware; instead it communicates with SharePoint through a trusted account. The proxy service within the SQL Server 2008 R2 add-in uses the SharePoint object model to convert the claims token into a corresponding SharePoint user context in the form of a SharePoint user token that the Report Server can understand and use to validate against the SharePoint database.

Par exemple, si l’utilisateur s’authentifie via l’authentification Windows, la variable User!Name contiendra i:0#.w|domain\user.

Claims et SSRS 2012

Pour sa part, Reporting Services 2012 est bel et bien Claims-Aware. Il est intégré comme un SharePoint shared service. Quelques extraits de l’article What’s New (Reporting Services):

The new architecture is implemented as a SharePoint 2010 shared service. The shared service architecture allows Reporting Services to leverage many of the IT features of SharePoint products.

(…)

The new Reporting Services service applications support Claims based authentication.

Claims et SQL Server

Pour sa part, SQL Server (engin relationnel et SSAS) n’est pas Claims-Aware. La seule manière de communiquer avec celui-ci est d’utiliser un compte Windows. Dès lors que SSRS est intégré à un SharePoint configuré en Claims, il faut définir un utilisateur pour exécuter les requêtes:

image

Claims et sécurité des données dans SSAS

SSAS permet de définir des rôles ayant des droits différents sur une base de données. C’est très pratique car cette sécurité est effective peu importe l’outil client utilisé pour se connecter aux données (ex. Excel).

image

Mais si tous les rapports s’exécutent avec le même compte Windows, comment utiliser la sécurité de données?

La réponse passe par l’utilisation de la clé EffectiveUserName dans la chaîne de connexion, qui doit devenir dynamique (et non partagée).

Data Source=Serveur;Initial Catalog=Catalogue;EffectiveUserName=UtilisateurÀUtiliserPourLaSécuritéDeDonnées

image

image

Dans cet exemple, j’ai défini un Dataset pour aller extraire les paramètres de la chaîne de connexion:

image

image

La procédure stockée accepte le nom de l’utilisateur (User!Name) comme paramètre et doit retourner le nom du serveur SSAS, le nom du catalogue SSAS ainsi que le nom de l’utilisateur Windows à impersonifier avec EffectiveUserName.

image

Ce DataSet, sert à alimenter trois paramètres internes:

image

Voici un exemple de ces paramètres:

image

image

Lorsque le rapport SSRS s’exécutera, les 3 premiers paramètres seront résolus en se connectant à SQL Server pour appeler la procédure stockée. Puis la chaîne de connexion dynamique vers SSAS sera résolue et contiendra un EffectiveUserName.

Prérequis pour utiliser EffectiveUserName avec SSAS

Avec ce qu’on a fait dans l’étape précédente, nous aurons le bon compte Windows dans le paramètre EffectiveUserName pour la connexion SSAS. Cependant pour que cela fonctionne il faut que le compte qui exécute la requête SSAS soit administrateur du serveur SSAS:

image

Puis il faut assigner chaque utilisateur pouvant être placé dans EffectiveUserName à un rôle SSAS.

Mais comme on le disait plus haut, lorsque l’authentification par formulaire est utilsée, il faut stoker l’identié du compte de service qui exécutera réellement les requêtes. Dans le cas des connexions vers SSAS, il faudra utiliser un compte de service qui sera dans la liste des administrateurs.

Si vous n’avez qu’une poignée de rapports, ce n’est peut-être pas trop difficile d’aller manuellement entrer ces informations au moyen de l’interface graphique de SharePoint:

image

Mais si les rapports sont mis à jour régulièrement ou que vous en avez plusieurs, cela peut devenir fastidieux.

Automatiser l’affectation des informations  d’identification stockées

Les services Web de Reporting Services vous donnent la possibilité de de spécifier l’utilisateur Windows à utiliser pour vous connecter à SSAS. Vous pourriez facilement développer un programme qui:

  1. Liste tous les rapports d’une librairie de documents SharePoint.
  2. Pour chacun, énumère les sources de données personnalisées (non partagées).
  3. Pour celles-ci, changer leur mode pour stocker l’identité spécifique.
  4. Affecte la liste des connexions modifiées au rapport déployé.

Vous pouvez utiliser le service Web accessible via un hyperlien ressemblant à ceci:

http://WebApplicationUrl/_vti_bin/ReportServer/ReportService2006.asmx

La documentation est ici:

http://technet.microsoft.com/en-us/library/reportservice2006.reportingservice2006(v=sql.105).aspx

La méthode ListChildren, acceptant en paramètre l’Url vers la librairie de documents contenant les rapports, retournera un tableau de CatalogItem.

Il est facile d’itérer sur les CatalogItem de type rapport:

foreach (ReportService2006.CatalogItem pCurItem in apItems.Where(pCI => pCI.Type == ReportService2006.ItemTypeEnum.Report)

Puis la méthode GetItemDataSources permet d’obtenir le tableau de DataSource du rapport. Il peut d’agir d’un DataSourceDefinition ou DataSourceReference.

Il faut donc itérer sur les sources de données personnalisées:

foreach (ReportService2006.DataSource pCurDataSource in apCurDataSources.Where(pDS => pDS.Item is ReportService2006.DataSourceDefinition)

Puis il suffit de modifier la DataSourceDefinition:

ReportService2006.DataSourceDefinition pCurDefinition = (ReportService2006.DataSourceDefinition)pCurDataSource.Item;pCurDefinition.CredentialRetrieval = ReportService2006.CredentialRetrievalEnum.Store;
pCurDefinition.UserName = sUserName;
pCurDefinition.Password = sPassword;
pCurDefinition.WindowsCredentials = true;
pCurDefinition.ImpersonateUser = false;
pCurDefinition.ImpersonateUserSpecified = true;

Puis il faut affecter la liste des connexions modifiées au rapport via la méthode SetItemDataSources.

Références

Working Together: SQL Server 2008 R2 Reporting Services Integration in SharePoint 2010
http://technet.microsoft.com/en-us/magazine/ff686706.aspx

Claims Authentication and Reporting Services
http://technet.microsoft.com/en-us/library/ff487970(v=sql.105).aspx

What’s New (Reporting Services 2012)
http://msdn.microsoft.com/en-us/library/ms170438.aspx#bkmk_sharepoint

Using EffectiveUserName To Impersonate in SSAS
https://www.artisconsulting.com/blogs/greggalloway/Lists/Posts/Post.aspx?ID=18&fwLinkID=301385

2 réflexions sur “Authentification par formulaire, SharePoint, SSRS et sécurité des données dans SSAS

Laisser un commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion / Changer )

Image Twitter

Vous commentez à l'aide de votre compte Twitter. Déconnexion / Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion / Changer )

Photo Google+

Vous commentez à l'aide de votre compte Google+. Déconnexion / Changer )

Connexion à %s