Procédure : utiliser le Service Banque d’informations sécurisé dans .NET Connectivity Assembly
Dernière modification : lundi 27 septembre 2010
S’applique à : SharePoint Server 2010
Dans cet article
Approche d’utilisation du service Banque d’informations sécurisée sans code dans .NET Connectivity Assembly
Approche d’utilisation du service Banque d’informations sécurisée avec code dans .NET Connectivity Assembly
Récapitulatif
Les connecteurs de base de données, de service Web et de service WCF (Windows Communication Foundation) utilisent tous un seul et même système externe. Microsoft Business Connectivity Services (BCS) peut se connecter à tous ces systèmes externes et prend en charge l’intégration du service Banque d’informations sécurisée en mode natif pour ces connecteurs. Toutefois, pour Microsoft .NET Framework Assembly Connector, le code d’assembly .NET peut utiliser zéro, un ou divers systèmes externes. Les Business Connectivity Services n’étant pas en mesure d’identifier les opérations effectuées par le code d’assembly .NET, ils ne prennent pas en charge le Service Banque d’informations sécurisée en mode natif pour .NET Assembly Connector. En revanche, Business Connectivity Services offre deux mécanismes distincts pour utiliser le Service Banque d’informations sécurisée dans .NET Connectivity Assembly.
Dans le premier mécanisme (approche sans code), Business Connectivity Services effectue les opérations nécessaires pour lire les informations d’identification du Service Banque d’informations sécurisée. Dans le deuxième mécanisme (approche avec code), .NET Connectivity Assembly effectue les opérations nécessaires. Cette rubrique décrit les deux mécanismes.
Approche d’utilisation du service Banque d’informations sécurisée sans code dans .NET Connectivity Assembly
Comme son nom l’indique, le .NET Connectivity Assembly n’interagit pas directement avec le Service Banque d’informations sécurisée. Moyennant des filtres, il peut utiliser Business Connectivity Services pour lire les informations d’identification à partir du service Banque d’informations sécurisée et les obtenir comme paramètres d’entrée pour la méthode. Cette approche n’est pas unique au .NET Assembly Connector et peut être utilisée avec les connecteurs de base de données, de service Web et WCF.
Au moment d’écrire la méthode dans .NET Connectivity Assembly, vous devez disposer des paramètres d’entrée pour les informations d’identification. L’exemple suivant présente la méthode GetEntity avec les paramètres d’entrée de username et password, ainsi que d’autres paramètres.
public SampleEntity GetEntity(string username, string password, int id)
{
// Parameters username and password
// contain the credentials.
}
Pour obtenir les informations d’identification dans les paramètres username et password, vous devez utiliser les filtres UsernameFilter et PasswordFilter. Dans le modèle de métadonnées, vous devez définir les propriétés SecondarySsoApplicationId et SsoProviderImplementation pour LobSystemInstance et associer les filtres aux paramètres d’entrée appropriés de la méthode. Lorsque Business Connectivity Services trouve des fichiers, il utilise les propriétés SecondarySsoApplicationId et SsoProviderImplementation pour, respectivement, l’ID de l’application cible Banque d’informations sécurisée et le fournisseur du Service Banque d’informations sécurisée.
<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>
À présent, définissons les deux filtres pour la méthode.
<Method Name="GetEntity">
<FilterDescriptors>
<FilterDescriptor Type="Username" Name="UserNameFilter"/>
<FilterDescriptor Type="Password" Name="PasswordFilter"/>
</FilterDescriptors>
</Method>
Maintenant que les filtres sont définis pour la méthode, l’exemple suivant montre comment associer les deux filtres aux paramètres d’entrée de la méthode.
<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>
Vous n’avez besoin de rien d’autre pour utiliser le Service Banque d’informations sécurisée dans .NET Connectivity Assembly. Lorsque Business Connectivity Services exécute la méthode, ils lisent les informations d’identification à partir du service Banque d’informations sécurisée et les définit dans les paramètres d’entrée de la méthode.
Approche d’utilisation du service Banque d’informations sécurisée avec code dans .NET Connectivity Assembly
Avant d’écrire le code en vue d’utiliser le Service Banque d’informations sécurisée, vous devez comprendre comment les Business Connectivity Services utilisent le Service Banque d’informations sécurisée dans les autres connecteurs. Dans les Business Connectivity Services, les autres connecteurs s’appuient sur le modèle de métadonnées pour se procurer les informations dont ils ont besoin à propos du service Banque d’informations sécurisée et de l’ID d’application cible. Les connecteurs utilisent ces informations pour récupérer les informations d’identification pour l’authentification auprès du système externe. Par exemple, pour le connecteur de base de données, les propriétés de LobSystemInstance dans le modèle de métadonnées se présentent comme dans l’exemple ci-dessous.
<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>
Le connecteur de base de données lit le modèle de métadonnées et détermine qu’il a besoin d’informations d’identification pour se connecter à la base de données et qu’il peut les obtenir auprès du fournisseur du Service Banque d’informations sécurisée. Dès lors que le connecteur de base de données dispose des informations nécessaires pour le fournisseur du Banque d’informations sécurisée, il lit les informations d’identification au niveau du fournisseur et emprunte l’identité de l’utilisateur pour la connexion à la base de données.
Les sections suivantes expliquent comment lire les propriétés du modèle de métadonnées dans votre code d’assembly .NET et comment utiliser les API Banque d’informations sécurisée pour lire les informations d’identification des utilisateurs.
Lecture des propriétés du modèle de métadonnées dans .NET Connectivity Assembly
Pour lire les propriétés du modèle de métadonnées dans .NET Connectivity Assembly, le code de l’assembly .NET doit implémenter l’interface IContextProperty. Le code suivant présente un exemple d’implémentation de l’interface IContextProperty.
Exemple d’implémentation de 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.
}
Lorsque la classe .NET Connectivity Assembly implémente l’interface IContextProperty, le runtime Business Connectivity Services initialise automatiquement les propriétés IContextProperty.
Au moment de l’exécution, le code dispose du contexte d’exécution (instance de la méthode et LobSystem Instance) ; une méthode implémentée dans le code peut lire les propriétés du modèle de métadonnées. Le code suivant montre comment les propriétés LobSystemInstance sont lues.
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.
}
Interaction avec le Service Banque d’informations sécurisé
Lorsque .NET Connectivity Assembly a besoin de lire une information d’identification à partir du Service Banque d’informations sécurisée, utilisez les noms de propriété suivants.
ssoProviderImplementation fournisseur du Service Banque d’informations sécurisée
SecondarySsoApplicationId application cible pour le Service Banque d’informations sécurisée
Les propriétés ssoProviderImplementation et SecondarySsoApplicationId sont prises en charge pour la modélisation des modèles .NET Assembly Connector dans Microsoft SharePoint Designer 2010. Si .NET Connectivity Assembly a besoin de lire plusieurs informations d’identification à partir du Service Banque d’informations sécurisée, choisissez un nom de propriété le plus pertinent possible par rapport à votre scénario.
Exemple d’implémentation pour la lecture d’informations d’identification à partir du Service Banque d’informations sécurisée
La première étape consiste à instancier le fournisseur du Service Banque d’informations sécurisée à partir de l’implémentation du fournisseur. Dans votre code, assurez-vous que le fournisseur implémente l’interface ISecureStoreProvider. L’exemple suivant présente une implémentation simple pour l’instanciation du fournisseur du Service Banque d’informations sécurisée.
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;
}
Dès lors que le fournisseur du Service Banque d’informations sécurisée est instancié, procurez-vous les informations d’identification auprès du Service Banque d’informations sécurisée. Le Service Banque d’informations sécurisée renvoie un objet SecureStoreCredentialCollection pour l’utilisateur et un ID cible, qui contient une collection d’informations d’identification. L’interface ISecureStoreCredential définit le type et la valeur des informations d’identification.
L’exemple suivant montre comment les informations d’identification sont lues au niveau du Service Banque d’informations sécurisée. Ces informations d’identification peuvent être utilisées pour l’authentification auprès d’un système externe.
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.
}
Récapitulatif
Selon votre scénario, vous pouvez opter pour l’approche sans code ou l’approche avec code pour utiliser le Service Banque d’informations sécurisée dans .NET Connectivity Assembly. Le tableau 1 récapitule les différences entre ces deux approches.
Tableau 1. Récapitulatif des différences entre les approches avec et sans code
Domaine |
Approche sans code |
Approche avec code |
---|---|---|
Interaction requise avec l’API Banque d’informations sécurisée |
Non |
Oui |
Exclusivité par rapport à .NET Assembly Connector |
Non |
Oui |
Prise en charge de SharePoint Designer |
Oui |
Partielle |
Impact sur la signature de la méthode |
Oui |
Non |
Lecture au niveau de plusieurs instances du Service Banque d’informations sécurisée |
Non |
Oui |
Possibilité de définir les informations d’identification au niveau de LobSystemInstance |
Non |
Oui |