2. SOMMAIRE
1. Présentation
2. Mise en place d’un service Web WCF
3. Paramétrage basique du service WCF
4. Création du client
5. Appel des méthodes du service Web
6. Paramétrage du client
7. Test du service Web
8. Gestion de la sécurité du service Web
8.1 Paramétrage de l’authentification
8.2 Paramétrage des autorisations
9. Conclusion
19/01/2012 Groupe NOVENCIA - 25 Rue de Maubeuge 75009 PARIS - Tél. : 01 44 63 53 13 - Fax : 01 44 63 53 14 - www.novencia.com - contact@novencia.com 2
3. 2. Présentation
WCF est à la nouvelle norme Microsoft pour tous types de services, qu’il s’agisse de
service Windows ou de service Web.
Tous répondent à cette normalisation ce qui simplifie la manière de communiquer
entre les différents composants d’une solution, ou même avec les applications créées
par d’autres collaborateurs.
La communication des services WCF est basée sur le protocole SOAP.
La sécurité de ces services consiste à leur inclure l’authentification, l’encryptage des
données et l’assurance de l’intégrité des données.
Nous allons voir comment traiter ces points par un exemple concret.
19/01/2012 Groupe NOVENCIA - 25 Rue de Maubeuge 75009 PARIS - Tél. : 01 44 63 53 13 - Fax : 01 44 63 53 14 - www.novencia.com - contact@novencia.com 3
4. 2.Mise en place d’un service Web WCF
Création d’un nouveau projet « Application du service WCF ».
Par défaut, nous voyons bien que Visual Studio a créé un service Service1, son
interface IService1 servant de contrat pour communiquer, et a créé le fichier de
configuration (ici Web.config, car il s’agit d’une application de service destiné à être
hébergée sous IIS, c'est-à-dire un service Web).
J’aurais aussi pu créer un projet de type « Bibliothèque de service » pour générer un
service Windows.
J’aurais alors eu un projet contenant une classe Service1, son interface IService1 et un fichier de
configuration app.config.
19/01/2012 Groupe NOVENCIA - 25 Rue de Maubeuge 75009 PARIS - Tél. : 01 44 63 53 13 - Fax : 01 44 63 53 14 - www.novencia.com - contact@novencia.com 4
5. 2.Mise en place d’un service Web WCF (suite)
Cependant je vais rester sur le service Web pour effectuer ma démonstration.
Le service contient aussi par défaut deux méthodes d’appel.
La première public string GetData(int value) permet de récupérer les données à partir
d’un entier passé en paramètre.
La seconde public CompositeType GetDataUsingDataContract(CompositeType
composite) permet de récupérer les données en passant en paramètre un type
complexe, et en retournant ce même objet mis à jour.
Le fichier d’interface contient l’interface présentant les méthodes exposées par le
service. Elle a donc pour attribut [ServiceContract] et les méthodes qu’elle expose ont
pour attribut [OperationContract].
Au niveau du type complexe utilisé pour faire passer les données dans la méthode
GetDataUsingDataContract, celui-ci est défini dans une classe qui a pour attribut
[DataContract] et chacun des membres qu’elle expose ont pour attribut
[DataMember].
19/01/2012 Groupe NOVENCIA - 25 Rue de Maubeuge 75009 PARIS - Tél. : 01 44 63 53 13 - Fax : 01 44 63 53 14 - www.novencia.com - contact@novencia.com 5
6. 3.Paramétrage basique du service WCF
Par défaut, Visual Studio laisse complètement ouvert l’accès au service.
Pour permettre plus de précision dans la configuration, je conseille de configurer les
points d’entrée en spécifiant une configuration de binding et de behaviour pour le
service et pour les endpoints.
19/01/2012 Groupe NOVENCIA - 25 Rue de Maubeuge 75009 PARIS - Tél. : 01 44 63 53 13 - Fax : 01 44 63 53 14 - www.novencia.com - contact@novencia.com 6
7. 3.Paramétrage basique du service WCF (suite)
La configuration des bindings peut aussi être personnalisée.
On pourra alors créer un bloc de configuration de bindings comme il suit :
Il faudra alors lier le point d’entrée à cette configuration :
19/01/2012 Groupe NOVENCIA - 25 Rue de Maubeuge 75009 PARIS - Tél. : 01 44 63 53 13 - Fax : 01 44 63 53 14 - www.novencia.com - contact@novencia.com 7
8. 4.Création du client
Pour créer le client, j’utilise l’utilitaire svdutil.exe, qui va générer le client.
Pour pouvoir l’utiliser, le service doit être en fonction.
Je lance donc l’application puis l’utilitaire avec la ligne de commande suivante :
svcutil.exe http://localhost:3312/Service1.svc?wsdl
L’utilitaire me créé un fichier Service1.cs qui correspond à ma classe client du service.
Cette classe contient tout le nécessaire pour faire appel au service.
19/01/2012 Groupe NOVENCIA - 25 Rue de Maubeuge 75009 PARIS - Tél. : 01 44 63 53 13 - Fax : 01 44 63 53 14 - www.novencia.com - contact@novencia.com 8
9. 5. Appel des méthodes du service Web
Pour faire appel aux méthodes du service, je créé une application cliente (de type
console par exemple).
J’ajoute à ce projet la classe client que je viens de générer.
Dans la méthode Main de la classe Program, je fais appel aux méthodes du service.
19/01/2012 Groupe NOVENCIA - 25 Rue de Maubeuge 75009 PARIS - Tél. : 01 44 63 53 13 - Fax : 01 44 63 53 14 - www.novencia.com - contact@novencia.com 9
10. 6. Paramétrage du client
J’effectue le paramétrage du client en ajoutant un fichier app.config.
Dans la configuration j’ajoute les tags relatifs à la configuration du client, dans lesquels
je configure les points d’entrée au service.
Pour pouvoir configurer le port d’écoute, je force Visual Studio à lancer le service web
(hébergé sous IIS) avec un port bien précis.
J’effectue ceci dans les propriétés du projet de site web.
19/01/2012 Groupe NOVENCIA - 25 Rue de Maubeuge 75009 PARIS - Tél. : 01 44 63 53 13 - Fax : 01 44 63 53 14 - www.novencia.com - contact@novencia.com 10
11. 6. Paramétrage du client (suite)
Voici donc la configuration du client :
19/01/2012 Groupe NOVENCIA - 25 Rue de Maubeuge 75009 PARIS - Tél. : 01 44 63 53 13 - Fax : 01 44 63 53 14 - www.novencia.com - contact@novencia.com 11
12. 7. Test du service Web
Pour tester l’appel au service, je démarre les deux projets en simultanés
L’ application Console devra attendre que le service soit disponible. Il faut donc régler
l’ordre d’exécution des projets.
Nous pouvons alors tester la solution.
Le rendu montre bien que le client appelle bien le service qui modifie les données
envoyées avant de les retourner. Les deux méthodes sont appelées sans problème.
19/01/2012 Groupe NOVENCIA - 25 Rue de Maubeuge 75009 PARIS - Tél. : 01 44 63 53 13 - Fax : 01 44 63 53 14 - www.novencia.com - contact@novencia.com 12
13. 8. Gestion de la sécurité du service Web
8.1 Paramétrage de l’authentification
L’authentification est gérée par le mode de sécurité du binding.
Il existe trois possibilités pour paramétrer le mode de sécurité du binding :
- le mode « Transport », qui permet une connexion en secure socket (SSL) et nécessite
l’authentification à l’appel. Ce mode est possible pour tous les bindings.
- Le mode « Message », qui nécessite que les données d’authentification et de sécurisation soient
présentes dans les entêtes de chaque message. Il ne peut fonctionner que pour une
communication de point à point (sans intermédiaire). N’est pas permis pour le WebHttpBinding.
- Le mode « TransportWithMessageCredential » utilise les fonctionnalités de SSL pour la sécurité
de transport des messages, et la méthode se sécurité du mode message pour chaque message.
Pour activer le mode « Transport » il faut configurer l’hôte avec un certificat SSL (en l’occurrence
pour un service Web, le paramétrage est à effectuer sous IIS.). Une fois le service sous HTTPS, il
faut paramétrer le mode de sécurité du binding de la manière suivante pour le serveur et pour le
client :
Pour travailler sous Visual Studio, Microsoft a permis un mode permettant de gérer
l’authentification comme si l’on était en HTTPS, mais en restant en HTTP.
La configuration utilisée est :
19/01/2012 Groupe NOVENCIA - 25 Rue de Maubeuge 75009 PARIS - Tél. : 01 44 63 53 13 - Fax : 01 44 63 53 14 - www.novencia.com - contact@novencia.com 13
14. 8. Gestion de la sécurité du service Web (suite)
8.1 Paramétrage de l’authentification (suite)
Par la suite, le type d’authentification est défini dans le tag <transport>, comme par exemple :
Pour un service Web (webHttpBinding) utilisant le mode de sécurité « Transport », les différents types
d’authentification sont :
- None : désactive l’authentification.
- Basic : le client est authentifié avec un login et mot de passe. Il n’y a pas de cryptage des données
avant transfert.
- Digest : Similaire à l’authentification basique sauf que le login et le mot de passe sont cryptés par une
fonction de hachage avant d’être transmis, ce qui permet de ne pas les voir en clair.
- Ntlm : force l’authentification NTLM
- Windows : utilise l’authentification utilisée sur le serveur Windows (Active directory ou NTLM).
- Certificate : le client doit présenter un certificat X.509 que le service valide.
Pour les autres types de binding, notament ceux basés sur le mode de sécurité « Message », les types
d’authentification peuvent aussi être :
- IssuedToken : le client et le service dépendent d’un service de token sécurisés STS comme Microsoft
Windows CardSpace.
- UserName : le client est authentifié par nom d’utilisateur et mot de passe.
19/01/2012 Groupe NOVENCIA - 25 Rue de Maubeuge 75009 PARIS - Tél. : 01 44 63 53 13 - Fax : 01 44 63 53 14 - www.novencia.com - contact@novencia.com 14
15. 8. Gestion de la sécurité du service Web (suite)
8.2 Paramétrage des autorisations
Pour faire passer l’authentification Windows, il faut modifier la configuration et
ajouter le tag suivant dans <system.serviceModel> :
Pour pouvoir l’intercepter, la classe du service doit paramétrer la compatibilité
ASPNET, en positionnant en entête de la classe :
Cette classe est dans l’espace de nom System.ServiceModel.Activation.
Une fois ce paramétrage effectué, il est alors possible d’atteindre le contexte HTTP du
service Web.
Dans le contexte, il est possible de récupérer l’identité de l’utilisateur.
J’ai donc modifié la requête GetData de manière à récupérer et retourner les données
de l’utilisateur, et vérifier que l’utilisateur a le rôle lui donnant accès aux données du
service.
19/01/2012 Groupe NOVENCIA - 25 Rue de Maubeuge 75009 PARIS - Tél. : 01 44 63 53 13 - Fax : 01 44 63 53 14 - www.novencia.com - contact@novencia.com 15
16. 8. Gestion de la sécurité du service Web (suite)
8.2 Paramétrage des autorisations (suite)
Une fois ce paramétrage effectué, il est alors possible d’atteindre le contexte HTTP du
service Web.
Dans le contexte, il est possible de récupérer l’identité de l’utilisateur.
J’ai donc modifié la requête GetData de manière à récupérer et retourner les données
de l’utilisateur, et vérifier que l’utilisateur a le rôle lui donnant accès aux données du
service.
19/01/2012 Groupe NOVENCIA - 25 Rue de Maubeuge 75009 PARIS - Tél. : 01 44 63 53 13 - Fax : 01 44 63 53 14 - www.novencia.com - contact@novencia.com 16
17. 8. Gestion de la sécurité du service Web (suite)
8.2 Paramétrage des autorisations (suite)
Dans le code, j’ai vérifié si l’utilisateur avait le rôle « AyandDroitAuService ».
Ce rôle doit être défini dans les rôles dans le serveur Windows hébergeant le service
web, et l’utilisateur doit être connu de ce serveur.
De plus cet utilisateur doit avoir ce rôle dans le serveur pour pouvoir accéder à la
méthode GetData.
Le résultat obtenu montre qu’en l’occurrence l’utilisateur n’a pas les droits pour
utiliser la méthode GetData.
19/01/2012 Groupe NOVENCIA - 25 Rue de Maubeuge 75009 PARIS - Tél. : 01 44 63 53 13 - Fax : 01 44 63 53 14 - www.novencia.com - contact@novencia.com 17
18. 9. Conclusion
WCF permet assez facilement de créer des services sécurisés.
Il est possible de définir tous les paramètres au niveau de la configuration. Il est aussi
possible de faire de même dans le code.
Personnellement, je préfère le paramétrage par le biais de la configuration, car cela
permet une plus grande souplesse en cas de migration ou de changement de
stratégie.
Mon exemple est basé sur un service Web, mais je rappelle qu’il est possible de faire
de même avec un service Windows.
Le service Windows a de plus l’avantage de ne pas être dépendant du protocole http,
ce qui permet davantage de possibilités de modes de communication et donc
davantage de possibilités pour paramétrer la sécurité.
19/01/2012 Groupe NOVENCIA - 25 Rue de Maubeuge 75009 PARIS - Tél. : 01 44 63 53 13 - Fax : 01 44 63 53 14 - www.novencia.com - contact@novencia.com 18