SOA: Comment securiser un webservice?

Les WebServices et les architectures SOA sont devenu incontournable dans un Système d’Information. Bien que très pratiques, les WebServices ont une faiblesse : du fait que le protocole de transfert des données soit XML, celles-ci sont exposées aux « observateurs » réseau. Pour des « petits » services ou des services « grand public » cela n’a pas d’impact évidemment, mais quand des données sensibles sont envoyées/retournées (comme des mots de passe ou des informations confidentielles) à chaque requête/réponse, la notion de sécurité commence a plané dans l’air.

 

C’est pour cette raison qu’une entité appelée OASIS (Organization for the Advancement of Structured Information Standards) a spécifié une norme de sécurisation pour les WebServices appelé « Web Services Security : SOAP Message Security ». Cette norme propose un certain nombre d’extensions pour le protocole SOAP (1.1 et 1.2) qui peuvent être utilisés pour créer des services sécurisés. Elle fourni trois mécanismes principaux : capacité d’envoyer des jetons de sécurité a l’intérieur d’un message, intégrité des messages et confidentialité des messages.

L’Apache SoftwareFoundation a développé une implémentation nommée WSS4J. C’est une bibliothèque Java qui peut être employée pour signer et vérifier des messages SOAP. WSS4J utilise Apache Axis et Apache XML-Security, il est également interoperable avec serveur/clients basés sur JAX-RPC et .NET. Il supporte aussi le « Username Token Profile V1.0 », fourni aussi par OASIS, qui est le moyen de spécifier un nom d’utilisateur avec un mot de passe optionnel.

 

Le but de ce article est de montrer comment utiliser cette API pour sécuriser l’envoie/réception des jetons de sécurité dans un WebService. Il est basé sur Axis pour montrer comment développer des « Handlers » pour gérer tant la partie serveur que le client. WSS4J et toutes les bibliothèques nécessaires doivent être déjà installées…

 

Pavel Blanco

Ingénieur de développement OOsphère