Personalizar el recorte de seguridad para Search en SharePoint

Obtenga información sobre los dos tipos de interfaces de corte de seguridad personalizado, ISecurityTrimmerPre y ISecurityTrimmerPosty los pasos que debe seguir para crear un optimizador de seguridad personalizada. En el momento de la consulta, La búsqueda en SharePoint realiza el recorte de seguridad de los resultados de búsqueda que se basan en la identidad del usuario que envía la consulta, mediante la información de seguridad obtenida del componente de rastreo.

Es posible que tenga algunos escenarios, sin embargo, en el que no es suficientes para los requisitos de los resultados de recorte de seguridad integrada. En estos casos, necesitará implementar el recorte de seguridad personalizado. La búsqueda en SharePoint proporciona compatibilidad con el recorte de seguridad personalizado a través de la interfaz ISecurityTrimmerPre , la interfaz ISecurityTrimmerPost y la interfaz ISecurityTrimmer2 (en desuso) en el espacio de nombres Microsoft.Office.Server.Search.Query .

Nota:

Los optimizadores previos personalizados no admiten SID de Windows en ACL, solo notificaciones. Si cualquiera de lo SID reclamar se devuelven los tipos de un optimizador preliminar personalizado, las ACE resultantes en el índice se va a codificar como una notificación, no como SID. Por lo tanto, no coinciden con las identidades de usuario de Windows que se basan en los SID.

Implementar las interfaces de recorte de seguridad personalizado

La interfaz de ISecurityTrimmerPre realiza evaluación preliminar recorte o previos a la consulta, donde se vuelve a escribir la consulta de búsqueda para agregar información de seguridad antes de la consulta de búsqueda coincide con el índice de búsqueda. La interfaz de ISecurityTrimmerPost realiza evaluación posterior al recorte o posterior a la consulta, donde se eliminan los resultados de la búsqueda antes de que se devuelven al usuario.

Se recomienda el uso de recorte anterior en rendimiento y general; recorte preliminar impide fuga de información para los datos de refinador e instancias de recuento. Trimmers posteriores a la que pueden usarse en casos donde el recorte de seguridad no se puede representar exactamente con los filtros de la consulta; Por ejemplo, si hay una necesidad de filtrar ausente documentos según la hora local del usuario que ejecuta la consulta, como horario oficial solo.

Implementación de la interfaz de ISecurityTrimmerPre

Para crear un optimizador de seguridad personalizada preliminar para los resultados de búsqueda, debe crear un componente que implementa la interfaz ISecurityTrimmerPre.

La interfaz ISecurityTrimmerPre contiene dos métodos que debe implementar: Initialize(NameValueCollection, SearchServiceApplication) y AddAccess(Boolean, Claims) .

Método Initialize

El método Initialize se ejecuta cuando el optimizador de seguridad anterior se carga en el proceso de trabajo y no ejecute de nuevo hasta que el proceso de trabajo se reciclados. Se pasan dos parámetros en el método:

  • staticProperties: objeto NameValueCollection que contiene las propiedades de configuración especificadas para el optimizador de seguridad cuando se registra con la aplicación servicio Search.

  • searchApplication: objeto SearchServiceApplication que representa la aplicación servicio Search.

Método AddAccess

El método AddAccess se ejecuta una vez por recortador preliminar, para cada consulta entrante antes de que se evalúa la consulta.

Este método se pasan dos parámetros:

  • sessionProperties: objeto [T:System.Collections.Generic.IDictionary<String,Object>] que contiene las propiedades de la consulta.

  • userIdentity: objeto IIdentity que contiene la identidad del usuario.

Implementación de la interfaz de ISecurityTrimmerPost

Para crear un optimizador de posteriores a la seguridad personalizada para los resultados de búsqueda, debe crear un componente que implementa la interfaz ISecurityTrimmerPost.

La interfaz ISecurityTrimmerPost contiene dos métodos que debe implementar: Initialize(NameValueCollection, SearchServiceApplication) y CheckAccess(IList<String>, IList<String>, IDictionary<String, Object>, IIdentity).

Método Initialize

El método Initialize se ejecuta cuando el optimizador de seguridad se carga en el proceso de trabajo y no ejecute de nuevo hasta que el proceso de trabajo se reciclados. Se pasan dos parámetros en el método: y

  • staticProperties: objeto NameValueCollection que contiene las propiedades de configuración especificadas para el optimizador de seguridad cuando se registra con la aplicación servicio Search.

  • searchApplication: objeto SearchServiceApplication que representa la aplicación servicio Search.

Método CheckAccess

El método CheckAccess se ejecuta una vez por recortador posterior al, para cada consulta de conjunto de resultados, cuando se evalúa la consulta.

En este método, se pasan cuatro parámetros:

  • documentUrls: objeto IList<T> que contiene las direcciones URL de cada elemento de contenido de los resultados de búsqueda que coinciden con la regla de rastreo.

  • documentAcls: objeto IList<T> que contiene acl de elemento para cada elemento de contenido cuyo acceso debe determinar la implementación del optimizador de seguridad.

  • sessionProperties: objeto TKey de IDictionary<, TValue> que contiene el contenedor de propiedades transitorio.

  • userIdentity: objeto IIdentity desde el que los implementadores pueden recuperar la identidad del usuario.

El método CheckAccess devuelve un objeto BitArray que representa una matriz de valores de true o false, uno para cada dirección URL del elemento de contenido en el objeto IList que se pasa como primer parámetro del método. La consulta procesamiento componente usa estos valores para realizar el recorte de seguridad posterior a la de los resultados. Si el valor de la matriz de un elemento de contenido determinado es true, el elemento se incluye en los resultados devueltos; Si el valor de la matriz es false, se elimina el elemento.

Al implementar el método de CheckAccess, puede usar dos partes de la información de cada elemento para determinar si se devolverá true o false del elemento: la identidad del usuario que envió la consulta y la dirección URL del elemento de contenido. Como alternativa, también puede pasar información de ACL de documento personalizado desde el conector para el método CheckAccess.

Recuperar la identidad de usuario para el optimizador de seguridad

Puede recuperar la identidad del usuario accediendo el principal del subproceso actual, como se muestra en el siguiente ejemplo.


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

También se debe incluir la siguiente directiva de espacio de nombres.

using System.Security.Principal;

También se puede recuperar la identidad del usuario desde el parámetro passedUserIdentity del método CheckAccess.

Pasar ACL de documento desde el conector para su trimmers de seguridad

Un conector, como su nombre indica, es un puente de comunicación entre SharePoint y el sistema externo que hospeda los datos externos. Si está trabajando con conectores personalizados, puede pasar la información del documento ACL directamente a la recortador posteriores a la estableciendo la propiedad de documento docaclmeta. Como los conectores de configurado y posteriores a la trimmers tienen el mismo formato e interpretación del campo, es libre para usar para pasar datos personalizados.

Las cadenas almacenadas en docaclmeta, el conector se detectarán en el parámetro documentAcls cuando se invoca el método CheckAccess el optimizador de seguridad personalizada. Documento normal ACL en la propiedad docacl se procesan por el recorte de seguridad básica y no son visible para el optimizador de seguridad personalizada. Del mismo modo, la propiedad docaclmeta no tiene ningún efecto en el recorte de seguridad básica.

Posteriores a la trimmers y su efecto en el recuento de refinador para trimmers de seguridad

Cuando trabaje con trimmers posteriores a la, es importante tener en cuenta que existen dos tipos de tablas de resultado: RelevantResults y la RefinementResults. Trimmers posteriores a la sólo se aplican a las visitas de resultado en el RelevantResults. Por lo tanto, puede haber refinadores relacionados con las visitas posteriores a la recortada y el recuento de RefinementResults puede ser mayor o igual que el RelevantResults. Puede resolver este comportamiento de dos maneras:

  • Excluya los refinadores confidenciales del panel de refinamiento en el elemento web predeterminado para que no se filtre información a través de los refinadores.

  • Use un elemento web personalizado para mostrar resultados o refinadores al usar optimizadores posteriores a fin de que El refinamientoResults pueda ocultarse elegantemente en los casos en los que el recuento De RefinamientoResults supera el recuento RelevantResults .

Recuperar propiedades de configuración individuales para el optimizador de seguridad

Puede acceder a una propiedad de configuración individuales mediante el nombre de propiedad que se especificó cuando se registró el optimizador de posteriores a la seguridad. Por ejemplo, el siguiente código recupera el valor de una propiedad de configuración denominado CheckLimit.

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

Implementación del componente optimizador de seguridad personalizado

Después de crear el optimizador de seguridad personalizado, deberá implementarlo en la memoria caché global de ensamblados de cualquier servidor en la función Consulta. En el paso 2 de Cómo: Usar un optimizador de seguridad personalizado para los resultados de búsqueda de SharePoint Server se describe el proceso para implementar el optimizador de seguridad personalizado en la caché global de ensamblados.

Registro del optimizador de seguridad personalizado

Para posteriores a la trimmers, debe asociar un registro de corte de seguridad personalizado a una aplicación de servicio de búsqueda específica y una regla de rastreo; para trimmers preliminar, esto es opcional.

Use el cmdlet SPEnterpriseSearchSecurityTrimmer de la Shell de administración de SharePoint para registrar un optimizador de seguridad personalizada.

La siguiente tabla describe los parámetros que usa el cmdlet.

Tabla 1. Parámetros usados por el cmdlet SPEnterpriseSearchSecurityTrimmer

Parámetro Descripción
SearchApplication
Requerido. El nombre de la aplicación de servicio de búsqueda, por ejemplo "aplicación de servicio de búsqueda".
Typename
Obligatorio. El nombre seguro del ensamblado del optimizador de seguridad personalizado.
RulePath
Necesaria para posteriores a la trimmers; opcional para trimmers anterior. La regla de rastreo del optimizador de seguridad.
Nota: Se recomienda usar una regla de rastreo por origen de contenido.
id
Obligatorio. El identificador del optimizador de seguridad. Este valor es único; si un optimizador de seguridad se registra con un identificador ya registrado para otro optimizador de seguridad, el registro del primero se sobrescribe con el registro del segundo.
properties
Opcional. Los pares de nombre-valor que especifican las propiedades de configuración. Debe tener el formato siguiente: Name1~Value1~Name2~Value~???

Para obtener un ejemplo de un comando básico para registrar un optimizador de seguridad personalizado y un ejemplo que especifica las propiedades de configuración, vea How to: Use a custom security trimmer for SharePoint Server search results (Cómo: Usar un optimizador de seguridad personalizado para los resultados de búsqueda de SharePoint Server).

Vea también