Partager via


Procédure pas à pas : utilisation d’un découpage de sécurité personnalisé pour les résultats de la recherche SharePoint Server

Dernière modification : mercredi 7 décembre 2011

S’applique à : SharePoint Server 2010

Dans cet article
Conditions requises
Étape 1 : créer le découpage de sécurité personnalisé
Étape 2 : inscrire le découpage de sécurité personnalisé
Étape 3 (facultative) : spécifier une limite configurable sur le nombre d’URL d’analyse vérifiées

Recherche Microsoft SharePoint Server 2010 effectue un découpage de sécurité temps-requête des résultats de recherche. Toutefois, dans certains scénarios vous pouvez être amené à effectuer un découpage de sécurité personnalisé. Recherche SharePoint Server prend en charge ces scénarios par le biais de l’interface ISecurityTrimmer2 dans l’espace de noms Microsoft.Office.Server.Search.Query.

En implémentant cette interface, vous pouvez créer un composant pour effectuer un découpage de sécurité personnalisé des résultats de recherche avant qu’ils ne soient envoyés à l’utilisateur. Le processus d’inscription du découpage de sécurité vous permet de spécifier les propriétés de configuration du découpage.

Cette procédure pas à pas vous guide à travers les étapes d’implémentation (créer, déployer et inscrire) d’un découpage de sécurité personnalisé de base pour Recherche SharePoint Server à l’aide de Microsoft Visual Studio 2010. Il inclut également une étape facultative qui vous montre comment implémenter une limite configurable sur le nombre d’éléments de contenu vérifiés par le découpage.

  • Conditions requises

  • Étape 1 : créer le découpage de sécurité personnalisé

  • Étape 2 : inscrire le découpage de sécurité personnalisé

  • Étape 3 (facultative) : spécifier une limite configurable sur le nombre d’URL d’analyse vérifiées

Conditions requises

Pour effectuer cette procédure pas à pas, les éléments suivants doivent être installés dans votre environnement de développement :

  • Microsoft SharePoint Server 2010

  • Microsoft Visual Studio 2010 ou un outil de développement similaire compatible avec Microsoft .NET Framework

Étape 1 : créer le découpage de sécurité personnalisé

La création du découpage de sécurité personnalisé inclut les tâches suivantes :

  • Configuration du projet de découpage de sécurité personnalisé

  • Écriture du code du découpage de sécurité personnalisé

  • Déploiement du projet de découpage de sécurité personnalisé

  • Exemple

Configuration du projet de découpage de sécurité personnalisé

Dans cette étape, vous allez créer le projet de découpage de sécurité personnalisé, puis ajouter les références requises et le fichier de classe du découpage de sécurité personnalisée au projet.

Pour créer le projet de découpage de sécurité personnalisé

  1. Dans Visual Studio, dans le menu Fichier, pointez sur Nouveau, puis cliquez sur Projet.

  2. Dans Types de projets, sous C#, sélectionnez SharePoint.

  3. Sous Modèles, sélectionnez Projet SharePoint vide. Dans le champ Nom, tapez CustomSecurityTrimmerSample, puis cliquez sur OK.

  4. Dans l’Assistant de personnalisation SharePoint, choisissez Déployer en tant que solution de batterie de serveurs, puis cliquez sur Terminer.

Pour ajouter des références au projet de découpage de sécurité personnalisé

  1. Dans le menu Projet, cliquez sur Ajouter une référence.

  2. Sous l’onglet .NET, sélectionnez les références avec les noms de composants suivants, puis cliquez sur OK :

    • Composant Microsoft Search

      Vous devriez voir deux entrées sous l’onglet .NET avec le nom de composant Microsoft Search. Sélectionnez l’entrée où la colonne Chemin d’accès contient \ISAPI\Microsoft.Office.Server.Search.dll. Si cette entrée est manquante sous l’onglet .NET de la boîte de dialogue Ajouter des références, vous devez ajouter la référence à partir de l’onglet Parcourir en utilisant le chemin d’accès vers Microsoft.Office.Server.Search.dll.

    • Microsoft.IdentityModel

      Si Microsoft.IdentityModel n’est pas répertorié sous l’onglet .NET, vous devez ajouter la référence à Microsoft.IdentityModel.dll à partir de l’onglet Parcourir, en utilisant le chemin d’accès :

      %ProgramFiles%\Reference Assemblies\Microsoft\Windows Identity Foundation\v3.5.

Pour créer le fichier de classe du découpage de sécurité

  1. Dans le menu Projet, cliquez sur Ajouter un nouvel élément.

  2. Sous Éléments Visual C#, dans Modèles installés, cliquez sur Code, puis sur Classe.

  3. Tapez CustomSecurityTrimmer.cs, puis cliquez sur Ajouter.

Écriture du code du découpage de sécurité personnalisé

Votre découpage de sécurité personnalisé doit implémenter l’interface ISecurityTrimmer2. L’exemple de code de cette section est une implémentation de base de cette interface.

Pour modifier le code par défaut dans CustomSecurityTrimmer

  1. Ajoutez les directives using suivantes au début de la classe :

    using System;
    using System.Collections.Generic;
    using Microsoft.Office.Server.Search.Query;
    using Microsoft.Office.Server.Search.Administration;
    using System.Collections;
    using System.Collections.Specialized;
    using System.Security.Principal;
    
  2. Spécifiez que la classe CustomSecurityTrimmer implémente l’interface ISecurityTrimmer2 dans la déclaration de classe, comme suit.

    public class CustomSecurityTrimmer : ISecurityTrimmer2
    

Vous êtes maintenant prêt à écrire le code pour implémenter les méthodes d’interface ISecurityTrimmer2.

Pour implémenter les méthodes d’interface ISecurityTrimmer2

  1. Ajoutez le code suivant pour la déclaration de méthode Initialize().

    public void Initialize(NameValueCollection staticProperties, SearchServiceApplication searchApplication)
    {
    
    }
    

    La version de base de cet exemple n’inclut pas de code dans la méthode Initialize. La méthode Initialize à l’Étape 3 (facultative) : spécifier une limite configurable sur le nombre d’URL d’analyse vérifiées contient un exemple d’implémentation.

    Pour plus d’informations sur l’implémentation de la méthode Initialize, voir Écriture d’un découpage de sécurité personnalisé pour SharePoint Server Search.

  2. Ajoutez le code suivant pour la déclaration de méthode CheckAccess().

    public BitArray CheckAccess(IList<String> documentCrawlUrls, IDictionary<String, Object> sessionProperties, IIdentity passedUserIdentity)
    {
    //CheckAccess method implementation, see steps 3-5.
    }
    
  3. Pour la première partie de l’implémentation de la méthode CheckAccess, déclarez et initialisez une variable BitArray pour stocker les résultats de la vérification d’accès pour chaque URL dans la collection crawlURLs, puis extrayez l’utilisateur qui a soumis la requête, comme suit.

    BitArray retArray = new BitArray(documentCrawlUrls.Count);
    //Use passedUserIdentity to get the identity of the user who issued the query.
    //IClaimsIdentity claimsIdentity = (IClaimsIdentity)passedUserIdentity;
    //IClaimsIdentity is defined in Microsoft.IdentityModel.Claims;
    
  4. Exécutez une boucle sur chaque URL d’analyse dans la collection, puis effectuez la vérification d’accès pour déterminer si l’utilisateur qui a soumis la requête peut accéder à l’élément de contenu associé à l’URL d’analyse.

    Si l’utilisateur a accès à l’élément de contenu, définissez la valeur de l’élément BitArray de cet index, retArray[x], à true; sinon, affectez-lui la valeur false, comme suit.

    for (int x = 0; x < documentCrawlUrls.Count; x++)
    {
        /*
          To fully implement the security trimmer, add code to perform 
          the security check and determine if the user can access documentCrawlUrls[x]. 
          If the user can access documentCrawlUrls[x], then:
        */
    
            retArray[x] = true;
        //If not:
            retArray[x] = false;
    }
    
  5. Définissez la valeur de retour de la méthode CheckAccess à retArray, comme suit.

    return retArray;
    

Déploiement du projet de découpage de sécurité personnalisé

Le processus de déploiement effectue les opérations suivantes :

  • Génère la bibliothèque CustomSecurityTrimmerSample.dll et la déploie dans le global assembly cache

  • Recycle les services IIS (Internet Information Services)

Pour déployer le projet de découpage de sécurité personnalisé

  1. Dans le menu Générer, cliquez sur Déployer la solution.

  2. Si vous apportez des modifications au projet, sélectionnez à nouveau Déployer la solution pour retirer automatiquement la version précédente de la solution et la remplacer par la nouvelle version.

Exemple

Voici l’exemple de code complet pour la classe CustomSecurityTrimmerSample décrite dans cette étape.

using System;
using System.Collections.Generic;
using Microsoft.IdentityModel;
using Microsoft.IdentityModel.Claims;
using Microsoft.Office.Server.Search.Query;
using Microsoft.Office.Server.Search.Administration;
using System.Collections;
using System.Collections.Specialized;
using System.Security.Principal;

namespace CustomSecurityTrimmerSample
{
    class CustomSecurityTrimmer : ISecurityTrimmer2
    {
        public void Initialize(NameValueCollection staticProperties, SearchServiceApplication searchApplication)
        {
        }

        public BitArray CheckAccess(IList<String> documentCrawlUrls, IDictionary<String, Object> sessionProperties, IIdentity passedUserIdentity)
        {
            BitArray retArray = new BitArray(documentCrawlUrls.Count);
            //Use passedUserIdentity to get the identity of the user who issued the query.
            //IClaimsIdentity claimsIdentity = (IClaimsIdentity)passedUserIdentity;
           //IClaimsIdentity is defined in Microsoft.IdentityModel.Claims;
            for (int x = 0; x < documentCrawlUrls.Count; x++)
            {
              /*
                To fully implement the security trimmer,
                add code to perform the security check 
                and determine if userIdentity can access documentCrawlUrls[x].
                If userIdentity can access documentCrawlUrls[x], then:
               */
                retArray[x] = true;
              //If not:
                retArray[x] = false;
            }
            return retArray;
        }
    }
}

Étape 2 : inscrire le découpage de sécurité personnalisé

L’étape 2 décrit la configuration du découpage de sécurité personnalisé et comprend les tâches suivantes :

  • Création de la règle d’analyse du découpage de sécurité personnalisé

  • Inscription du découpage de sécurité personnalisé pour l’Application de service de recherche et nouvelle analyse de la source de contenu

Création d’une règle d’analyse pour le découpage de sécurité personnalisé

Avant d’inscrire le découpage de sécurité personnalisé, vous devez créer la règle d’analyse du contenu auquel il s’applique.

Pour créer la règle d’analyse

  1. Ouvrez l’Administration centrale de SharePoint 2010, puis accédez à la page Gestion des applications.

  2. Dans la section Applications de service de la page Gestion des applications, cliquez sur Gérer les applications de service.

  3. Cliquez sur Application de service de recherche.

  4. Pour ouvrir la page Gérer les règles d’analyse, cliquez sur Règles d’analyse dans la section Analyse.

  5. Cliquez sur Nouvelle règle d’analyse, puis pour Chemin d’accès, tapez file://FileServer1/* en remplaçant FileServer1 par le chemin d’accès au contenu à analyser.

  6. Dans la section Configuration de l’analyse, sélectionnez Inclure tous les éléments de ce chemin d’accès, puis cliquez sur OK pour créer la règle d’analyse.

Inscription du découpage de sécurité personnalisé et nouvelle analyse de la source de contenu

Utilisez SharePoint 2010 Management Shell pour inscrire un découpage de sécurité personnalisé. La procédure suivante montre comment inscrire un découpage de sécurité personnalisé, avec l’ID défini sur 1 pour l’Application de service de recherche, qui s’applique au contenu situé sur des partages de fichiers pour un serveur appelé FileServer1.

Pour inscrire le découpage de sécurité personnalisé

  1. Dans l’Explorateur Windows, recherchez le fichier CustomSecurityTrimmerSample.dll dans le chemin d’accès <Local_Drive>:\WINDOWS\assembly.

  2. Cliquez avec le bouton droit sur le fichier, puis cliquez sur Propriétés.

  3. Sous l’onglet Général de la boîte de dialogue Propriétés, sélectionnez le jeton et copiez-le.

  4. Ouvrez SharePoint 2010 Management Shell. Pour plus d’informations sur l’utilisation de cet outil, voir Administration des applications de service à l’aide de SharePoint 2010 Management Shell.

  5. À l’invite de commandes, tapez la commande suivante :

    New-SPEnterpriseSearchSecurityTrimmer -SearchApplication "Search Service Application" 
    -typeName "CustomSecurityTrimmerSample.CustomSecurityTrimmer, CustomSecurityTrimmerSample, 
    Version=1.0.0.0, Culture=neutral, PublicKeyToken=token" -RulePath file://FileServer1/* -id 1
    

    Dans la commande, remplacez token par le jeton de clé publique du fichier CustomSecurityTrimmerSample.dll, et FileServer1 par le nom du serveur du partage de fichiers.

    Important

    Si vous avez plusieurs serveurs Web frontaux, vous devez déployer votre découpage de sécurité sur le global assembly cache sur tous les serveurs Web frontaux de la batterie de serveurs.

  6. Lancez une analyse complète de la source de contenu, comme décrit dans la procédure suivante.

    Pour lancer une analyse complète de la source de contenu

    1. Ouvrez l’Administration centrale de SharePoint 2010, puis accédez à la page Gestion des applications.

    2. Dans la section Applications de service de la page Gestion des applications, cliquez sur Gérer les applications de service.

    3. Cliquez sur Application de service de recherche.

    4. Pour ouvrir la page Gérer les sources de contenu, cliquez sur Sources de contenu dans la section Analyse.

    5. Pour la source de contenu qui représente le contenu affecté par la règle d’analyse du découpage de sécurité, cliquez sur la flèche à côté du menu Édition. Dans le menu, sélectionnez Démarrer l’analyse complète. Si la source de contenu n’est pas répertoriée dans la page Gérer les sources de contenu, vous devez la créer.

      Pour créer la source de contenu

      1. Cliquez sur Nouvelle source de contenu, puis, dans la zone Nom, tapez le nom de la source de contenu.

      2. Dans la zone Type de source de contenu, sélectionnez Partages de fichiers.

      3. Dans la zone Adresses de démarrage, tapez file://FileServer1/*.

      4. Sélectionnez Démarrer l’analyse complète de cette source de contenu, puis cliquez sur OK pour ajouter la source de contenu.

Étape 3 (facultative) : spécifier une limite configurable sur le nombre d’URL d’analyse vérifiées

Lorsque vous inscrivez un découpage de sécurité personnalisé à l’aide de SharePoint Management Shell, vous pouvez spécifier les propriétés de configuration facultatives avec l’applet de commande New-SPEnterpriseSearchSecurityTrimmer. Cette applet de commande prend en charge la création d’un découpage de sécurité personnalisé avec des paramètres configurables.

Par exemple, vous pouvez créer un découpage de sécurité personnalisé avec une limite configurable sur le nombre d’éléments contrôlés par le découpage. Bien que ce soit facultatif, il est recommandé d’inclure une limite dans votre implémentation du découpage de sécurité personnalisé. Pour plus d’informations, voir Écriture d’un découpage de sécurité personnalisé pour SharePoint Server Search.

L’étape 3 décrit comment créer et inscrire un découpage de sécurité personnalisé avec une limite configurable sur le numéro de documents contrôlés ; elle inclut les tâches suivantes :

  • Codage du découpage de sécurité personnalisé

  • Inscription du découpage de sécurité personnalisé

  • Exemple

Le découpage de sécurité personnalisé décrit dans cet exemple est similaire à celui décrit à l’Étape 1 : créer le découpage de sécurité personnalisé et à l’Étape 2 : inscrire le découpage de sécurité personnalisé. Dans ce découpage, cependant, des étapes supplémentaires sont incluses pour définir une limite dans l’implémentation et changer la commande qui vous permet d’inscrire le découpage de sécurité personnalisé.

Codage du découpage de sécurité personnalisé

Avant de commencer la tâche décrite ici, créez le projet de découpage de sécurité personnalisé et modifiez la classe CustomSecurityTrimmer, comme décrit à l’Étape 1 : créer le découpage de sécurité personnalisé.

Pour coder le découpage de sécurité personnalisé

  1. Après avoir modifié la déclaration de classe pour implémenter l’interface ISecurityTrimmer2, déclarez une variable pour la valeur limite, comme suit.

    class CustomSecurityTrimmer : ISecurityTrimmer2
    {
        /*
           Sets a default limit of 200. You can change this 
           to a value that meets your specific requirements.
        */ 
        private int intCheckLimit = 200;
    
  2. Créez une méthode pour comparer le nombre d’éléments vérifiés à la limite configurée ; ajoutez le code suivant.

    private bool CheckLimit(IDictionary<String, Object> sessionProperties, int numChecks)
    {
        Object currentCount;
        sessionProperties.TryGetValue("currentCheckCount", out currentCount);
        if (currentCount == null)
        {
            sessionProperties["currentCheckCount"] = numChecks;
            return (true);
        }
        int currentCountInt = Convert.ToInt32(currentCount);
        currentCountInt += numChecks;
        sessionProperties["currentCheckCount"] = currentCountInt;
        if (currentCountInt <= intCheckLimit)
        {
            return true;
        }
        else
        {
            return false;
        }
    }
    
  3. Pour terminer le code de l’exemple de découpage de sécurité personnalisé, vous devez modifier les implémentations des méthodes Initialize() et CheckAccess() décrites à l’Étape 1 : créer le découpage de sécurité personnalisé.

Pour modifier les implémentations de méthode d’interface ISecurityTrimmer2

  1. Ajoutez le code suivant à la méthode Initialize() :

    if (staticProperties["CheckLimitProperty"] != null)
    {
       intCheckLimit = Convert.ToInt32(staticProperties["CheckLimitProperty"]);
    }
    

    Ce code définit la limite pour le nombre maximal de documents que le découpage de sécurité vérifiera avec la valeur d’une propriété de configuration appelée CheckLimitProperty.

    Notes

    Vous pouvez spécifier les propriétés de configuration lorsque vous inscrivez le découpage de sécurité.

  2. Ajoutez le code suivant à la méthode CheckAccess(), immédiatement après la déclaration de la méthode.

    if (!this.CheckLimit(sessionProperties, documentCrawlUrls.Count))
    {
        throw (new PluggableAccessCheckException("<Display Message>"));
    }
    

    Ce code appelle la méthode CheckLimit. Si la limite a été atteinte, cette méthode renvoie false. Dans ce cas, une exception PluggableAccessCheckException est générée, cependant l’utilisateur ne verra pas le message spécifié dans le constructeur. Après que l’exception a été générée par le découpage de sécurité, le trimmerID à l’origine de l’exception sera filtré et ce résultat sera exclu des résultats de recherche. Les autres résultats de sécurité filtrés, le cas échéant, seront renvoyés et affichés dans l’interface utilisateur des résultats de recherche.

Notes

Cette section ne répète pas les opérations déjà spécifiées aux étapes 1 et 2 ; elle décrit uniquement les tâches qui sont différentes. Pour plus d’informations sur les étapes précédentes, voir Étape 1 : créer le découpage de sécurité personnalisé et Étape 2 : inscrire le découpage de sécurité personnalisé.

Inscription du découpage de sécurité personnalisé

Avant de commencer cette étape, vous devez déployer CustomSecurityTrimmerSample.dll dans le global assembly cache, comme décrit à l’Étape 2 : inscrire le découpage de sécurité personnalisé. Ensuite, vous pouvez inscrire le découpage de sécurité personnalisé à l’aide de SharePoint 2010 Management Shell.

La procédure suivante montre comment inscrire un découpage de sécurité personnalisé, avec l’ID défini sur 1 pour l’Application de service de recherche, qui est appliqué au contenu situé sur des partages de fichiers d’un serveur appelé FileServer1. Elle définit également la valeur du paramètre de configuration CheckLimitProperty à 300.

Pour inscrire le découpage de sécurité personnalisé avec le paramètre de configuration CheckLimitProperty

  1. Ouvrez SharePoint 2010 Management Shell. Pour plus d’informations sur l’utilisation de cet outil, voir Administration des applications de service à l’aide de SharePoint 2010 Management Shell.

  2. À l’invite de commandes, tapez la commande suivante :

    New-SPEnterpriseSearchSecurityTrimmer -SearchApplication "Search Service Application" 
    -typeName "CustomSecurityTrimmerSample.CustomSecurityTrimmer, CustomSecurityTrimmerSample, 
    Version=1.0.0.0, Culture=neutral, PublicKeyToken=token" 
    -RulePath file:// FileServer1/* -id 1 -properties CheckLimitProperty~300
    

    Dans la commande, remplacez token par le jeton de clé publique du fichier CustomSecurityTrimmerSample.dll, et FileServer1 par le nom du serveur du partage de fichiers.

Exemple

Voici l’exemple de code complet pour la classe CustomSecurityTrimmerSample, décrite dans cette étape.

using System;
using System.Collections.Generic;
using Microsoft.Office.Server.Search.Query;
using Microsoft.Office.Server.Search.Administration;
using System.Collections;
using System.Collections.Specialized;
using System.Security.Principal;

namespace CustomSecurityTrimmerSample
{
    class CustomSecurityTrimmer : ISecurityTrimmer2
    {
        /*        
        Sets a default limit of 200. You can change this 
        to a value that meets your specific requirements.
        */ 
        private int intCheckLimit = 200;

        public void Initialize(NameValueCollection staticProperties, SearchServiceApplication searchApplication)
        {
            if (staticProperties["CheckLimitProperty"] != null)
            {
               intCheckLimit = Convert.ToInt32(staticProperties["CheckLimitProperty"]);
            }

        }

        public BitArray CheckAccess(IList<String> documentCrawlUrls, IDictionary<String, Object> sessionProperties, IIdentity passedUserIdentity)
        {
            if (!this.CheckLimit(sessionProperties, documentCrawlUrls.Count))
            {
                throw (new PluggableAccessCheckException("<Display Message>"));
            }

            BitArray retArray = new BitArray(documentCrawlUrls.Count);
            IIdentity userIdentity = System.Threading.Thread.CurrentPrincipal.Identity;

            for (int x = 0; x < documentCrawlUrls.Count; x++)
            {
              /*
                To fully implement the security trimmer,
                add code to perform the security check 
                and determine if userIdentity can access documentCrawlUrls[x].
                If userIdentity can access documentCrawlUrls[x], then:
               */
                retArray[x] = true;
              //If not:
                retArray[x] = false;
            }
            return retArray;
        }

        private bool CheckLimit(IDictionary<String, Object> sessionProperties, int numChecks)
        {
            Object currentCount;
            sessionProperties.TryGetValue("currentCheckCount", out currentCount);
            if (currentCount == null)
            {                
                sessionProperties["currentCheckCount"] = numChecks;
                return (true);
            }
            int currentCountInt = Convert.ToInt32(currentCount);
            currentCountInt += numChecks;
            sessionProperties["currentCheckCount"] = currentCountInt;            
            if (currentCountInt <= intCheckLimit)
            {
                return true;            
            }            
            else
            {
                return false;
            }
        }
    }
}

Voir aussi

Référence

Microsoft.Office.Server.Search.Query.ISecurityTrimmer2

Microsoft.Office.Server.Search.Query.PluggableAccessCheckException

Concepts

Écriture d’un découpage de sécurité personnalisé pour SharePoint Server Search