Comment : sécuriser un service à l'aide d'informations d'identification Windows
Cette rubrique décrit comment activer la sécurité de transfert sur un service Windows Communication Foundation (WCF) résidant dans un domaine Windows et appelé par des clients du même domaine. Pour plus d'informations sur ce scénario, consultez Sécurité de transport avec l'authentification Windows. Pour obtenir un exemple d'application, consultez l'exemple WSHttpBinding.
Cette rubrique suppose que vous avez une interface de contrat existante et que l'implémentation est déjà définie et s'ajoute à cela. Vous pouvez également modifier un service et un client existants.
Vous pouvez sécuriser complètement un service avec les informations d'identification Windows dans le code. Vous pouvez également omettre un peu du code en utilisant un fichier de configuration. Cette rubrique décrit les deux approches. Veillez à n'en utiliser qu'une seule, pas les deux.
Les trois premières procédures indiquent comment sécuriser le service à l'aide du code. Les quatrième et cinquième procédures indiquent comment le faire avec un fichier de configuration.
Utilisation du code
L'intégralité du code du service et du client est présentée dans la section Exemple à la fin de cette rubrique.
La première procédure vous guide tout au long de la création et la configuration d'une classe WSHttpBinding dans le code. La liaison utilise le transport HTTP. La même liaison est utilisée sur le client.
Pour créer un WSHttpBinding qui utilise des informations d'identification Windows et la sécurité de message
Le code de cette procédure est inséré au début de la méthode
Run
de la classeTest
dans le code de service indiqué à la section Exemple.Créez une instance de la classe WSHttpBinding.
Affectez la valeur Message à la propriété Mode de la classe WsHttpSecurity.
Affectez la valeur Windows à la propriété ClientCredentialType de la classe MessageSecurityOverHttp.
Le code de cette procédure se présente comme suit :
Utilisation de la liaison dans un service
Il s'agit de la deuxième procédure, qui indique comment utiliser la liaison dans un service auto-hébergé. Pour plus d'informations sur les services d'hébergement, consultez Hébergement de services.
Pour utiliser une liaison dans un service
Insérez le code de cette procédure après celui de la procédure précédente.
Créez une variable Type nommée
contractType
et assignez-lui le type de l'interface (ICalculator
). Lorsque vous utilisez Visual Basic, utilisez l'opérateur GetType ; lorsque vous utilisez C#, utilisez le mot clé typeof.Créez une deuxième variable Type nommée
serviceType
et assignez-lui le type du contrat implémenté (Calculator
).Créez une instance de la classe Uri nommée
baseAddress
avec l'adresse de base du service. L'adresse de base doit avoir un schéma qui correspond au transport. Dans ce cas, le schéma de transport est HTTP et l'adresse inclut l'URI (Uniform Resource Identifier) spécial « localhost » et un numéro de port (8036), ainsi qu'une adresse de point de terminaison de base (serviceModelSamples/) : https://localhost:8036/serviceModelSamples/.Créez une instance de la classe ServiceHost avec les variables
serviceType
etbaseAddress
.Ajoutez un point de terminaison au service à l'aide du
contractType
, de la liaison et d'un nom de point de terminaison (secureCalculator). Un client doit concaténer l'adresse de base et le nom de point de terminaison lors du lancement d'un appel au service.Appelez la méthode Open pour démarrer le service. Le code de cette procédure est indiqué ici :
Utilisation de la liaison sur un client
Cette procédure indique comment générer un proxy qui communique avec le service. Le proxy est généré avec ServiceModel Metadata Utility Tool (Svcutil.exe), qui utilise les métadonnées du service pour le créer.
Cette procédure crée également une instance de la classe WSHttpBinding pour communiquer avec le service, puis appelle ce dernier.
Cet exemple utilise uniquement du code pour créer le client. Vous pouvez aussi, si vous le souhaitez, utiliser un fichier de configuration, indiqué dans la section qui suit cette procédure.
Pour utiliser une liaison sur un client avec le code
Utilisez l'outil SvcUtil.exe pour générer le code du proxy à partir des métadonnées du service. Pour plus d'informations, consultez Comment : créer un client Windows Communication Foundation. Le code du proxy généré hérite de la classe ClientBase, ce qui garantit que chaque client possède les constructeurs, méthodes et propriétés nécessaires pour communiquer avec un service WCF. Dans cet exemple, le code généré inclut la classe
CalculatorClient
, qui implémente l'interfaceICalculator
, activant ainsi la compatibilité avec le code de service.Le code de cette procédure est inséré au début de la méthode
Main
du programme client.Créez une instance de la classe WSHttpBinding et affectez à son mode de sécurité la valeur Message et à son type d'informations d'identification client la valeur Windows. L'exemple nomme la variable
clientBinding
.Créez une instance de la classe EndpointAddress nommée
serviceAddress
. Initialisez l'instance avec l'adresse de base concaténée avec le nom de point de terminaison.Créez une instance de la classe de client générée avec les variables
serviceAddress
etclientBinding
.Appelez la méthode Open, comme illustré dans le code suivant :
Appelez le service et affichez les résultats.
Utilisation du fichier de configuration
Au lieu de créer la liaison avec le code de procédure, vous pouvez utiliser le code suivant indiqué pour la section Liaisons du fichier de configuration.
Si vous n'avez pas déjà de service défini, consultez Conception et implémentation de services et Configuration des services.
Remarque Ce code de configuration est utilisé dans les fichiers de configuration du service et du client.
Pour activer la sécurité de transfert sur un service dans un domaine Windows à l'aide de la configuration
Ajoutez un élément <wsHttpBinding> dans la section de l'élément <bindings> du fichier de configuration.
Ajoutez un élément <binding> à l'élément <WSHttpBinding> et affectez à l'attribut configurationName une valeur appropriée à votre application.
Ajoutez un élément <security> et affectez à l'attribut mode la valeur Message.
Ajoutez un élément <message> et affectez à l'attribut clientCredentialType la valeur Windows.
Dans le fichier de configuration du service, remplacez la section <bindings> par le code suivant. Si vous n'avez pas déjà de fichier de configuration de service, consultez Utilisation de liaisons pour configurer des services et des clients.
<bindings> <wsHttpBinding> <binding name = "wsHttpBinding_Calculator"> <security mode="Message"> <message clientCredentialType="Windows"/> </security> </binding> </wsHttpBinding> </bindings>
Utilisation de la liaison sur un client
Cette procédure indique comment générer deux fichiers : un proxy qui communique avec le service et un fichier de configuration. Elle décrit également les modifications du programme client, qui est le troisième fichier utilisé sur le client.
Pour utiliser une liaison sur un client avec la configuration
Utilisez l'outil SvcUtil.exe pour générer le code proxy et le fichier de configuration à partir des métadonnées du service. Pour plus d'informations, consultez Comment : créer un client Windows Communication Foundation.
Remplacez la section <Bindings> du fichier de configuration généré par le code de configuration de la section précédente.
Le code de la procédure est inséré au début de la méthode
Main
du programme client.Créez une instance de la classe de client générée qui passe le nom de la liaison dans le fichier de configuration comme un paramètre d'entrée.
Appelez la méthode Open, comme illustré dans le code suivant :
Appelez le service et affichez les résultats.
Exemple
Voir aussi
Tâches
Comment : créer un client Windows Communication Foundation
Référence
Concepts
Sécurisation de services
Vue d'ensemble de la sécurité