Benutzerdefinierte Sicherheitskürzung für die Suche in SharePoint

Erfahren Sie mehr über die zwei Arten von benutzerdefinierten Security Trimmer Schnittstellen, ISecurityTrimmerPre und ISecurityTrimmerPost, und die Schritte, die Sie ausführen müssen, um ein benutzerdefinierter Security Trimmer zu erstellen. Zum Zeitpunkt der Abfrage führt Suche in SharePoint sicherheitskürzung von Suchergebnissen, die auf die Identität des Benutzers, senden Sie die Abfrage, mithilfe der Sicherheitsinformationen aus der Durchforstungskomponente basieren.

Sie müssen bestimmte Szenarien, jedoch in denen die integrierte Sicherheit verkürzen Ergebnisse für Ihren Anforderungen nicht ausreichend. In solchen Szenarien müssen Sie benutzerdefinierte sicherheitskürzung implementieren. Die Suche in SharePoint bietet Unterstützung für benutzerdefinierte Sicherheitskürzungen über die ISecurityTrimmerPre-Schnittstelle , die ISecurityTrimmerPost-Schnittstelle und die ISecurityTrimmer2-Schnittstelle (veraltet) im Microsoft.Office.Server.Search.Query-Namespace .

Hinweis

Benutzerdefinierte Prä-Trimmer bieten keine Unterstützung für Windows-SIDs in Zugriffssteuerungslisten, sondern nur für Ansprüche. Wenn SID-Anspruchstypen von einem benutzerdefinierten Prä-Trimmer zurückgegeben werden, werden die resultierenden ACEs im Index als Ansprüche codiert, nicht als SIDs. Daher stimmen diese nicht mit Windows-Benutzeridentitäten überein, die auf SIDs basieren.

Implementieren der Schnittstellen für benutzerdefinierte Sicherheitskürzung

Die Benutzeroberfläche ISecurityTrimmerPre führt vor dem Zuschneiden oder vor dem Abfrage Auswertung, wo die Suchabfrage portiert ist Sicherheitsinformationen hinzufügen, bevor die Suchabfrage an den Suchindex verglichen wird. Die Benutzeroberfläche ISecurityTrimmerPost führt nach der verkürzen, oder nach der Abfrage Auswertung, wo die Suchergebnisse gelöscht werden, bevor sie an den Benutzer zurückgegeben werden.

Wir empfehlen die Verwendung von Pre-Trimming aus Gründen der Leistung und allgemeinen Korrektheit; Pre-Trimming verhindert Informationslecks für Einschränkungsdaten und Trefferanzahlinstanzen. Post-Trimmer können in Fällen verwendet werden, in denen die Sicherheitskürzung nicht genau mit Abfragefiltern dargestellt werden kann. Beispielsweise, wenn Dokumente je nach Ortszeit des Benutzers, der die Abfrage ausgibt, weggefiltert werden müssen, z. B. nur während der offiziellen Geschäftszeiten.

Implementieren der ISecurityTrimmerPre-Schnittstelle

Um ein benutzerdefinierter Security Pre Trimmer für Suchergebnisse zu erstellen, müssen Sie eine Komponente erstellen, die die ISecurityTrimmerPre Schnittstelle implementiert.

Die Benutzeroberfläche ISecurityTrimmerPre enthält zwei Methoden, mit denen Sie implementieren müssen: Initialize(NameValueCollection, SearchServiceApplication) und AddAccess(Boolean, Claims) .

"Initialize"-Methode

Die Initialize -Methode wird ausgeführt, wenn die Vorabversion Trimmer Sicherheit in Worker-Prozess geladen wird, und nicht erneut ausgeführt wird, bis der Worker-Prozess wieder verwendet wird. Zwei Parameter werden an die Methode übergeben:

  • staticProperties: Ein NameValueCollection-Objekt, das die Konfigurationseigenschaften enthält, die für den Security Trimmer angegeben werden, wenn er bei der Suchdienst-Anwendung registriert wird.

  • searchApplication: Ein SearchServiceApplication-Objekt, das die Suchdienst Anwendung darstellt.

AddAccess-Methode

Die Methode AddAccess wird einmal ausgeführt, pro Pre Trimmer, für jede eingehende Abfrage, bevor die Abfrage ausgewertet wird.

In dieser Methode werden zwei Parameter übergeben:

  • sessionProperties: Ein [T:System.Collections.Generic.IDictionary<String,Object]->Objekt, das die Eigenschaften der Abfrage enthält.

  • userIdentity: Ein IIdentity-Objekt , das die Benutzeridentität enthält.

Implementieren der ISecurityTrimmerPost-Schnittstelle

Um ein benutzerdefinierter Security nach der Trimmer für Suchergebnisse zu erstellen, müssen Sie eine Komponente erstellen, die die ISecurityTrimmerPost Schnittstelle implementiert.

Die ISecurityTrimmerPost-Schnittstelle enthält zwei Methoden, die Sie implementieren müssen: Initialize(NameValueCollection, SearchServiceApplication) und CheckAccess(IList<String>, IList<String>, IDictionary<String, Object>, IIdentity).

"Initialize"-Methode

Die Initialize Methode wird ausgeführt, wenn Security Trimmer in der Worker-Prozess geladen wird, und nicht erneut ausgeführt wird, bis der Worker-Prozess wieder verwendet wird. Zwei Parameter werden an die Methode übergeben: und

  • staticProperties: Ein NameValueCollection-Objekt, das die Konfigurationseigenschaften enthält, die für den Security Trimmer angegeben werden, wenn er bei der Suchdienst-Anwendung registriert wird.

  • searchApplication: Ein SearchServiceApplication-Objekt, das die Suchdienst Anwendung darstellt.

"CheckAccess"-Methode

Die CheckAccess -Methode wird einmal pro nach der Trimmer, für jede Abfrage Ergebnis festlegen, ausgeführt, nachdem die Abfrage ausgewertet wird.

In dieser Methode werden vier Parameter übergeben:

  • documentUrls: Ein IList<T-Objekt> , das die URLs für jedes Inhaltselement aus den Suchergebnissen enthält, die der Durchforstungsregel entsprechen.

  • documentAcls: Ein IList<T-Objekt> , das Element-ACLs für jedes Inhaltselement enthält, dessen Zugriff durch die Security Trimmer-Implementierung bestimmt werden soll.

  • sessionProperties: Ein IDictionary<TKey, TValue-Objekt>, das den vorübergehenden Eigenschaftenbehälter enthält.

  • userIdentity: Ein IIdentity-Objekt , aus dem Implementierer die Identität des Benutzers abrufen können.

Die Methode CheckAccess gibt ein BitArray -Objekt, das ein Array von Werten true oder false, eine für jede Inhaltselement URL in das Objekt IList darstellt, der als erster Parameter der Methode übergeben wird. Verarbeitung Komponente die Abfrage verwendet diese Werte, um die nach der sicherheitskürzung der Ergebnisse durchzuführen. Wenn der Matrix-Wert für ein besonderes Inhaltselement trueist, ist das Element in die zurückgegebenen Ergebnisse enthalten; Wenn der Arraywert falseist, wird das Element entfernt.

Beim Implementieren der CheckAccess -Methode können Sie zweierlei Informationen für jedes Element verwenden, um festzustellen, ob true oder false für das Element zurückgeben: die Identität des Benutzers, der die Abfrage und die URL für das Inhaltselement übermittelt. Alternativ können Sie auch benutzerdefinierte ACL Dokumentinformationen aus der Verbinder an die Methode CheckAccess übergeben.

Abrufen von der Identität des Benutzers für Ihre Trimmer Sicherheit

Sie können die Identität des Benutzers abrufen, indem Sie den Zugriff auf den Thread des aktuellen Tilgungsanteile, wie im folgenden Beispiel gezeigt.


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

Außerdem müssen Sie die folgende Namespacedirektive einfügen.

using System.Security.Principal;

Sie können die Identität des Benutzers auch aus dem passedUserIdentity-Parameter der CheckAccess-Methode abrufen.

Dokument ACLs aus den Verbinder zu Ihrer Sicherheit Rasentrimmer übergeben

Ein Verbinder, ist wie der Name sagt, zwischen SharePoint und externen Systems, die externen Daten befindet. Wenn Sie mit den benutzerdefinierten Verbinder arbeiten, können Sie direkt auf den nach der Trimmer ACL-Informationen des Dokuments übergeben, mithilfe der Eigenschaft docaclmeta Dokument. Der Verbinder konfiguriert und nach der Rasentrimmer das Format und die Interpretation des Felds besitzen, können Sie kostenlose zur gemeinsamen Nutzung von benutzerdefinierten Daten zu übergeben.

Die Zeichenfolgen in docaclmeta gespeichert, von der Verbinder werden in den Parameter documentAcls bereitstellen, wenn die CheckAccess -Methode der benutzerdefinierten Security Trimmer aufgerufen wird. Das normale Dokument ACLs in der Eigenschaft docacl von grundlegende sicherheitskürzung verarbeitet werden und sind für die benutzerdefinierter Security Trimmer nicht sichtbar. Die Eigenschaft docaclmeta verfügt ebenso nicht Auswirkung auf grundlegende sicherheitskürzung.

Nach der Rasentrimmer und deren Einfluss auf die Anzahl der Einschränkung für Sicherheit Rasentrimmer

Bei der Arbeit mit nach der Rasentrimmer ist zu beachten, dass es zwei Arten von Ergebnistabellen gibt: RelevantResults und der RefinementResults. Nach der Rasentrimmer, die nur auf dem Ergebnis Zugriffe in den RelevantResults angewendet werden. Daher können vorhanden sein, dass die Einschränkungen auf dem neuen gekürzte Zugriffe beziehen, und die Anzahl der RefinementResults möglicherweise größer als oder gleich der RelevantResults. Sie können dieses Verhalten auf zwei Arten beheben:

  • Ausschließen von der vertraulichen Einschränkungen aus der Einschränkungsbereich in Standard-Webpart, damit es werden keine Informationen über die Einschränkungen offengelegt werden.

  • Verwenden Sie ein benutzerdefiniertes Webpart, um die Ergebnisse oder Einschränkungen angezeigt, wenn Sie nach der Rasentrimmer verwenden, damit die RefinementResults elegante in Fällen ausgeblendet werden kann, wenn die Anzahl der RefinementResults die Anzahl der RelevantResults übersteigt.

Abrufen von Eigenschaften für Ihre Sicherheit Trimmer einzelne Konfiguration

Sie können eine einzelne Konfigurationseigenschaft zugreifen, mit dem Namen der Eigenschaft, der beim Erstellen der Sicherheit nach der Trimmer registriert wurde angegeben wurde. Mit dem folgende Code wird beispielsweise der Wert für eine Konfigurationseigenschaft mit dem Namen CheckLimitabgerufen.

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

Bereitstellen der benutzerdefinierten Komponente mit dem Security Trimmer

Nachdem Sie die benutzerdefinierter Security Trimmer erstellt haben, müssen Sie es zum globalen Assemblycache auf einem beliebigen Server in der Abfrage Rolle bereitstellen. Schritt 2 unter Vorgehensweise: Verwenden eines benutzerdefinierten Security Trimmers für SharePoint Server-Suchergebnisse beschreibt den Prozess zum Bereitstellen des benutzerdefinierten Security Trimmers im globalen Assemblycache.

Registrieren des benutzerdefinierten Security Trimmers

Für nach der Rasentrimmer müssen Sie eine benutzerdefinierte Security Trimmer Registrierung mit einem bestimmten Suchdienstanwendung und Durchforstungsregel zuordnen; für die Vorabversion Rasentrimmer ist dies optional.

Verwenden Sie das Cmdlet SPEnterpriseSearchSecurityTrimmer, der die SharePoint-Verwaltungsshell, um ein benutzerdefinierter Security Trimmer zu registrieren.

Die folgende Tabelle beschreibt die Parameter, die das Cmdlet verwendet.

Tabelle 1. Parameter, die vom SPEnterpriseSearchSecurityTrimmer-Cmdlet verwendet werden

Parameter Beschreibung
SearchApplication
Erforderlich ist. Der Name der Suchdienstanwendung, beispielsweise "Suchdienstanwendung".
typeName
Erforderlich. Der starke Name der Assembly für den benutzerdefinierten Security Trimmer.
RulePath
Benötigt nach der Rasentrimmer; für die Vorabversion Rasentrimmer optional. Die Durchforstungsregel für die Sicherheit Trimmer.
Hinweis: Es empfiehlt sich, eine Durchforstungsregel pro Inhaltsquelle zu verwenden.
id
Erforderlich. Der Security Trimmer-Bezeichner (ID). Dieser Wert ist eindeutig; Wenn ein Security Trimmer mit einer ID registriert wird, die bereits für einen anderen Security Trimmer registriert ist, wird die Registrierung für den ersten Trimmer mit der Registrierung für den zweiten Trimmer überschrieben.
properties
Optional. Die Name/Wert-Paare, die die Konfigurationseigenschaften angeben. Muss das folgende Format aufweisen: Name1~Value1~Name2~Value~???

Ein Beispiel für einen einfachen Befehl zum Registrieren eines benutzerdefinierten Security Trimmers und ein Beispiel, das die Konfigurationseigenschaften angibt, finden Sie unter Vorgehensweise: Verwenden eines benutzerdefinierten Security Trimmers für SharePoint Server-Suchergebnisse.

Siehe auch