Filtragem de segurança personalizada para a Pesquisa no SharePoint

Saiba mais sobre os dois tipos de interfaces de corte de segurança personalizada, ISecurityTrimmerPre e ISecurityTrimmerPoste as etapas que você deve realizar para criar um filtro de segurança personalizado. No momento da consulta, a Pesquisa no SharePoint executa o corte de segurança dos resultados da pesquisa com base na identidade do usuário que envia a consulta usando as informações de segurança obtidas do componente de rastreamento.

Você pode ter determinados cenários, no entanto, no qual os resultados de filtragem de segurança interna não são suficientes para suas necessidades. Em cenários assim, você precisa implementar a filtragem de segurança personalizada. A pesquisa no SharePoint fornece suporte para o corte de segurança personalizado por meio da interface ISecurityTrimmerPre , interface ISecurityTrimmerPost e interface ISecurityTrimmer2 (preterida) no namespace Microsoft.Office.Server.Search.Query .

Observação

Os pré-aparadores personalizados não dão suporte a SIDs do Windows em ACLs, apenas declarações. Se qualquer uma das SID reivindicar tipos são retornados de um pré-filtro de personalizado, as ACEs resultantes no índice serão codificadas como uma declaração, não como SID. Portanto, elas não coincidem identidades de usuário do Windows que são baseadas em SIDs.

Implementando as interfaces para filtragem de segurança personalizada

A interface de ISecurityTrimmerPre efetua filtragem de pré-lançamento ou pré-consulta avaliação, onde a consulta de pesquisa é regravada adicionar informações de segurança antes de consulta de pesquisa sejam correspondentes ao índice de pesquisa. A interface de ISecurityTrimmerPost efetua avaliação de filtragem de POST ou pós-atualização, onde os resultados da pesquisa são removidos antes que eles são retornados ao usuário.

Recomendamos o uso de filtragem de pré-lançamento para desempenho e correção geral; pré-filtragem de impede que a perda de informações para dados de refinador e instâncias de contagem de ocorrências. POST trimmers podem ser usados em casos onde a filtragem de segurança não pode ser representada com precisão com filtros de consulta; Por exemplo, se houver uma necessidade para filtrar ausente documentos dependendo do horário local do usuário que emite a consulta, como oficial somente durante horário comercial.

Implementação da interface ISecurityTrimmerPre

Para criar um filtro de pré-lançamento de segurança personalizado para resultados de pesquisa, você deve criar um componente que implementa a interface ISecurityTrimmerPre.

A interface de ISecurityTrimmerPre contém dois métodos que você deve implementar: Initialize(NameValueCollection, SearchServiceApplication) e AddAccess(Boolean, Claims) .

Inicializar método

O método Initialize é executado quando o filtro de pré-lançamento de segurança é carregado no processo de trabalho e não é executado novamente até que o processo de trabalho seja reciclado. Dois parâmetros são passados para o método:

  • staticProperties: um objeto NameValueCollection que contém as propriedades de configuração especificadas para o aparador de segurança quando ele é registrado com o aplicativo serviço Pesquisa.

  • searchApplication: um objeto SearchServiceApplication que representa o aplicativo serviço Pesquisa.

Método de AddAccess

O método AddAccess é executado uma vez por filtro de pré-lançamento, para cada entrada consulta antes que a consulta é avaliada.

Dois parâmetros são passados para esse método:

  • sessionProperties: um objeto [T:System.Collections.Generic.IDictionary<String,Object>] que contém as propriedades da consulta.

  • userIdentity: um objeto IIdentity que contém a identidade do usuário.

Implementação da interface ISecurityTrimmerPost

Para criar um filtro de POST de segurança personalizado para resultados de pesquisa, você deve criar um componente que implementa a interface ISecurityTrimmerPost.

A interface ISecurityTrimmerPost contém dois métodos que você deve implementar: Initialize(NameValueCollection, SearchServiceApplication) e CheckAccess(Cadeia de Caracteres> IList<, Cadeia de Caracteres> IList<, Cadeia de Caracteres IDictionary<, Objeto>, IIdentity).

Inicializar método

O método Initialize é executado quando o filtro de segurança é carregado no processo de trabalho e não é executado novamente até que o processo de trabalho seja reciclado. Dois parâmetros são passados para o método: e

  • staticProperties: um objeto NameValueCollection que contém as propriedades de configuração especificadas para o aparador de segurança quando ele é registrado com o aplicativo serviço Pesquisa.

  • searchApplication: um objeto SearchServiceApplication que representa o aplicativo serviço Pesquisa.

Método CheckAccess

O método CheckAccess é executado uma vez por filtro de POST, para cada consulta de conjunto de resultados, depois que a consulta é avaliada.

Quatro parâmetros são passados para esse método:

  • documentUrls: um objeto IList<T> que contém as URLs de cada item de conteúdo dos resultados da pesquisa que correspondem à regra de rastreamento.

  • documentAcls: um objeto IList<T> que contém ACLs de item para cada item de conteúdo cujo acesso deve ser determinado pela implementação do aparador de segurança.

  • sessionProperties: um objeto TKey IDictionary<, TValue> que contém o saco de propriedades transitória.

  • userIdentity: um objeto IIdentity do qual os implementadores podem recuperar a identidade do usuário.

O método CheckAccess retorna um objeto de BitArray que representa uma matriz de valores true ou false, uma para cada URL de item de conteúdo no objeto IList que é passado como o primeiro parâmetro do método. O componente de processamento de consultas usa esses valores para realizar a filtragem de POST de segurança dos resultados. Se o valor de matriz para um item específico de conteúdo é true, o item será incluído no resultados retornados; Se o valor de matriz for false, o item é removido.

Ao implementar o método CheckAccess, você pode usar duas partes de informações para cada item para determinar se deve retornar true ou false para o item: a identidade do usuário que enviou a consulta e a URL do item conteúdo. Como alternativa, você também pode passar informações de ACL de documento personalizado do conector para o método CheckAccess.

Recuperando a identidade do usuário para o seu filtro de segurança

Você pode recuperar a identidade do usuário, acessando a principal da thread atual, conforme mostrado no exemplo de código a seguir.


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

Você também deve incluir a seguinte diretiva de namespace.

using System.Security.Principal;

Você também pode recuperar a identidade do usuário do parâmetro de passedUserIdentity do método CheckAccess.

Passando ACLs de documento do conector para sua trimmers de segurança

Um conector, como o nome indica, é uma ponte de comunicação entre o SharePoint e o sistema externo que hospeda os dados externos. Se você estiver trabalhando com conectores personalizados, você pode passar as informações do documento ACL diretamente para o filtro de POST definindo a propriedade de documento docaclmeta. Enquanto os conectores configurados e trimmers POST tiverem o mesmo formato e interpretação do campo, você está livre para usá-lo para passar dados personalizados.

As cadeias de caracteres armazenadas em docaclmeta pelo conector serão superficial no parâmetro documentAcls quando o método CheckAccess do filtro de segurança personalizado é chamado. O documento regular ACLs na propriedade docacl são processadas por filtragem de segurança básicas e não são visível para o filtro de segurança personalizado. Da mesma forma, a propriedade docaclmeta não tem nenhum efeito sobre filtragem de segurança básico.

Trimmers POST e seus efeitos na contagem de refinador para trimmers de segurança

Ao trabalhar com trimmers POST, é importante Observe que há dois tipos de tabelas resultado: RelevantResults e o RefinementResults. Trimmers POST são aplicadas somente para as visitas de resultado na RelevantResults. Consequentemente, pode haver refinadores relacionados às visitas pós-cortadas e a contagem de RefinementResults pode ser maior que ou igual a RelevantResults. Você pode abordar esse comportamento de duas maneiras:

  • Exclua os refinadores confidenciais do painel de refinamento na Web Part padrão para que nenhuma informação seja vazada por meio das refinarias.

  • Use uma Web Part personalizada para exibir resultados ou refinarias ao usar pós-aparadores para que os RefinementResults possam estar elegantemente ocultos nos casos em que a contagem RefinementResults excede a contagem de RelevantResults .

Recuperando propriedades de configuração individuais para seu filtro de segurança

Você pode acessar uma propriedade de configuração individuais usando o nome da propriedade que foi especificado quando o filtro de POST de segurança foi registrado. Por exemplo, o seguinte código recupera o valor de uma propriedade de configuração chamada CheckLimit.

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

Implantando o componente de corte de segurança personalizada

Depois de criar o filtro de segurança personalizado, você deve implantá-lo no cache de assembly global em qualquer servidor na função de consulta. Etapa 2 em Como usar um aparador de segurança personalizado para resultados de pesquisa do SharePoint Server descreve o processo de implantação do aparador de segurança personalizado no cache de assembly global.

Registrar o filtro de segurança personalizado

Para trimmers POST, você deve associar um registro de corte de segurança personalizado com um aplicativo de serviço de pesquisa específico e uma regra de rastreamento; pré-trimmers, isso é opcional.

Você usa o cmdlet de SPEnterpriseSearchSecurityTrimmer do SharePoint Management Shell para registrar um filtro de segurança personalizado.

A tabela a seguir descreve os parâmetros que usa o cmdlet.

Tabela 1. Parâmetros usados pelo cmdlet SPEnterpriseSearchSecurityTrimmer

Parâmetro Descrição
Searchapplication
Necessário. O nome do aplicativo de serviço de pesquisa, por exemplo "aplicativo de serviço de pesquisa".
Typename
Necessário. O nome forte do assembly corte segurança personalizada.
RulePath
Necessário para POST trimmers; opcional para pré-trimmers. A regra de rastreamento para a remoção de segurança.
Observação: recomendamos usar uma regra de rastreamento por fonte de conteúdo.
id
Necessário. O corte identificador de segurança (ID). Esse valor é exclusivo; Se um filtro de segurança é registrado com uma identificação que já está registrada para outro filtro de segurança, o registro para o primeiro filtro será substituído com o registro para o segundo filtro.
properties
Opcional. Os pares de valor de nome especificando as propriedades de configuração. Deve estar no seguinte formato: Name1~Value1~Name2~Value~???

Para obter um exemplo de um comando básico para registrar um aparador de segurança personalizado e um exemplo que especifica as propriedades de configuração, consulte Como usar um aparador de segurança personalizado para resultados de pesquisa do SharePoint Server.

Confira também