450 likes | 608 Views
Interopérabilité des plateformes JavaEE et . NET Implémentation des spécifications avancées des services Web avec GlassFish et WCF . Alexis MOUSSINE-POUCHKINE SUN Architecte Stéphane GOUDEAU Microsoft France Architecte. Agenda. Introduction. Web Services Avancés. GlassFish & WCF.
E N D
Interopérabilité des plateformes JavaEE et . NET Implémentation des spécifications avancées des services Web avec GlassFish et WCF Alexis MOUSSINE-POUCHKINE SUN Architecte Stéphane GOUDEAU Microsoft France Architecte
Agenda Introduction Web Services Avancés GlassFish & WCF Démos WS-* Synthèse
Agenda Introduction Web Services Avancés GlassFish & WCF Démos WS-* Synthèse
Critères de choix Couplage faible Politiques d’utilisation Coût Existant Partage de contrat Standards Performances
Agenda Introduction Web Services Avancés GlassFish & WCF Démos WS-* Synthèse
Services Web • Technologie permettant à des applications de dialoguer avec un modèle de couplage faible, par l’échange de messages fondé sur des standards : • XML, SOAP, WSDL, UDDI • Indépendance des plates-formes et des langages • Technologie pour l’entreprise universellement adoptée ? “Web services will become the dominant distributed computing architecture in the next 10 years and will eventually define the fabric of computing.” – IDC
Interoperabilitéhttp://www.WS-i.org • Effort de l’industrie • Accélérer l’adoption et garantir l’interopérabilité des services Web • Plus 160 leaders de l’industrie • Partenariat avec les organismes de standardisation: OASIS, OMG, OMA, RosettaNet • Profils regroupant un ensemble de standards avec leur recommandation d’utilisation • Basic Profile • SOAP 1.1, WSDL 1.0, UDDI 2.0, XML 1.0 et XML Schema • Mise à disposition par les éditeurs de modèles de mise en œuvre vis-à-vis de leur implémentation SOAP • Mise à disposition d’outils de test • Basic Security Profile • Attachements Profile • Simple SOAP Binding Profile
Business Processes Connected Systems Management SecurityWS-Security WS-Trust WS-Federation ReliabilityWS-Reliable Messaging TransactionsWS-Transactions WS-Coordination WS-AtomicTranscation Metadata WSDL, WS-Policy, WS-Discovery Messaging SOAP, WS-Addressing, WS-Eventing XML XML, XSD, XPath Transports HTTP WS-* : La cibleestatteinte…
Dans la vraie vie… • W3C Simple Object Access Protocol (SOAP) 1.2 • W3C Web Service Description Language (WSDL) 1.1 • Asynchronisme (et routage des messages) • W3C WS-Addressing (W3C Member Submission 10 August 2004) • Transmission de pièces jointes (et encodage/optimisation) • W3C SOAP Message Transfer Optimization Mechanism (MTOM) • W3C XML-binary Optimized Packaging (XOP) 1.0 • Fiabilité des échanges • OASIS Web Services Reliable Messaging (WS-ReliableMessaging) • Sécurité du message • OASIS Web Services Security: SOAP Message Security 1.0 (WS-Security)
FlightInfo FlightInfo ExtensionsSOAP • Utilisée pour des fonctionnalités plus avancées • Intercepte les appels destinés à un service Web • Prétraitement et post-traitement RETOUR SERIALIZE (natif XML) Interception (avant et après) ! RETOUR DESERIALIZE (XML natif) Interception (avant et après) ! ALLER SERIALIZE (natif XML) Interception (avant et après) ! ALLER DESERIALIZE (XML natif) Interception (avant et après) ! Client WS Fournisseur WS <FlightInfo> <flightNo/> <departTime/> <.../> </FlightInfo> “serialize” “deserialize” “deserialize” “serialize”
Consommateur Fournisseur SOAP Extensions SOAP Extensions Routage Sécurité Fiabilité Transactions Cadre logistique Données structurées Implémentation des WS-* <?xml version="1.0" encoding="UTF-8" ?> <env:Envelope xmlns:env="http://www.w3.org/2001/09/soap-envelope"> <env:Header> <n:alertcontrol xmlns:n="http://example.org/alertcontrol"> <n:priority>1</n:priority> <n:expires>2001-06-22T14:00:00-05:00</n:expires> </n:alertcontrol> </env:Header> <env:Body> <m:alert xmlns:m="http://example.org/alert"> <m:msg>Pick up Mary at school at 2pm</m:msg> </m:alert> </env:Body> </env:Envelope>
Agenda Introduction Web Services Avancés GlassFish & WCF Démos WS-* Synthèse
Web Services dans Java EE 5 Logique Métier Logique Métier Classes Annotées Fortement Typées Couche Message API Dispatch/Provider • JAX-WS 2.x est l'évolution de JAX-RPC 1.x • JAX-WS sous-ensemble de Java EE 5 • EJB 3, Servlet, JSP, JDBC/JPA, JAXB, ... • JAX-WS est également présent dans le JDK 6 • Annotations, Web Services asynchrones, ... • JAXB pour les conversions XML/Java
Simple Web Service JAX-WS package endpoint; import javax.jws.WebService; @WebService public class Bonjour { public String ditBonjour(String nom) { return "Bonjour " + nom; } }
GlassFish et WSIT • GlassFish est un serveur d'application Open Source de production conforme à Java EE 5 • WSIT est une extension à JAX-WS 2.x intégrée dans GlassFish v2 (beta) • Implémentation de WS-Addressing, WS-Security, WS-SecureConversation, WS-ReliableMessaging, WS-MetaDataExchange, MTOM/XOP, WS-Trust, WS-Policy,... • Pas de modification du modèle de programmation JAX-WS (déclaratif) • Outil associé : • NetBeans 5.5.1 (http://www.netbeans.org)
Windows Communication Foundation (WCF) • Composante du Microsoft .NET Framework 3.0 : Windows Vista, Windows XP SP2, Windows Server 2003 SP1 • Framework unifié pour créer des Applications Orientées Service interopérables • Unification des technologies middleware • Architecture modulaire et composable • Support natif des protocoles des services Web avancés WS-* • Modèle de programmation orienté service http://www.microsoft.com/downloads/details.aspx?FamilyId=10CC340B-F857-4A14-83F5-25634C3BF043&displaylang=en
Be C B A WCF : Principes et outils Client Service • Visual Studio 2005 extensions for .NET Framework 3.0 WSDL A A B B C C Be A B C Point de terminaison Adresse Où ? « Binding » Comment ? Contrat Quoi ? « Behavior » Environnement d’exécution http://www.microsoft.com/downloads/details.aspx?FamilyId=F54F5537-CC86-4BF5-AE44-F5A1E805680D&displaylang=en
Agenda Introduction Web Services Avancés GlassFish & WCF Démos WS-* Synthèse
Quelle démarche adopter ? • Définition du contrat • Contrat de service • Description des opérations et sémantique des échanges (« oneway », « duplex », session, …) • Contrat de données • Définition du contenu des messages • Contrat d’utilisation • Caractéristiques de la communication : fiabilité, sécurité, encodage, transport,… • Implémentation du Service • Développement • Déploiement • Publication du WSDL
Comment optimiser les WS …? • Comment transporter efficacement des objets binaires avec des services web ? • Par défaut : Encodage base64 • MTOM : Message Transmission OptimizationMechanism • Données présentes dans l’InfoSet XML • Transfert des données - sans ré-encodage - à l’extérieur de l’enveloppe SOAP, en utilisant un message de type « MIME multipartrelated » MIME MULTIPART ENVELOPPE SOAP ENVELOPPE SOAP DONNES BINAIRES (encodé en base64) DONNES BINAIRES
WCF : mise en place de MTOM Programmation • Contrat : Paramètre ou propriétés d’objets de type byte[ ] • Binding : Encodage de type MTOM Configuration <bindingname="prestoMtomBinding"> <mtomMessageEncoding messageVersion= "Soap12WSAddressingAugust2004" writeEncoding="utf-8"> <readerQuotasmaxArrayLength="5000000" /> </mtomMessageEncoding> <httpTransport maxReceivedMessageSize="5000000" … /> </binding> • Paramétrage par code ou par configuration • MtomMessageEncodingBindingElementmtomEncodingBindingElement = new • MtomMessageEncodingBindingElement(); • mtomEncodingBindingElement.WriteEncoding = System.Text.Encoding.UTF8; • mtomEncodingBindingElement.ReaderQuotas.MaxArrayLength = maxMessageSize; • encodingBindingElement = mtomEncodingBindingElement;
WS-RM : Principe de fonctionnement • Différent du modèle de file d’attente (pas de tiers explicite) • Agent RM source et Agent RM destination • La séquence complète est acquittée, donc peu d’« overhead » sur une séquence de messages • « CreateSequence » • Flow de Messages avec des headers de « Sequence », complétés par des acquittements occasionnels • TerminateSequence
GlassFish WSIT : WS-RM TerminateSequence explicite : ((Closeable)port).close();
WCF : Reliable Messaging • « ReliableSessionBindingElement » • Premier élément de la collection de bindings • Paramétrage par code ou par configuration Transport par code • ReliableSessionBindingElement reliableSessionBindingElement = null; • reliableSessionBindingElement = new ReliableSessionBindingElement(); • … • reliableSessionBindingElement.FlowControlEnabled = true; • reliableSessionBindingElement.Ordered = true; • elements.Add(reliableSessionBindingElement); • <binding name="prestoReliableBinding"> • <reliableSessionacknowledgementInterval="00:00:00.2000000“ • … • flowControlEnabled=“true“ • ordered="false" /> RM par configuration
C C B B A A Modes de sécurité Service Client A Transport A A B B C C Client B Message
Sécurité de niveau Transport • HTTPS, SSL over TCP • Dépendance du transport • Compatible avec les systèmes existants • S’applique au message dans son ensemble • Confidentialité, intégrité et/ou authentification • Point à point Service Client Chiffré/Signé
Sécurité de niveau Message • Sécurité des services Web avancés (WS-*) • Appliquée au niveau des messages SOAP • Indépendante du transport et extensible • Sécurisé jusqu’au destinataire ultime du message • L’expéditeur ne doit faire confiance qu’au destinataire ultime • Sécurisation de façon sélective : partie(s) du message • Confidentialité, intégrité, non-répudiation et/ou authentification Nœud intermédiaire Client Service Chiffré/Signé Chiffré/Signé
Standards sécurité WS-* dans WSIT et WCF • OASIS Web Services Security SOAP Message Security (WS-Security) 1.0 et 1.1 • Intégrité, confidentialité, et inclusion d’un jeton de sécurité • Couple utilisateur / mot de passe, X.509, Kerberos et SAML • OASIS WS-Trust • Obtention et renouvellement d’un jeton de sécurité • OASIS WS-SecureConversation • Etablissement d’un contexte de sécurité et échange des clés de session permettant d’échanger N messages dans un même contexte • OASIS WS-SecurityPolicy • Description des assertions spécifiques à la sécurité, utilisées dans WS-Security, WS-Trust, et WS-SecureConversation • WS-I Basic Security Profile • Core + Kerberos + SAML
WCF : Sécurité Code Client • Sécurité des échanges de messages • Sécurité d’accès aux ressources • Mise en œuvre grâce aux bindings et behaviors • Paramétrage par code ou par configuration Binding • factory.Credentials.ServiceCertificate. • SetDefaultCertificate( • StoreLocation.LocalMachine, StoreName.My, X509FindType.FindByThumbprint, config.ServiceCertificateThumbprint); • <endpointBehaviors> • <behavior name=“prestoSignConfig”> • <clientCredentials> • <clientCertificate storeLocation=“LocalMachine” storeName=“My” • x509FindType=“FindByThumbprint” findValue=“F31416E1D645367AC2DB89E31B8EF89A4E77CF21”/> • </clientCredentials> • </behavior> • <endpointBehaviors> Behavior
Découverte dynamique du contrat • Pour que l’échange fonctionne, le client et le service doivent utiliser le même protocole • Le même fichier binding doit être utilisé sur le client et sur le serveur • WS-MetadataExchange (WS-MEX) • Permet la récupération dynamique des méta-données (WSDL + WS-Policy) Service Client GetMetadata WSDL
WCF : WS-MetadataExchange • Obtention des éléments de binding via MetadataResolver • Les capacités de sécurité souhaitées sont obtenues par interrogation directe du Channel • ChannelFactory<IPresto> factory ; • Uri mexUri = new • Uri("http://192.168.0.2:9999/?wsdl"); • ContractDescriptioncontract = • ContractDescription.GetContract(typeof(IPresto)); • EndpointAddressmexEndpointAddress = new • EndpointAddress(mexUri); • ServiceEndpointCollectionendpoints = • MetadataResolver.Resolve(contract.ContractType, • mexEndpointAddress); • foreach (ServiceEndpointendpoint in endpoints) • { • if (endpoint.Contract.Namespace.Equals( • contract.Namespace) && • endpoint.Contract.Name.Equals(contract.Name)){ • factory = new ChannelFactory<IPresto> • endpoint.Binding, endpoint.Address)} • } • IPrestoprestoInterface = factory.CreateChannel(); Code Client • ISecurityCapabilitiesisc = endpoint.Binding.GetProperty<ISecurityCapabilities>( • new BindingParameterCollection()); • if (isc.SupportsServerAuthentication) {…} • if (isc.SupportedRequestProtectionLevel != ProtectionLevel.None) {…} Code Client
Agenda Introduction Web Services Avancés GlassFish & WCF Démos WS-* Synthèse
En guise de conclusion • WSIT et WCF deux frameworks offrant une interopérabilité • Basée sur des standards • Spécifications/protocoles WS-* • Compatible avec les mécanismes de sécurité existants (Kerberos, X.509, HTTPS, etc.) • Validée, intégrée, et outillée • Un « cas d’utilisation » : PRESTO « PRotocole d’Echanges Standard et Ouvert » enveloppe de transport pour l’échange de documents électroniques entre SI d’administrations (DGME) Protocole PES HELIOS Protocole métier ACTES Protocole métier spécifique
Où trouver de l’information • WSIT : http://java.sun.com/webservices/interop • WCF : http://wcf.netfx3.com • Alexis Moussine-Pouchkine : http://blogs.sun.com/alexismp • Simon Guest : http://weblogs.asp.net/smguest • Brian Keller : http://blogs.msdn.com/briankel • Ted Neward : http://www.neward.net/ted/weblog • Stéphane Goudeau : http://blogs.msdn.com/stephgou
© 2007 Microsoft Corporation. All rights reserved. This presentation is for informational purposes only. MICROSOFT MAKES NO WARRANTIES, EXPRESS OR IMPLIED, IN THIS SUMMARY.