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:
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.
Im nächsten Schritt werden die Felder des SecureStore definiert:
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:
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“.
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.
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!