Filtrage de sécurité personnalisé pour la recherche dans SharePoint

En savoir plus sur les deux types d'interfaces de découpage de sécurité personnalisé, ISecurityTrimmerPre et ISecurityTrimmerPostet les étapes à suivre pour créer un découpage de sécurité personnalisé. Au moment de la requête, La recherche dans SharePoint effectue un découpage de sécurité des résultats de recherche basés sur l’identité de l’utilisateur qui envoie la requête, en utilisant les informations de sécurité obtenues à partir du composant d’analyse.

Vous devrez certains scénarios, cependant, dans lequel les résultats de filtrage de sécurité intégrée ne suffisent pas à vos besoins. Dans ces scénarios, vous avez besoin implémenter l'ajustement de la sécurité personnalisée. La recherche dans SharePoint prend en charge le découpage de sécurité personnalisé via l’interface ISecurityTrimmerPre , l’interface ISecurityTrimmerPost et l’interface ISecurityTrimmer2 (déconseillée) dans l’espace de noms Microsoft.Office.Server.Search.Query .

Remarque

Les pré-découpages personnalisés ne prennent pas en charge les SID Windows dans les listes de contrôle d’accès, mais uniquement les revendications. Si un de l'identificateur de sécurité réclamer types sont retournés à partir d'un découpage avant personnalisé, les ACE qui en résulte dans l'index seront codés comme une réclamation, non comme un identificateur de sécurité. Par conséquent, ils ne correspondent pas identités utilisateur Windows basés sur les identificateurs de sécurité.

Implémentation des interfaces ajustement de la sécurité personnalisée

L'interface ISecurityTrimmerPre exécute ajustement de la version de pré-mise, ou la requête avant d'évaluation, où la requête de recherche est réécrits pour ajouter des informations de sécurité avant que la requête de recherche ne correspond à l'index de recherche. L'interface ISecurityTrimmerPost exécute évaluation postérieures à la suppression ou postérieures à la requête, où les résultats de recherche sont nettoyés avant d'être renvoyés à l'utilisateur.

Nous vous recommandons de l'utilisation d'ajustement de la version de pré-mise pour les performances et l'exactitude général ; ajustement de la version de pré-mise empêche fuites d'informations pour les instances de nombre d'accès et les données affinement. Après trimmers peuvent être utilisés dans les cas où l'ajustement de la sécurité ne peut pas être représentée avec précision avec les filtres de requête ; par exemple, s'il existe un besoin pour filtrer absent (e) documents selon l'heure locale de l'utilisateur qui émet la requête, tels que pendant les heures ouvrables officiels.

Implémentation de l'interface ISecurityTrimmerPre

Pour créer un découpage avant de sécurité personnalisé pour les résultats de recherche, vous devez créer un composant qui mettent en œuvre, l'interface ISecurityTrimmerPre.

L'interface ISecurityTrimmerPre contient deux méthodes que vous devez implémenter : Initialize(NameValueCollection, SearchServiceApplication) et AddAccess(Boolean, Claims) .

Méthode Initialize

La méthode Initialize est exécutée lorsque le découpage avant de sécurité est chargé dans le processus de travail et ne s'exécute pas à nouveau jusqu'à ce que le processus de travail est suppression initiale. Deux paramètres sont passés à la méthode :

  • staticProperties : objet NameValueCollection contenant les propriétés de configuration spécifiées pour le découpage de sécurité lorsqu’il est inscrit auprès de l’application service Search.

  • searchApplication : objet SearchServiceApplication qui représente l’application service Search.

Méthode AddAccess

La méthode AddAccess est exécutée une fois par découpage avant, pour chaque requête entrant avant que la requête est évaluée.

Deux paramètres sont passés dans cette méthode :

  • sessionProperties : objet [T:System.Collections.Generic.IDictionary<String,Object>] qui contient les propriétés de la requête.

  • userIdentity : objet IIdentity qui contient l’identité de l’utilisateur.

Implémentation de l'interface ISecurityTrimmerPost

Pour créer un découpage postérieures à la sécurité personnalisée pour les résultats de recherche, vous devez créer un composant qui mettent en œuvre, l'interface ISecurityTrimmerPost.

L’interface ISecurityTrimmerPost contient deux méthodes que vous devez implémenter : Initialize(NameValueCollection, SearchServiceApplication) et CheckAccess(IList<String>, IList<String>, IDictionary<String, Object>, IIdentity).

Méthode Initialize

La méthode Initialize est exécutée lorsque le découpage de sécurité est chargé dans le processus de travail et ne s'exécute pas à nouveau jusqu'à ce que le processus de travail est suppression initiale. Deux paramètres sont passés à la méthode : et

  • staticProperties : objet NameValueCollection contenant les propriétés de configuration spécifiées pour le découpage de sécurité lorsqu’il est inscrit auprès de l’application service Search.

  • searchApplication : objet SearchServiceApplication qui représente l’application service Search.

Méthode CheckAccess

La méthode CheckAccess est exécutée une fois par après découpage, pour chaque requête de jeu de résultats, une fois que la requête est évaluée.

Quatre paramètres sont passés dans cette méthode :

  • documentUrls : objet T> IList< qui contient les URL de chaque élément de contenu des résultats de recherche qui correspondent à la règle d’analyse.

  • documentAcls : objet T> IList< contenant des listes de contrôle d’accès d’élément pour chaque élément de contenu dont l’accès doit être déterminé par l’implémentation du découpage de sécurité.

  • sessionProperties : objet TValue> IDictionary<TKey contenant le conteneur de propriétés temporaire.

  • userIdentity : objet IIdentity à partir duquel les implémenteurs peuvent récupérer l’identité de l’utilisateur.

La méthode CheckAccess renvoie un objet BitArray qui représente un tableau de valeurs true ou false, une pour chaque URL d'élément contenu dans l'objet IList qui est passé comme premier paramètre de la méthode. Les composants de traitement de requête utilise ces valeurs pour effectuer la limitation postérieures à la sécurité des résultats. Si la valeur du tableau pour un élément de contenu particulier est true, l'élément est inclus dans les résultats renvoyés ; Si la valeur du tableau est false, l'élément est supprimé.

Lors de l'implémentation de la méthode CheckAccess, vous pouvez utiliser deux types d'informations pour chaque élément pour déterminer s'il faut renvoyer true ou false pour l'élément : l'identité de l'utilisateur qui a envoyé la requête et l'URL de l'élément de contenu. Par ailleurs, vous pouvez également passer des informations de liste de documents personnalisés à partir du connecteur à la méthode CheckAccess.

Récupération d'identité de l'utilisateur pour votre découpage de sécurité

Vous pouvez récupérer identité de l'utilisateur en accédant à du principal du thread en cours, comme le montre l'exemple suivant.


IIdentity userIdentity = System.Threading.Thread.CurrentPrincipal.Identity;

Vous devez également inclure la directive d'espace de noms suivante.

using System.Security.Principal;

Vous pouvez également récupérer l'identité de l'utilisateur à partir du paramètre passedUserIdentity de la méthode CheckAccess. .

Transmission des utilisateurs de document à partir du connecteur à votre trimmers de sécurité

Un connecteur, comme son nom l’indique, est un pont de communication entre SharePoint et le système externe qui héberge les données externes. Si vous travaillez avec des liens personnalisés, vous pouvez passer les informations du document et directement sur le découpage après en définissant la propriété du document docaclmeta. Dans la mesure où les connecteurs configurés et postérieures à la trimmers ont le même format et l'interprétation du champ, vous êtes libre d'utiliser pour passer des données personnalisées.

Les chaînes stockées dans docaclmeta par le connecteur apparaîtra dans le paramètre documentAcls lorsque la méthode CheckAccess du découpage de sécurité personnalisé est appelée. Le document normal utilisateurs dans la propriété docacl sont traitées par ajustement de la sécurité de base et ne sont pas visible pour le découpage de sécurité personnalisé. De même, la propriété docaclmeta n'a pas d'effet sur ajustement de la sécurité de base.

Post-trimmers et leur effet sur count affinement pour trimmers de sécurité

Lorsque vous travaillez avec trimmers après, il est important de Notez qu'il existe deux types de résultat tables : RelevantResults et la RefinementResults. Après trimmers sont appliquent uniquement à l'accès à des résultats dans le RelevantResults. Par conséquent, il peut y avoir affinements liés aux règles postérieures à la découpage accès et le nombre de RefinementResults peut-être être supérieures ou égales à la RelevantResults. Vous pouvez corriger ce problème de deux façons :

  • Excluez les affinements sensibles du panneau d’affinement dans le composant WebPart par défaut afin qu’aucune information ne soit divulguée via les affinements.

  • Utilisez un composant WebPart personnalisé pour afficher les résultats ou les affinements lors de l’utilisation de post-découpages afin que les RefinementResults puissent être élégamment masqués dans les cas où le nombre d’affinementResults dépasse le nombre PertinentResults .

Lors de la récupération des propriétés de configuration individuelles pour votre découpage de sécurité

Vous pouvez accéder à une propriété configuration individuelle en utilisant le nom de la propriété qui a été spécifié lorsque le découpage de postérieures à la sécurité a été enregistré. Par exemple, le code suivant extrait la valeur d'une propriété de configuration nommée CheckLimit.

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

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

Après avoir créé le découpage de sécurité personnalisé, vous devez le déployer sur le global assembly cache sur tous les serveurs dans le rôle de requête. L’étape 2 de La procédure : utiliser un découpage de sécurité personnalisé pour les résultats de recherche SharePoint Server décrit le processus de déploiement du découpage de sécurité personnalisé dans le Global Assembly Cache.

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

Pour post-outils, vous devez associer un enregistrement découpage de sécurité personnalisé avec une application de service de recherche spécifique et une règle d'analyse ; pour les outils avant cette étape est facultative.

L'applet de commande SPEnterpriseSearchSecurityTrimmer de la SharePoint Management Shell vous permet d'enregistrer un découpage de sécurité personnalisé.

Le tableau suivant décrit les paramètres qui utilise l'applet de commande.

Tableau 1. Paramètres utilisés par l’applet de commande SPEnterpriseSearchSecurityTrimmer

Paramètre Description
SearchApplication
Obligatoire. Le nom de l'application de service de recherche, par exemple « Application du Service recherche ».
Typename
Obligatoire. Nom fort de l'assembly de découpage de sécurité personnalisé.
RulePath
Requis pour postérieures à la trimmers ; facultatif pour trimmers avant. Règle d’analyse pour le découpage de sécurité.
Remarque : Nous vous recommandons d’utiliser une règle d’analyse par source de contenu.
id
Obligatoire. Identificateur de découpage de sécurité (ID). Cette valeur est unique ; si un découpage de sécurité est enregistré avec un ID déjà enregistré pour un autre découpage de la sécurité, l'enregistrement du premier découpage est remplacé par celui du second découpage.
properties
Facultatif. Paires nom-valeur spécifiant les propriétés de configuration. Doit être au format suivant : Name1~Value1~Name2~Value~???

Pour obtenir un exemple de commande de base pour l’inscription d’un découpage de sécurité personnalisé et un exemple qui spécifie les propriétés de configuration, voir How to: Use a custom security trimmer for SharePoint Server search results.

Voir aussi