WebServices - TP7

From JayblancWiki

Jump to: navigation, search

Contents

TP7 : Utiliser WS-Security

Sources à télécharger : sources (tar.gz) sources (zip)

L'objectif du TP est de mettre en oeuvre la sécurité dans les web services

Documentation de Metro : https://metro.dev.java.net/guide/

Les sources contiennent une version du Bookmarker ainsi qu'un client. Il s'agit de sécuriser le Bookmarker pour qu'il n'utilise plus le username et le password en paramètres des opérations. Il faudra faire passer le username et le password dans l'entête SOAP du message. Par défaut, Metro cryptera aussi le corps du message.

Examiner les sources fournies

Examinez attentivement les sources fournies.
Le client est une application web utilisant des Servlet et des Filter.
Dans cette version, le nom de l'utilisateur ainsi que son password son mis en mémoire dans la session Http puis utilisés par le Client WebService dans chaque appel.
Le Filter n'est là que pour s'assurer que ces variables ont été renseignées ; si ce n'est pas le cas il force l'application vers une page JSP spéciale pour le login.

Question 1 : Que se passe-t-il si vous utilisez un nom d'utilisateur qui n'existe pas dans votre UserManager ? Pourquoi ?

Question 2 : Ecrivez le diagramme de séquence correspondant au listing des bookmarks une fois l'utilisateur loggé.

Question 3 : Avec wireshark, faites une capture du message SOAP envoyé lors de la création d'un bookmark. Copiez/Coller le message pour le conserver dans un fichier texte.

Modification du Bookmarker

Modifiez les méthodes de votre service Bookmarker pour retirer toute référence au username et au password. Vous remarquerez que l'appel sous-jacent au service Bookmark nécessite de connaitre le nom de l'utilisateur ; lorsque la sécurité sera activée, ce nom d'utilisateur sera disponible dans le contexte du web service.
Pour utiliser le contexte dans votre Bookmarker vous devez injecter la ressource :

   @Resource
   private WebServiceContext wsCtxt;

L'utilisateur ayant fait l'appel WS est récupéré par la Stack WS et injecté dans le contexte par le serveur. On parle du Principal.
Récupérez le nom de l'utilisateur ayant fait l'appel à l'aide du Principal et utilisez le pour les appels au service Bookmark.

Sécurisation du Bookmarker

Dans votre projet netbeans, dans la liste des web services, faites un clic droit sur le Bookmarker service puis éditez ses attributs (EditWebServiceAttributes).
Cochez la case Secure Service et choisissez comme mécanisme de sécurité : User Name Authentication With Password Derived Key
Votre service est maintenant sécurisé :-)
Un fichier a en fait été généré, wsit-<servicename>.xml Cherchez ce fichier et observez son contenu.

Question 4 : Dans le fichier de configuration de la sécurité (WSIT), quelle partie fait référence au choix du User Name Authentication ?

Adaptation du client

Il s'agit maintenant d'adapter votre client pour qu'il injecte correctement les informations de login dans les appels SOAP au Bookmarker.
Dans les Web Service Reference du client, faites une mise à jour du client.
Par un clic droit sur cette référence, choisissez, comme pour le serveur, d'éditer les attributs du service
Vérifiez que la sécurité du client est bien activée et qu'elle utilise les valeur par défaut pour le développement
Un fichier de configuration du client a également été généré, cherchez ce fichiers dans votre projet.

Question 5 : Quelles sont les valeurs par défaut pour le login et le password ?

Question 6 : Faites un capture wireshark de la création d'un bookmark et observez le message SOAP qui a été envoyé. Toujours par copier coller, conservez une copie de ce fichier et comparez le à votre ancienne version. Quels commentaires pouvez vous faire ?

Vous remarquerez que désormais nous utilisons un user qui est figé et que le login sur l'application web n'a plus aucun sens...
Essayer de modifier ces valeurs par défaut et observez le problème dans le log du serveur.

Question 7 : D'après vous, quel serait le moyen le plus propre pour gérer l'authentification sur l'application web et propager cette authentification jusqu'au WebService ? Quel est l'emplacement idéal pour les user/password ?

Synthétisez vos réponses dans un fichier texte ou pdf que vous m'enverrez par email à la fin du tp.

Personal tools
Myself
Teaching