www.objis.com - Formation Web Services 1 1
A propos d’Objis… Centre de formation Java/J2ee depuis 2005 Paris – Lyon - Dakar 70% de pratique Tutoriaux en libre accès sur www.objis.com 1000 visiteurs quotidiens venus de 100 pays Cursus développeur / Architecte / Chef de projet Nouveauté 2011 : sécurité & performance www.objis.com - Formation Web Services www.objis.com - Formation SPRING 2
8 fondamentaux et 7 bonnes pratiques WS Fondamentaux : SOA, WS, standards et interropérabilité Fondamentaux : web services SOAP avec Java 6 Fondamentaux : valeur ajoutée specs WS-* Fondamentaux : méthodologies Développement WS Fondamentaux : différence WS SOAP 'Rpc' et 'Document' Fondamentaux : architecture & approche REST Fondamentaux : critère choix WS 'lourd'/soap ou 'léger'/rest Fondamentaux : stratégies sécurité WS Bonne pratique : validation conformité de votre web service Bonne pratique : lecture / compréhension WSDL Bonne pratique : dévelopement. WS 'Document' Bonne pratique : création intercepteurs (Handlers) Bonne pratique : productivité dev/design WS avec IDE Bonne pratique : méthodologie dev web service top-down Bonne pratique : implément. specs WS-* via frameworks www.objis.com - Formation Web Services www.objis.com - Formation SPRING 3
Objectifs de la formation WS Objis 1) Comprendre bénéfices, challenges, standards WS 2) Comprendre la relation entre WS et archi. SOA 3) Comprendre dev web services avec Java / Jee 4) Identifier fondamentaux & bonnes pratiques WS www.objis.com - Formation Web Services www.objis.com - Formation SPRING 4
Sommaire Partie 1 : introduction Web Services / SOA (p. 6) Partie 2 : lecture WSDL (p. 39) Partie 3 : développement WS 'lourd' SOAP (p. 54) Partie 4 : développement WS 'léger' REST (p. 79) Partie 5 : comparaison WS SOAP / REST (p. 86) Partie 6 : Sécurité WS (p. 89) www.objis.com - Formation Web Services www.objis.com - Formation SPRING 5
Partie 1 : Introduction Web Services Historique et positionnement Web services / SOA Architecture SOA : les 5 caractéristiques clés Architecture Web services Web service et Java : Java 6 et le monde JAX-WS Interropérabilité : les spécifications WS-* Conformité WS-I : choix de frameworks dev Java WS Conformité WS-I : outils 'Monitor' et 'Analyzer' www.objis.com - Formation Web Services www.objis.com - Formation SPRING 6
Relation Web Services / SOA Jusqu'où la DSI met en oeuvre SOA ? Voir Formation SOA 2) Transactions 3) Qualité service 1) Sécurité Rôle archi. WS Rôle dev. www.objis.com - Formation Web Services www.objis.com - Formation SPRING 7
Environnement SOA ESB www.objis.com - Formation Web Services Services de présentation ESB Processus métiers orchestrée Adaptateurs Service Service Service Services composites R o u t a g e T r a n s f o m t i M e s s a g e s Services bas niveau Systèmes métiers ERP CRM SCM Portail www.objis.com - Formation Web Services www.objis.com - Formation SPRING 8
SOA : 5 caractéristiques clés Contrat de service Transparence du service Granularité du service Composition du service Annuaire de service www.objis.com - Formation Web Services www.objis.com - Formation SPRING 9
Caractéristique SOA N°1 : interface / contrat de service Quelles opérations disponibles entre le client et le service ? Quelles données en paramètres ?Comment solliciter le service ? Solution : WSDL + XSD : description format message XML pour chaque opération WSDL 1.1 complexe Ports ? Bindings ? WSDL 2.0 plus simple Courbe apprentissage plus réduite WS-Adressing www.objis.com - Formation Web Services www.objis.com - Formation SPRING 10
interface / contrat de service Caractéristique SOA : interface / contrat de service Service(s) XSD 1 Opération XSD Message In/Out XSD 2 Opération XSD Message In/Out www.objis.com - Formation Web Services www.objis.com - Formation SPRING 11
Caractéristique SOA N° 2: Transparence Appeler un service sans avoir besoin de connaître son emplacement physique sur le réseau Solution : WS-Adressing Définir dans le message le endpoint / l'action pour un Web Service basé sur Soap Notion de 'destination logique' www.objis.com - Formation Web Services www.objis.com - Formation SPRING 12
Caractéristique SOA N° 2: Transparence ? www.objis.com - Formation Web Services www.objis.com - Formation SPRING 13
Caractéristique SOA N° 2: Transparence www.objis.com - Formation Web Services www.objis.com - Formation SPRING 14
Caractéristique SOA N° 2: Transparence www.objis.com - Formation Web Services www.objis.com - Formation SPRING 15
Caractéristique SOA N° 3: Granularité et état Ex : besoin d'un service web qui ajoute un utilisateur dans le CRM du SI Solution 1 : Un seul 'gros' service AjouterClient (OrganisationId) → id spécifique CRM PB : limite réutilisabilité du service par autres clients Solution 2 : plusieurs petits' services RechercherOrganisationIdClient(Client) AjouterAdresseClient() Maximiser la réutilisabilité ! La gestion de l'état ajoute de la complexité Ex service nécessitant validation (id en session ?) www.objis.com - Formation Web Services www.objis.com - Formation SPRING 16
Caractéristique SOA N°4 : Composition de services Maximiser la création de services composites 1 service = Ensemble d'autres services Solution : norme BPEL : orchestration de services www.objis.com - Formation Web Services www.objis.com - Formation SPRING 17
Caractéristique SOA N°5 : Annuaire & publication Aujourd'hui peu d'entreprises utilisent UDDI Peu d'annuaires publics (essais de SAP,IBM..) La 'découverte automatique' se heurte au business Réalité : besoin de contrats commerciaux ! En pratique : Pour web services SOAP, un WSDL clair suffit pour lister les services et opérations disponibles Annuaire interne Ex : Juddi www.objis.com - Formation Web Services www.objis.com - Formation SPRING 18
Les technologies d'une plate forme SOA Votre web services www.objis.com - Formation Web Services www.objis.com - Formation SPRING 19
Architecture SI et place Web services autour du bus ESB www.objis.com - Formation Web Services www.objis.com - Formation SPRING 20
Rôles projet SOA www.objis.com - Formation Web Services www.objis.com - Formation SPRING 21
Orchestration avec BPEL www.objis.com - Formation Web Services www.objis.com - Formation SPRING 22
Apparition web services et SOA : contexte métier Besoin : mettre le système d'information (SI) de l'entreprise au service du business !! AVANT : SI = ensemble d'applications Gestion relation client (CRM) Gestion flux logistique (SCM) Progiciel de gestion entreprise (ERP) Gestion processus métiers (BPM) Entrepot de données (Datawarehouse) ... DEMAIN : SI = ensemble de services Web service : bras armé de SOA ! www.objis.com - Formation Web Services www.objis.com - Formation SPRING 23
Apparition Web Services : contexte technique CORBA , EJB et DCOM basés sur RPC Pb : Couplage fort EJB et DCOM liés à une plateforme Pb : manque d'intéropérabilité CORBA EJB complexe CORBA nécessite IDL EJB nécessit(ait) XML complexe 2003+ : nouveaux standards ouverts XML / Web Services WSDL / SOAP / UDDI JAX-RPC / JAX-WS www.objis.com - Formation Web Services www.objis.com - Formation SPRING 24
Web Services : les standards ouverts WSDL (Web Service Description Language) est le format XML décrivant le endpoint. UDDI (Universal Description, Discovery and Integration) est un annuaire de publication des services web. SOAP (Simple Object Access Protocol) permet un échange de données entre systèmes hétérogènes. SOAP : 2 approches Approche RPC (Synchrone, échange types primitifs) Approche Document (Asynchrone, échange Objets) Permet couplage faible ! Clé architecture SOA. www.objis.com - Formation Web Services www.objis.com - Formation SPRING 25
Architecture Web Services Application cliente Requête EndPoint Réponse Web Method Web Method Récupère métadonnées WSDL EndPoint Recherche WSDLs défini Web Method Localise Web Method UDDI www.objis.com - Formation Web Services www.objis.com - Formation SPRING 26
Standards Web services : Le monde de JAX-WS Java SE 6 JAXB utilise Transformation JAVA / XML inclus JAX-WS SOAP XML Fournit API haut niveau pour Représenté par basé sur définit WSDL manipule JAX-P SCHEMA SAAJ Annuaire pour MTOM UDDI JAX-R Fournit clients pour accéder Fournit API bas niveau pour www.objis.com - Formation Web Services www.objis.com - Formation SPRING 27
Standards Web services JSR 224 : JAX-WS (API haut niveau pour WS) http://jcp.org/en/jsr/detail?id=224 JSR 181 : métadonnées (annotations) http://jcp.org/en/jsr/detail?id=181 JSR 109 : Modèle prog. Web Services JEE http://jcp.org/en/jsr/detail?id=109 JSR 67 : SAAJ (API bas niveau créer/manipuler WS) http://jcp.org/en/jsr/detail?id=67 www.objis.com - Formation Web Services www.objis.com - Formation SPRING
Standards Web services et API Java 6 javax.jws javax.jws.soap Métadonnées (annotations facilitant dév. WS) → @WebService, @WebMethod, @HandlerChain, @HandlerChain, @OneWay, @SOAPBinding... javax.xml.soap SAAJ (API bas niveau créer/manipuler Message : En-tête, corps, Attachements...) → SOAPHeader, SOAPBody, SOAPFault... javax.xml.ws javax.xml.ws.handler javax.xml.ws.handler.soap javax.xml.ws.http javax.xml.ws.soap javax.xml.ws.spi javax.xml.ws.wsaddressing JAX-WS (API haut niveau pour WS) → EndPoint, Service, Holder, @Action, @WebServiceref, @WebServiceClient www.objis.com - Formation Web Services www.objis.com - Formation SPRING
Standards Web services : Le monde WS-* http://www.soaspecs.com/ws.php www.objis.com - Formation Web Services www.objis.com - Formation SPRING 30
Frameworks Web services : Implémentation specs WS-* Source : http://www.predic8.com/axis2-cxf-jax-ws-comparison.htm www.objis.com - Formation Web Services www.objis.com - Formation SPRING 31
Choix framework Apache CXF Apache CXF est le fruit de la fusion entre Apache Celtix et Apache XFire , d’où le nom CXF. Celtix était un Bus de service (ESB) Java sponsorisé par IONA et développé par le consortioum ObjectWeb. XFire était un framework de développement de services web basé sur SOAP. Les points communs étaient nombreux et les développeurs des 2 communautés ont décidé de travailler ensemble pour offir le meilleur des deux mondes. www.objis.com - Formation Web Services www.objis.com - Formation SPRING 32
Choix framework Apache CXF Choix naturel pour développeurs Spring Support des standards WS-* : WS-Basic Profile, WS- Addressing, WS-Policy, WS-ReliableMessaging, WS-Security. Support de JAX-WS (inclus JAXB et SAAJ) Support de SOAP, WSDL, MTOM Support Style REST (Spec JAX-RS) Facilité d’utilisation : développement basé sur POJO annotés Nombreux outils voir ci-dessous répertoire bin Nombreux formats transport : Http(s), JMS, CXF Format données : XML, JSON Plusieurs stratégies binding XML : JAXB, Aegis Plusieurs stratégies de binding non-xml : json, corba, jbi, sca Déploiement flexible : serveurs J2ee , intégration sca (Tuscany) et jbi (service engine pour ServiceMix, OpenESB, Petals) www.objis.com - Formation Web Services www.objis.com - Formation SPRING 33
Choix Métro Implémentation de référence des specs JAX-WS Support des standards WS-* : WS-Basic Profile, WS- Addressing, WS-Policy, WS-ReliableMessaging, WS-Security. Support de JAX-WS (inclus JAXB et SAAJ) Support de SOAP, WSDL, MTOM Facilité d’utilisation : développement basé sur POJO annotés - n'a pas autant d'outils RAD que CXF Nombreux formats transport : Http(s), JMS Ne gère pas REST + A privilégier pour interropérabilité avec WS .NET 3.5 www.objis.com - Formation Web Services www.objis.com - Formation SPRING 34
Interropérabilité Web Services Consortium WS-I (www.ws-i.org) : promouvoir l'interropérabilité des services web à travers les plattes formes,OS, langages de programmation WS-I : plusieurs éditeurs dont Microsoft, IBM, Oracle Spécification WS-Basic Profile : recommandations contribuant à créer des services web interropérables Ex : Jee5 est compaticle WS-Basic Profile 1.1 Bonne pratique : testez la conformité de vos WS ! Outils : 'Monitor' et 'Analyzer' fournit par le WS-I www.objis.com - Formation SPRING
Interropérabilité Web Services : Test conformité Etape 1 : Monitor.bat produit fichier de traces C/S (log.xml) Etape 2 : Analyzer.bat Analyse le fichier de traces produit rapport conformité (report.xml) www.objis.com - Formation Web Services www.objis.com - Formation SPRING
Interropérabilité Web Services : Exemple résultat outil 'Monitor' www.objis.com - Formation Web Services www.objis.com - Formation SPRING
Interropérabilité Web Services : Exemple résultat outil 'Analyzer' www.objis.com - Formation Web Services www.objis.com - Formation SPRING
Partie 2 : lecture WSDL Les 5 sections clés Section 'types' Section 'message' Section 'portType' Section 'bindings' Section 'services' www.objis.com - Formation Web Services www.objis.com - Formation SPRING 39
Anatomie WSDL : 5 sections clés 1 : types 2 : message 3 : porType 4 : binding 5 : service www.objis.com - Formation Web Services www.objis.com - Formation SPRING 40
Anatomie WSDL : 5 sections clés www.objis.com - Formation Web Services www.objis.com - Formation SPRING 41
Bonne pratique lecture sections WSDL Commencer par lire section 'du milieu' : portType pour identifier rapidement le savoir-faire (opérations) du WS Au dessus de la section 'portType' : infos abstraites Section 'types' : typage paramètres entrées/sorties Section 'messages' : messages SOAP Aller / Retour En dessous de 'portType' : infos 'concrètes' Section 'bindings : différents canaux de transport (http,ftp,...) Section 'service'' : lieu physique ou le service est accessible www.objis.com - Formation Web Services www.objis.com - Formation SPRING
Section clé WSDL N°1 : 'types' Types de données utilisés par le WS Si WS Rpc : vide (Types simples : chaine, int...) Si WS Document : inclus, pointe vers ou importe XSD www.objis.com - Formation Web Services www.objis.com - Formation SPRING
Section clé WSDL N°1 : 'types' Exemple 1 (WS Document types simple) www.objis.com - Formation Web Services www.objis.com - Formation SPRING
Section clé WSDL N°1 : 'types' Exemple 2 (WS Doc. types complexes) www.objis.com - Formation Web Services www.objis.com - Formation SPRING
Section clé WSDL N°1 : 'types' Exemple 2 (WS Doc. types complexes) 4 3 www.objis.com - Formation Web Services www.objis.com - Formation SPRING
Impact style 'Rpc' ou 'Document' du WS sur section <types> Style 'Rpc' : historiquement le plus utilisé (int/string) Style 'Document' : permet de décrire la structure du message via fichier xsd externe. Plus souple ! Info : Style 'Document' par défaut www.objis.com - Formation Web Services www.objis.com - Formation SPRING
Section clé WSDL N°2 : 'message' Messages SOAP utilisés par le WS Construits à partir des types données section 'types' Remarque : ordre messages indique pattern service www.objis.com - Formation Web Services www.objis.com - Formation SPRING
Section clé WSDL N°3 : 'porType' Décrit les opérations , le 'savoir-faire' du WS Equivalent strict de l'interface Java du service Opérations identifiées par @WebMethod code WS www.objis.com - Formation Web Services www.objis.com - Formation SPRING
Section clé WSDL N°3 : 'portType' Pattern de service www.objis.com - Formation Web Services www.objis.com - Formation SPRING
Section clé WSDL N°4 : 'bindings' Section la plus 'concrète' et la plus 'complexe' Info clé 1 : Protocole transport à utiliser pour envoi / réception msg SOAP Info clé 2 : le Style : 'rpc' ou 'document' Specs : par défaut 'document' Info clé 3 : le format de données : 'litteral' ou 'encoded' Specs : par défaut 'litteral' Attention : 'encoded' non respect Basic profile ! www.objis.com - Formation Web Services www.objis.com - Formation SPRING
Section clé WSDL N°4 : 'bindings' 1 2 3 www.objis.com - Formation Web Services www.objis.com - Formation SPRING
Section clé WSDL N°5 : 'service' Spécifie 1 ou plusieurs Endpoints où les fonctionalités du WS sont disponibles Représente physiquement les 'ports' Port = interface (portType) + implémentation (binding) Analogie avec port réseau Ex : accès au service sur 192.168.02:8888 1 implémentation 1 interface www.objis.com - Formation Web Services www.objis.com - Formation SPRING
Partie 3 : méthodes développement WS Approche 'bottom-up' et 'top-down' Avantages et inconvénients dev WS avec Java6 Valeur ajoutée serveurs, IDE, frameworks Méthode développementr WS SOAP 'Document' Création d'intercepteurs (Handlers) www.objis.com - Formation Web Services www.objis.com - Formation SPRING 54
Approches de développement WS Bottom-up (ou 'code first') : Du code vers le WSDL Top-down (ou 'contract first') : du WSDL vers le code www.objis.com - Formation Web Services www.objis.com - Formation SPRING
Inconvénients Approche bottom-Up Ne respecte pas la 'neutralité du langage' Orienté 'programmeur' et pas 'utilisateur' www.objis.com - Formation Web Services www.objis.com - Formation SPRING
Dev. Web services avec Java 6 JAX-WS inclus dans Java6 Création WS avec Pojo annoté (Métadonnées) Publication avec Endpoint.plublish() Mini serveur web intégré Inconvénient : monothread www.objis.com - Formation Web Services www.objis.com - Formation SPRING
Dev. Web services avec JEE JAX-WS implémenté par serveur JEE Packaging WS sous forme de WAR ou EJB jar Génération automatique du WSDL Filtre disponible (via framework) Possibilité de sécuriser l'accès WS avec JAAS Multithread Intégration services Jee comme JMS, JCA, ... www.objis.com - Formation Web Services www.objis.com - Formation SPRING
WS avec types complexes www.objis.com - Formation Web Services www.objis.com - Formation SPRING
WS avec types complexes Exemple classe accès données www.objis.com - Formation Web Services www.objis.com - Formation SPRING
Bonnes pratiques WS types complexes : Outils wsgen et ws import 1)Compilation WS et javabeans : javac -d . *.java 2)Génération classes utilitaires pour le WS (création du répertoire jaxws) wsgen -cp . -keep com.objis.demowebservices.document.team.Teams 3)Publication du WS java -cp . com.objis.demowebservices.document.team.TeamsPublisher 4)Génération classes utilitaires pour le client (dans répertoire teamC): wsimport -p teamC -keep http://localhost:8889/teams?wsdl 5) Codage du Client TeamsClient (s'aider du TP client RPC ainsi que du code source de teamC.TeamsService) 6) Lancement du client java -cp . TeamsClient Avoir copie code source www.objis.com - Formation Web Services www.objis.com - Formation SPRING
WS avec types complexes 1)Compilation WS et javabeans : javac -d . *.java 2)Génération classes utilitaires pour le WS (création du répertoire jaxws) wsgen -cp . -keep com.objis.demowebservices.document.team.Teams www.objis.com - Formation Web Services www.objis.com - Formation SPRING
WS avec types complexes 3)Publication du WS 4) Génération classes utilitaires pour le client (dans répertoire teamC): wsimport -p teamC -keep http://localhost:8889/teams?wsdl → Utiliser le codede la classe TeamsService.java généré du service pour coder votre client → repérer méthodes xxxxPort www.objis.com - Formation Web Services www.objis.com - Formation SPRING
WS avec types complexes www.objis.com - Formation Web Services www.objis.com - Formation SPRING
WS avec types complexes 5) Codage & compilation client TeamsClient (à partir du code source de teamC.TeamsService) Extrait code TeamsService généré coté client client www.objis.com - Formation Web Services www.objis.com - Formation SPRING
WS avec types complexes 6) Lancement du client : java -cp . TeamsClient www.objis.com - Formation SPRING
JAXB : de JAVA à XML Java API for XML Binding Manipuler avec Java les données des messages XML Vous sauve de XML schéma, Sax, DOM ! Marshaling = transformation Java → XML http://download.oracle.com/docs/cd/E17802_01/webservices/webservices/docs/1.6/tutorial/doc/index.html www.objis.com - Formation Web Services www.objis.com - Formation SPRING
JAXB : de JAVA à XML www.objis.com - Formation Web Services http://download.oracle.com/docs/cd/E17802_01/webservices/webservices/docs/1.6/tutorial/doc/index.html www.objis.com - Formation Web Services www.objis.com - Formation SPRING
Travailler avec JAXB en 2 étapes Etape 1 : générer/compiler 'classes dérivées' à partir XML Schema Etape 2 : lancer votre appli pour unmarshaler / Marshaller INFO : étape de validation XML Optionnelle www.objis.com - Formation Web Services www.objis.com - Formation SPRING
XML Schema Permet de décrire la grammaire d'un doc. XML + précis que DTD : Types : decimal, date, fixed, string Contraintes : pattern value, minOccurs, positiveInteger Support des Namespaces Analogie avec type JAVA Point commun entre plusieurs langages Ex : langage C connait 1 et 0 mais pas 'boolean' Type xsd 'en commun' : xsd:boolean http://download.oracle.com/docs/cd/E17802_01/webservices/webservices/docs/1.6/tutorial/doc/index.html www.objis.com - Formation Web Services www.objis.com - Formation SPRING
Traitement à la volée de messages avec Handlers Manipuler message coté client AVANT de l'envoyer Manipuler message coté serveur AVANT de le traiter Empécher un intermédiaire de valider (FAULT) Sécurité Logs Cache Transactions www.objis.com - Formation Web Services www.objis.com - Formation SPRING
Traitement à la volée de messages : exemple sécurité www.objis.com - Formation Web Services www.objis.com - Formation SPRING
Etape 1 : créer Handler (1/2) www.objis.com - Formation Web Services www.objis.com - Formation SPRING
Etape 1 : créer le Handler (2/2) www.objis.com - Formation Web Services www.objis.com - Formation SPRING
Etape 2 : Configurer le handler dans un fichier XML www.objis.com - Formation Web Services www.objis.com - Formation SPRING
Etape 3 : Associer le Handler au service avec @Handlers www.objis.com - Formation Web Services www.objis.com - Formation SPRING
Etape 4 : Lancer le client www.objis.com - Formation Web Services www.objis.com - Formation SPRING
Handler coté client : 2 méthodes (déclarative et programmative) 1) ajout @HandlerChain dans classe Service générée 2) ajout code dans classe client www.objis.com - Formation Web Services www.objis.com - Formation SPRING
Web Services 'léger' avec REST Exemples Requêtes/Réponses WS REST Architecture WS style REST 4 étapes traitement requête Contraintes REST API JAX-RS REST avec Apache CXF www.objis.com - Formation Web Services www.objis.com - Formation SPRING 79
Exemples URL REST http://localhost:9000/categoryservice/category/001 http://localhost:9000/categoryservice/category/001/books www.objis.com - Formation Web Services www.objis.com - Formation SPRING 80
(REpresentational State Transfert) Architecture REST (REpresentational State Transfert) 1) centré POJO 2) centré HTTP 3) indépendence format (XML/JSON) 4) indépendance conteneur 5) ok avec conteneur JEE www.objis.com - Formation Web Services www.objis.com - Formation SPRING 81
Bonne pratique traitement requête HTTP façon REST Lorsqu'une requête HTTP arrive , 4 choses à faire : 1) Identifier la méthode HTTP (exemple : POST) 2) Convertir le message (body) du format spécifié (XML ou JSON) vers format serveur (Ex : JAVA) 3) réaliser l'opération demander (Ex : POST -> écrire ) 4) Convertir la réponse en flux HTTP au format demandé (ex : Accept : application/json) www.objis.com - Formation Web Services www.objis.com - Formation SPRING 82
Contrainte REST...et API JAX-RS Contrainte : fournir implémentation pour toutes les méthodes HTTP : POST, GET, PUT, DELETE d'où le standard JAR-RS (Java Api for RestFull Web Services) : sémentique création WS façon REST Equivalent REST de WSDL : WADL Web Application Description Langage Pas encore officiel Frameworks 'Jersey' et 'Restlet' le génèrent www.objis.com - Formation Web Services www.objis.com - Formation SPRING 83
Dev REST avec CXF 1) Bonne intégration avec Spring 2) Plusieurs stratégies binding (JAXB, JSON, AEGIS, XMLBean) 3) API client (pas ds specs jax-rs) 4) Sécurité (Spring Security) 5) Filtres / Intercepteurs WS-* www.objis.com - Formation Web Services www.objis.com - Formation SPRING 84
Méthode dev appli REST et CXF 1) Créer objets Java de Requête et Réponse (Ex Category, Book) 2) Fournir Binding pour objet Requête et Réponse (Exemple JAXB : @XmlRootElement audessus nom classe + @XmlElement pour personnaliser namespace) 3) Créer classes d'implémentation (CategoryService) & les annoter avec annotations JAX-RS (@GET, @POST, ...@Path, @Consumes, @Produces, @PathParam) 4) Test unitaires 5) Création de clients invoquant méthodes HTTP (via Proxy ou via objet cxf tout prêt : org.apache.cxf.jaxrs.client.WebClient) 6) Déployer le service dans conteneur (rendre le service accessible via HTTP. Ex sans besoin de serveur j2ee avec classe : org.apache.cxf.jaxrs.JAXRSServerFactoryBean ) www.objis.com - Formation Web Services www.objis.com - Formation SPRING 85
Comparaisons Web Services 'lourd' SOAP vs 'léger' REST Avantages et inconvénient WS 'lourd' SOAP Avantages et inconvénient WS 'léger' REST www.objis.com - Formation Web Services www.objis.com - Formation SPRING
Web Services 'lourd' SOAP (pour scénario d'intégration complexe) Spécification JAX-WS → Implémentation de référence : métro - Contrainte : messages format XML façon SOAP - Contrainte : interface décrite avec WSDL + Avantage : multi-protocoles : HTTP,FTP,SMTP, JMS - Architecture sous-jacente doit gérer nombreux besoins non fonctionnels : sécurité, transactions, transparence, coordination. Specs : WS-Security, WS-Adressing,... - Architecture sous-jacente doit gérer traitement asynchrone. Pbs potentiels de fiabilité ! Spec WSRM (Web Service Reliable Messaging) www.objis.com - Formation Web Services www.objis.com - Formation SPRING
Web Services 'léger' REST (pour scénario d'intégration simple) Spécification JAX-RS (RestFull Services) → Implémentation de référence JavaEE6 : Jersey + Pas de contrainte format message XML, ni de contrainte description interface WSDL - Contrainte : protocole transport HTTP + Complémentaire d'Ajax pour écrans web + Bonne pratique : mettre en oeuvre cache requêtes HTTP (attention limite cache serveurs web sur GET) + Intérressant si le critère bande passante est primordial (trop de headers avec SOAP !) Ex : applications pour PDA www.objis.com - Formation Web Services www.objis.com - Formation SPRING
Sécurité Web Services Les risques du couplage faible Stratégies de sécurité www.objis.com - Formation Web Services www.objis.com - Formation SPRING
Les risques du couplage faible 1) Les nouveaux standards de communications (XML, SOAP, WSDL, UDDI....) sont ouverts. 2) Les nouveaux standards de communications ont été développé sans une approche sécurité. 3) Si'ils sont utilisés 'tel quels', ils sont complètement non sécurisé ! Exemple : communication Usine / Agences AVANT : Interfaces propriétaires sécurité DEMAIN : services exposés via WS www.objis.com - Formation Web Services www.objis.com - Formation SPRING 90
Exemple B2B AVANT SOA : Communication par VPN www.objis.com - Formation Web Services www.objis.com - Formation SPRING 91
Communication par Web Services Exemple B2B AVEC SOA : Communication par Web Services www.objis.com - Formation Web Services www.objis.com - Formation SPRING 92
Bonnes pratiques : solutions Sécurité Web Services 1) Si WS = WAR (Pojo annoté) config. JAAS Authentification (BASIC, FORM, DIGEST, CERT) Autorisation DBRealm, LdapRealm... 2) HTTPS : Certificats, signature, Encryption XML Utiliser keytool (générer clés, certificat, Csr...) 3) Intercepteurs SOAP 'perso' (handlers) 4) Fédération d'identité (SAML / SSO) 5) Intercepteurs WS-Security (ajout infos headers) sécurité indép. Couche transport utilisée ! Ex CXF : http://cxf.apache.org/docs/ws-security.html www.objis.com - Formation Web Services www.objis.com - Formation SPRING 93
WS-Security : jetons de sécurité (Security Token) 1 2 www.objis.com - Formation Web Services www.objis.com - Formation SPRING 94
Signature de message (début) www.objis.com - Formation Web Services www.objis.com - Formation SPRING 95
Signature de message (fin) www.objis.com - Formation Web Services www.objis.com - Formation SPRING 96
Service de jeton sécurisés www.objis.com - Formation Web Services www.objis.com - Formation SPRING 97
Requete jeton sécurisés www.objis.com - Formation Web Services www.objis.com - Formation SPRING 98
Réponse jeton sécurisés www.objis.com - Formation Web Services www.objis.com - Formation SPRING 99
Bibliographie Web Services Up and Running Editions O'Reilly – 318 pages Web services specifications Microsoft Press – 360 pages Java SOA Cookbook Editions O'Reilly – 782 pages www.objis.com - Formation Web Services www.objis.com - Formation SPRING 100
Fédération d'identités Situation1 (e-commerce) : besoin communication sécurisée entre : Acteur 1 : Site e-commerce Acteur 2 : Usine Acteur 3 : Banque Acteur 4 : Assurance Acteur 5 : Logistique Spécifications Web Service de sécurité indépendante du protocole sous-jacent WS-Security WS-Federation SAML www.objis.com - Formation Web Services www.objis.com - Formation SPRING 101
Notion clé : SSO SSO (Single Sign On) : fournir mécanisme necessaire pour permettre à un utilisateur d'utiliser plusieurs applicatiosn différentes en s'authentifiant une seule fois. www.objis.com - Formation Web Services www.objis.com - Formation SPRING 102
ANNEXE : Approche code first avec CXF (WSDL → Code) 1 : Générer les classes du service à partir WSDL 2 : Implémenter les méthodes du service 3 : Publier le service 4 : Développer un client pour le service www.objis.com - Formation Web Services www.objis.com - Formation SPRING 103
ANNEXE : Approche code first avec CXF (WSDL → Code) www.objis.com - Formation Web Services www.objis.com - Formation SPRING 104
Code first avec CXF : étape 1 (génération code service) wsdl2java -ant -impl -server -d <Sortie> mon.wsdl Détail des arguments : -ant : crée un script ant pour génération code -impl : génère une classe d'implémentation -server : gènère un composant pour publier -d : répertoire de dépot code généré www.objis.com - Formation Web Services www.objis.com - Formation SPRING 105
Code first avec CXF : étape 1 (code généré par wsdl2java) Classes de messages Entrée/Sortie JAXB Dans package 'inversé' du targetNameSpace Ex : ValidationCRI, ValidationCRIResponse Interface du service Classe d'implémentation du service Classe serveur standalone (publication & test WS) Fichier build.xml (générer source & publier) 1 2 3 4 5 www.objis.com - Formation Web Services www.objis.com - Formation SPRING 106
Code first avec CXF : étape 1 (génération code service) 2 4 3 1 www.objis.com - Formation Web Services www.objis.com - Formation SPRING 107
Code first avec CXF : étape 1 (génération code Interface service) www.objis.com - Formation Web Services www.objis.com - Formation SPRING 108
Code first avec CXF : étape 2 (squelette Implémentation service) www.objis.com - Formation Web Services www.objis.com - Formation SPRING 109
Code first avec CXF : étape 3 (publication service) www.objis.com - Formation Web Services www.objis.com - Formation SPRING 110
Code first avec CXF : étape 1 (génération build.xml ) www.objis.com - Formation Web Services www.objis.com - Formation SPRING 111
Code first avec CXF : étape 3 (Lancement serveur ) www.objis.com - Formation Web Services www.objis.com - Formation SPRING 112
Code first avec CXF : étape 4 (Codage client ) Wsdl2java -impl -client -d <sortie> mon.wsdl 1 2 3 www.objis.com - Formation Web Services www.objis.com - Formation SPRING 113
Transport sécurisé HTTPS 1 : développer Interface & Impl du service 2 : générer clé cryto 3 : créer configuration client et serveur (xml cxf) jaxws:endpoint (cxl-servlet.xml) jaxws:client (client-bean.xml) 4 : créer un composant client qui utilise le service 5 : configurer le serveur pour support SSL 6 : Développer un client 7 : build & deploiement www.objis.com - Formation SPRING
www.objis.com - Formation SPRING Génération clé Créer une paire de clés dans un store keytool -genkey -alias objiscert -keyalg RSA -keysize 2048 -dname "CN=objis.com,OU=Formation,O=intra,L=Paris,S=Paris,C= FR" -keypass changeit -keystore objisKS.jks -storepass changeit (option) Analyser le contenu cacerts (/lib/security/cacerts) keytool -list -keystore cacerts -storepass changeit (option) Faire demande de certificat à autorité VeriSign keytool -certreq -v -alias objiscert -file objiscert-csr.pem - keypass changeit -storepass changeit -keystore objisKS.jks www.objis.com - Formation SPRING
Configuration client CXF 1 1 2 3 Lien utile : http://cxf.apache.org/docs/client-http-transport-including-ssl-support.html www.objis.com - Formation SPRING
Configuration (Spring) client <http-conduit> permet de mettre en oeuvre propriétés SSL. www.objis.com - Formation SPRING
Codage (Spring) client www.objis.com - Formation SPRING