sécurisation des wcf

18
Sécurisation des WCF Auteur: Marc-Aurèle KOUAIK

Upload: novencia-groupe

Post on 14-Jun-2015

1.523 views

Category:

Documents


2 download

TRANSCRIPT

Page 1: Sécurisation des wcf

Sécurisation des WCF Auteur: Marc-Aurèle KOUAIK

Page 2: Sécurisation des wcf

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 - [email protected] 2

Page 3: Sécurisation des wcf

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 - [email protected] 3

Page 4: Sécurisation des wcf

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.

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 - [email protected] 4

J’aurais alors eu un projet contenant une classe Service1, son interface IService1 et un fichier de

configuration app.config.

Page 5: Sécurisation des wcf

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 - [email protected] 5

Page 6: Sécurisation des wcf

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 - [email protected] 6

Page 7: Sécurisation des wcf

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 - [email protected] 7

Page 8: Sécurisation des wcf

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 - [email protected] 8

Page 9: Sécurisation des wcf

5. Appel des méthodes du service 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 - [email protected] 9

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.

Page 10: Sécurisation des wcf

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 - [email protected] 10

Page 11: Sécurisation des wcf

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 - [email protected] 11

Page 12: Sécurisation des wcf

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 - [email protected] 12

Page 13: Sécurisation des wcf

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 - [email protected] 13

Page 14: Sécurisation des wcf

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 - [email protected] 14

Page 15: Sécurisation des wcf

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 - [email protected] 15

Page 16: Sécurisation des wcf

8. Gestion de la sécurité du service Web (suite)

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 - [email protected] 16

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.

Page 17: Sécurisation des wcf

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 - [email protected] 17

Page 18: Sécurisation des wcf

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 - [email protected] 18