Gewusst wie: Verwenden von Secure Store Service in einer .NET-Verbindungsassembly
Letzte Änderung: Montag, 27. September 2010
Gilt für: SharePoint Server 2010
Inhalt dieses Artikels
Vorgehensweise ohne Code für die Verwendung von Einmaliges Anmelden in einer .NET-Verbindungsassembly
Vorgehensweise mit Code für die Verwendung von Einmaliges Anmelden in einer .NET-Verbindungsassembly
Zusammenfassung
Datenbank-, Webdienst- und Windows Communication Foundation (WCF)-Dienstkonnektoren verwenden alle nur ein externes System. Microsoft Business Connectivity Services (BCS) kann eine Verbindung mit diesen externen Systemen herstellen und bietet die systemeigene Unterstützung der Integration von Einmaliges Anmelden für diese Konnektoren. Für einen Microsoft .NET Framework-Assembly-Konnektor können Sie im .NET-Assemblycode jedoch kein oder ein externes System oder viele externe Systeme verwenden. Business-Konnektivitätsdienste (Business Connectivity Services) kann nicht feststellen, was der .NET-Assemblycode bewirkt, weshalb die systemeigene Integration von Einmaliges Anmelden für den .NET-Assembly-Konnektor nicht unterstützt wird. In Business-Konnektivitätsdienste (Business Connectivity Services) gibt es allerdings zwei unterschiedliche Vorgehensweisen für die Verwendung von Einmaliges Anmelden in einer .NET-Verbindungsassembly.
Bei der ersten Vorgehensweise (ohne Code) werden die erforderlichen Schritte zum Lesen der Anmeldeinformationen aus Einmaliges Anmelden von Business-Konnektivitätsdienste (Business Connectivity Services) ausgeführt. Bei der zweiten Vorgehensweise (mit Code) werden die erforderlichen Schritte von der .NET-Verbindungsassembly ausgeführt. In diesem Thema werden beide Methoden beschrieben.
Vorgehensweise ohne Code für die Verwendung von Einmaliges Anmelden in einer .NET-Verbindungsassembly
Wie der Name schon besagt, interagiert die .NET-Verbindungsassembly nicht direkt mit Einmaliges Anmelden. Mithilfe von Filtern und Business-Konnektivitätsdienste (Business Connectivity Services) können die Anmeldeinformationen aus Einmaliges Anmelden gelesen und als Eingabeparameter an die Methode übergeben werden. Diese Vorgehensweise gilt nicht nur für den .NET-Assembly-Konnektor und kann auch für Datenbank-, Webdienst- und WCF-Konnektoren verwendet werden.
Beim Schreiben der Methode in der .NET-Verbindungsassembly benötigen Sie Eingabeparameter für die Anmeldeinformationen. Das folgende Beispiel veranschaulicht die GetEntity-Methode mit Eingabeparametern für username und password sowie andere Parameter.
public SampleEntity GetEntity(string username, string password, int id)
{
// Parameters username and password
// contain the credentials.
}
Zum Abrufen der Anmeldeinformationen in den Parametern username und password müssen Sie die Filter UsernameFilter und PasswordFilter verwenden. Beim Metadatenmodell müssen Sie die Eigenschaften SecondarySsoApplicationId und SsoProviderImplementation für das LobSystemInstance-Element definieren und die Filter entsprechenden Eingabeparametern der Methode zuordnen. Wenn von Business-Konnektivitätsdienste (Business Connectivity Services) Filter gefunden werden, werden die Eigenschaften SecondarySsoApplicationId und SsoProviderImplementation für die Zielanwendungs-ID von Einmaliges Anmelden bzw. den Einmaliges Anmelden-Anbieter verwendet.
<LobSystemInstance ...>
<Properties>
<!-- Other properties omitted. –>
<Property Name="SecondarySsoApplicationId"
Type="System.String">MyLobAppId</Property>
<Property Name="SsoProviderImplementation" Type="System.String">
Microsoft.Office.SecureStoreService.Server.SecureStoreProvider, Microsoft.Office.SecureStoreService,
Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c</Property>
</Properties>
</LobSystemInstance>
Definieren wir nun die beiden Filter für die Methode.
<Method Name="GetEntity">
<FilterDescriptors>
<FilterDescriptor Type="Username" Name="UserNameFilter"/>
<FilterDescriptor Type="Password" Name="PasswordFilter"/>
</FilterDescriptors>
</Method>
Nachdem die Filter für die Methode definiert wurden, zeigt das folgende Beispiel, wie Sie die beiden Filter den Eingabeparametern der Methode zuordnen.
<Parameter Direction="In" Name="username">
<TypeDescriptor TypeName="System.String" Name="username"
AssociatedFilter="UserNameFilter"/>
</Parameter>
<Parameter Direction="In" Name="password">
<TypeDescriptor TypeName="System.String" Name="password"
AssociatedFilter="PasswordFilter"/>
</Parameter>
Dies ist alles, wofür Sie Einmaliges Anmelden in der .NET-Verbindungsassembly benötigen. Wenn die Methode von Business-Konnektivitätsdienste (Business Connectivity Services) ausgeführt wird, werden die Anmeldeinformationen aus Einmaliges Anmelden gelesen und in den Eingabeparametern der Methode festgelegt.
Vorgehensweise mit Code für die Verwendung von Einmaliges Anmelden in einer .NET-Verbindungsassembly
Bevor Sie Code für die Verwendung von Einmaliges Anmelden schreiben, sollten Sie verstehen, wie Einmaliges Anmelden von Business-Konnektivitätsdienste (Business Connectivity Services) in anderen Konnektoren verwendet wird. In Business-Konnektivitätsdienste (Business Connectivity Services) verwenden andere Konnektoren das Metadatenmodell für die benötigten Informationen zu Einmaliges Anmelden und zur Zielanwendungs-ID. Anhand dieser Informationen rufen die Konnektoren Anmeldeinformationen zum Authentifizieren beim externen System ab. Beispielsweise werden für den Datenbankkonnektor die Eigenschaften für LobSystemInstance im Metadatenmodell wie im folgenden Beispiel dargestellt angezeigt.
<LobSystemInstance ...>
<Properties>
<!-- Other properties omitted. –>
<Property Name="SsoApplicationId"
Type="System.String">MyLobAppId</Property>
<Property Name="SsoProviderImplementation" Type="System.String"> Microsoft.Office.SecureStoreService.Server.SecureStoreProvider, Microsoft.Office.SecureStoreService, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c</Property>
</Properties>
</LobSystemInstance>
Der Datenbankkonnektor liest das Metadatenmodell und bestimmt, dass Anmeldeinformationen zum Herstellen einer Verbindung mit der Datenbank erforderlich sind und dass die Anmeldeinformationen vom angegebenen Einmaliges Anmelden-Anbieter abgerufen werden können. Wenn der Datenbankkonnektor über die erforderlichen Informationen für den Einmaliges Anmelden-Anbieter verfügt, werden die Anmeldeinformationen vom Anbieter abgerufen und der Identitätswechsel des Benutzers für die Datenbankverbindung vorgenommen.
In den folgenden Abschnitten wird erläutert, wie die Metadatenmodelleigenschaften im .NET-Assemblycode gelesen werden und wie die Einmaliges Anmelden-APIs zum Lesen von Benutzeranmeldeinformationen verwendet werden.
Lesen von Metadatenmodelleigenschaften in der .NET-Verbindungsassembly
Zum Lesen von Metadatenmodelleigenschaften in der .NET-Verbindungsassembly muss mithilfe von Code in der .NET-Assembly die IContextProperty-Schnittstelle implementiert werden. Im folgenden Code wird eine Beispielimplementierung der IContextProperty-Schnittstelle veranschaulicht.
Beispielimplementierung von "IContextProperty"
using IContextProperty = Microsoft.BusinessData.SystemSpecific.IContextProperty;
public class SampleConnector : IContextProperty
{
private IMethodInstance methodInstance;
private ILobSystemInstance lobSystemInstance;
private IExecutionContext executionContext;
#region IContextProperty implementation
public IMethodInstance MethodInstance
{
get { return this.methodInstance; }
set { this.methodInstance = value; }
}
public ILobSystemInstance LobSystemInstance
{
get { return this.lobSystemInstance; }
set { this.lobSystemInstance = value; }
}
public IExecutionContext ExecutionContext
{
get { return this.executionContext; }
set { this.executionContext = value; }
}
#endregion
// Unrelated code removed for brevity.
}
Wenn die IContextProperty-Schnittstelle von der .NET-Verbindungsassemblyklasse implementiert wird, werden IContextProperty-Eigenschaften automatisch von der Business-Konnektivitätsdienste (Business Connectivity Services)-Laufzeit initialisiert.
Zur Laufzeit verfügt der Code über den Kontext (Methodeninstanz und LobSystem Instance), in dem er ausgeführt wird. Mit einer im Code implementierten Methode können die Eigenschaften im Metadatenmodell gelesen werden. Der folgende Code zeigt, wie LobSystemInstance-Eigenschaften gelesen werden.
public SampleEntity GetEntity(int id)
{
// Read the LobSystemInstance property defined in the metadata model.
string provider =
LobSystemInstance.GetProperties()["ssoProviderImplementation"]
as string;
// Unrelated code removed for brevity.
}
Interagieren mit Secure Store Service
Verwenden Sie die folgenden Eigenschaftennamen, wenn für die .NET-Verbindungsassembly eine Anmeldeinformation aus Einmaliges Anmelden gelesen werden muss.
ssoProviderImplementation – Einmaliges Anmelden-Anbieter
SecondarySsoApplicationId – Zielanwendung für Einmaliges Anmelden
Die Eigenschaften ssoProviderImplementation und SecondarySsoApplicationId werden für das Modellieren von .NET-Assembly-Konnektormodellen in Microsoft SharePoint Designer 2010 unterstützt. Wenn für die .NET-Verbindungsassembly mehrere Anmeldeinformationen aus Einmaliges Anmelden gelesen werden müssen, wählen Sie einen Eigenschaftennamen, der für Ihr Szenario am sinnvollsten ist.
Beispielimplementierung für das Lesen von Anmeldeinformationen aus Einmaliges Anmelden
Im ersten Schritt muss der Einmaliges Anmelden-Anbieter in der Anbieterimplementierung instanziiert werden. Stellen Sie sicher, dass im Code die ISecureStoreProvider-Schnittstelle vom Anbieter implementiert wird. Im folgenden Beispiel wird eine einfache Implementierung für das Instanziieren des Einmaliges Anmelden-Anbieters veranschaulicht.
private ISecureStoreProvider GetSecureStoreProvider()
{
// Error checking removed for brevity.
string provider = this.LobSystemInstance.GetProperties()
["ssoProviderImplementation"] as string;
Type providerType = Type.GetType(provider);
return Activator.CreateInstance(providerType)
as ISecureStoreProvider;
}
Rufen Sie nach der Instanziierung des Einmaliges Anmelden-Anbieters die Anmeldeinformationen aus Einmaliges Anmelden ab. Einmaliges Anmelden gibt eine SecureStoreCredentialCollection für den Benutzer und eine Ziel-ID zurück, die eine Auflistung von Anmeldeinformationen enthält. Mit der ISecureStoreCredential-Schnittstelle werden der Anmeldeinformationstyp und der Wert definiert.
Das folgende Beispiel zeigt, wie die Anmeldeinformationen aus Einmaliges Anmelden gelesen werden. Diese Anmeldeinformationen können zum Authentifizieren bei einem externen System verwendet werden.
private void ReadCredentialsFromSecureStore()
{
// Error checking removed for brevity.
string targetId =
LobSystemInstance.GetProperties()["SecondarySsoApplicationId"]
as string;
ISecureStoreProvider provider = GetSecureStoreProvider();
// Get the credentials for the user on whose behalf the code
// is executing.
using(SecureStoreCredentialCollection credentials =
provider.GetRestrictedCredentials(targetId))
{
SecureString secureUsername;
SecureString securePassword;
// Look for username and password in credentials.
foreach (ISecureStoreCredential credential in credentials)
{
switch (credential.CredentialType)
{
case SecureStoreCredentialType.UserName:
case SecureStoreCredentialType.WindowsUserName:
secureUsername = credential.Credential;
break;
case SecureStoreCredentialType.Password:
case SecureStoreCredentialType.WindowsPassword:
securePassword = credential.Credential;
break;
default:
break;
}
}
// Username and password have been read.
// Use them as necessary.
}
// NOTE: Because we are getting the credentials in the using block,
// all the credentials that we get will be disposed after the
// using block. If you need to cache the credentials, do not use
// a using block but dispose the credentials when you are done
// with them.
}
Zusammenfassung
In Abhängigkeit von Ihrem Szenario können Sie die Vorgehensweise ohne Code oder die Vorgehensweise mit Code wählen, um Einmaliges Anmelden in Ihrer .NET-Verbindungsassembly zu verwenden. In Tabelle 1 werden die Unterschiede zwischen diesen beiden Vorgehensweisen dargestellt.
Tabelle 1. Zusammenfassung der Unterschiede bei der Vorgehensweise ohne Code bzw. mit Code
Bereich |
Vorgehensweise ohne Code |
Vorgehensweise mit Code |
---|---|---|
Interaktion mit Einmaliges Anmelden-API erforderlich |
Nein |
Ja |
Exklusiv für .NET-Assembly-Konnektor |
Nein |
Ja |
Unterstützung von SharePoint Designer |
Ja |
Teilweise |
Auswirkungen auf Methodensignatur |
Ja |
Nein |
Lesen aus mehreren Anwendungen für Einmaliges Anmelden |
Nein |
Ja |
Festlegen von Anmeldeinformationen auf LobSystemInstance-Ebene |
Nein |
Ja |