Sécurisation des WCF   Auteur: Marc-Aurèle KOUAIK
SOMMAIRE             1. Présentation             2. Mise en place d’un service Web WCF             3. Paramétrage basique ...
2. Présentation    WCF est à la nouvelle norme Microsoft pour tous types de services, qu’il s’agisse de    service Windows...
2.Mise en place d’un service Web WCF    Création d’un nouveau projet « Application du service WCF ».    Par défaut, nous v...
2.Mise en place d’un service Web WCF (suite)    Cependant je vais rester sur le service Web pour effectuer ma démonstratio...
3.Paramétrage basique du service WCF    Par défaut, Visual Studio laisse complètement ouvert l’accès au service.    Pour p...
3.Paramétrage basique du service WCF (suite)    La configuration des bindings peut aussi être personnalisée.    On pourra ...
4.Création du client    Pour créer le client, j’utilise l’utilitaire svdutil.exe, qui va générer le client.    Pour pouvoi...
5. Appel des méthodes du service Web    Pour faire appel aux méthodes du service, je créé une application cliente (de type...
6. Paramétrage du client    J’effectue le paramétrage du client en ajoutant un fichier app.config.    Dans la configuratio...
6. Paramétrage du client (suite)    Voici donc la configuration du client :19/01/2012    Groupe NOVENCIA - 25 Rue de Maube...
7. Test du service Web    Pour tester l’appel au service, je démarre les deux projets en simultanés    L’ application Cons...
8. Gestion de la sécurité du service Web    8.1 Paramétrage de l’authentification    L’authentification est gérée par le m...
8. Gestion de la sécurité du service Web (suite)    8.1 Paramétrage de l’authentification (suite)    Par la suite, le type...
8. Gestion de la sécurité du service Web (suite)    8.2 Paramétrage des autorisations    Pour faire passer l’authentificat...
8. Gestion de la sécurité du service Web (suite)    8.2 Paramétrage des autorisations (suite)    Une fois ce paramétrage e...
8. Gestion de la sécurité du service Web (suite)    8.2 Paramétrage des autorisations (suite)    Dans le code, j’ai vérifi...
9. Conclusion    WCF permet assez facilement de créer des services sécurisés.    Il est possible de définir tous les param...
Upcoming SlideShare
Loading in...5
×

Sécurisation des wcf

1,532

Published on

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
1,532
On Slideshare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
35
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Sécurisation des wcf

  1. 1. Sécurisation des WCF Auteur: Marc-Aurèle KOUAIK
  2. 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. Conclusion19/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. 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. 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, cest-à-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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×