Datenzugriff in SharePoint: Secure Store Services

15. August 2012

Dies ist der sechste Teil einer Serie, die sich mit der Frage beschäftigt auf welche Arten Konfigurationen in Applikationen unter SharePoint gespeichert werden können. Es wird zuerst immer kurz die Methode vorgestellt, gefolgt von einem kurzen Beispiel und den Vor- und Nachteilen.

Eine vollständige Übersicht über bisherige und noch folgende Artikel ist hier zu finden.

Im heutigen Teil widmen wir uns den Secure Store Services.

Der Secure Store Service ist ein Dienst innerhalb SharePoint zum Speichern von Anmeldeinformationen für den Zugriff auf externe Datenquellen. Er wird für eine Vielzahl von Diensten wie Excel- oder Visio-Services verwendet. Die Anmeldeinformationen werden hierbei sicher im SharePoint abgelegt und können über den Service wieder ausgelesen werden. Es ist nicht dazu gedacht Einstellungen programmatisch zu ändern, da der Zugriff rein lesend ist.

Auf einem angelegten SecureStore lassen sich Zugriffsberechtigungen defnieren, welche Benutzer oder Gruppen diesen auslesen dürfen.

Erstellen des SecureStore

Der SecureStore Service wird über die SharePoint Central Administration aufgerufen. Er ist zu finden unter “Application Management > Manage service applications > Secure Store Service”.

Falls noch kein Key für den Secure Store Service generiert wurde, muss dieses vorab durchgeführt werden.

Für unser Beispiel legen wir nun einen neuen SecureStore an:

601

Im folgenden Dialog definieren wir eine “Application ID” und können über „Target Application Type“ die Art des Zugriffs regeln:

  • Group: für Berechtigung von Gruppen
  • Individual: wenn einzelne Benutzer berechtigt werden sollen.

602

Im nächsten Schritt werden die Felder des SecureStore definiert:

603

Um das Beispiel einfach zu halten, wird der komplette ConnectionString in ein einzelnes Feld gespeichert. Es ist aber ohne Probleme möglich seperate Felder für Benutzername, Passwort, Server, etc. hinzuzufügen. Zu beachten ist auch, das die hier vorgenommenen Einstellungen später nicht mehr geändert werden können!

Im letzten Schritt beim Anlegen des Secure Store werden die Personen oder Gruppen definiert, welche den SecureStore administrieren können:

604

Als Nächstes müssen wir den SecureStore mit Werte füllen. Hierzu wählen wir den neuen SecureStore aus und klicken auf „Set Credentials“.

605

Nun tragen wir den ConnectionString und die Credential Owner ein. Die Credential Owner sind alle Personen und Gruppen, welche den Secure Store auslesen dürfen.

606

Nun drücken wir Ok und der Secure Store kann verwendet werden.

Wer eine Secure Store Applikation lieber mit Hilfe von PowerShell anzulegen möchte, findet hier eine Anleitung dazu: https://www.sdx-ag.de/2012/05/sharepoint-2010-deployment-teil-3.html

Zugriff auf SecureStore

Bevor wir die Secure Store Services ansprechen können, müssen wir noch zwei Dlls in das Visual Studio Projekt einbinden:

  • Microsoft.BusinessData.dll
    C:Program FilesCommon FilesMicrosoft SharedWeb Server Extensions14ISAPIMicrosoft.BusinessData.dll
  • Microsoft.Office.SecureStoreService.dll
    C:WindowsassemblyGAC_MSILMicrosoft.Office.SecureStoreService14.0.0.0__71e9bce111e9429cMicrosoft.Office.SecureStoreService.dll

Nun können wir ein neues WebPart mit zwei Controls anlegen:

[ToolboxItemAttribute(false)]

public class WebPartMitSecureStore :  WebPart

{

private TextBox _txt;

private Button _buttonSave;

const string ApplicationId = "SecureStore_Beispiel";

 

protected override void CreateChildControls()

{

_txt = new TextBox() {ID = "TextBoxConnectionString"};

_buttonSave = new Button

{

Text = "Load ConnectionString!",

ID = "ButtonLoad"

};

_buttonSave.Click += LoadConnectionString;

 

Controls.Add(_buttonSave);

Controls.Add(_txt);

}

 

void LoadConnectionString(object sender, EventArgs e)

{    }

}

Das Auslesen von Daten aus dem Secure Store Service geht mit wenigen Codezeilen:

private void LoadConnectionString(object sender, EventArgs e)

{

var provider = new SecureStoreProvider { Context = SPServiceContext.Current };

 

using (var credentialCollection = provider.GetCredentials(ApplicationId))

{

// Der Connectionstring wurde als Generic CredentialType angelegt

var secureStoreCredential = (from c in credentialCollection

where c.CredentialType == SecureStoreCredentialType.Generic

select c).Single();

 

_txt.Text = GetDecryptedCredentialString(secureStoreCredential.Credential);

}

}

 

/// <summary>

/// Wandelt den Pointer in einen String um

/// </summary>

private static string GetDecryptedCredentialString(SecureString secureString)

{

var p = Marshal.SecureStringToBSTR(secureString);

 

try

{

return Marshal.PtrToStringUni(p);

}

finally

{

if (p != IntPtr.Zero)

{

Marshal.FreeBSTR(p);

}

}

}

Fazit

Als Fazit wieder die Vor- und Nachteile der hier vorgestellten Methode:

Vorteile:

  • Administration

    Konfiguration kann über die Central Administration gepflegt werden.
  • Sicherheit

    Rechte können sehr granular in SharePoint verwaltet werden. Berechtigungen für Administration können separat vergeben werden.

  • Implementierung

    Einfach realisierbar. Konfiguration kann mit wenigen Codezeilen ausgelesen werden.

  • Wartbarkeit

    Die Secure Store Services sind eine Standardfunktion von SharePoint, müssen aber separat aktiviert werden.

Nachteile:

  • Scope

    Werte können nur global gespeichert werden und es ist nur ein rein lesender Zugriff möglich!