Sécurité en ingénierie du Logiciel

Le cadre des Web Services Partie 9 : Introduction à ’Web Services

Definition Language’ (WSDL)

Alexandre Dulaunoy

adulau@foo.be

Agenda

• Introduction

• WSDL types

• WSDL messages • WSDL porttype • WSDL binding • WSDL port

• Conclusion

Introduction

• Spécification W3C

• Web Services Description Language (WSDL) 1.1 (2001),

• Descriptions des services web par un langage décrit en XML,

• Pas uniquement SOAP mais aussi HTTP GET et POST,

• API disponible en Java/Perl/Python...,

Peut aussi servir de générateur d’applications clients mais attention.

WSDL structure/définition

Eléments XML pour WSDL :

• types, (types rencontrés dans le Web Service)

• message, (description des appels distants (paramètres, retour,...))

• porttype, (description des opérations à réaliser en utilisant des messages)

• binding, (lie le porttype avec un type de protocole (p.ex. SOAP)

• port, (lie un point d’entrée réseau avec un binding)

• service, (plusieurs entrées indirects)

Sécurité en ingénierie du Logiciel – p.4/16

WSDL types

Partie de définition des types disponibles : <?xml version="1.0"?> <definitions name="StockQuote" targetNamespace="http://example.com/stockquote.wsdl" xmlns:tns="http://example.com/stockquote.wsdl" xmlns:xsd="http://www.w3.org/2000/10/XMLSchema" xmlns:xsd1="http://example.com/stockquote/schema" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns="http://schemas.xmlsoap.org/wsdl/">

WSDL types

<types> <schema targetNamespace="http://example.com/stockquote/schema" xmlns="http://www.w3.org/2000/10/XMLSchema"> <complexType name="TimePeriod"> <all> <element name="startTime" type="xsd:timeInstant"/> <element name="endTime" type="xsd:timeInstant"/> </all> </complexType> <complexType name="ArrayOfFloat"> <complexContent> <restriction base="soapenc:Array"> <attribute ref="soapenc:arrayType" wsdl:arrayType="xsd:float[]"/> </restriction> </complexContent> </complexType> </schema> </types>

WSDL message

Description des paramètres et types des paramètres, valeur de retour,... <message name="GetTradePricesInput"> <part name="tickerSymbol" element="xsd:string"/> <part name="timePeriod" element="xsd1:TimePeriod"/> </message> <message name="GetTradePricesOutput"> <part name="result" type="xsd1:ArrayOfFloat"/> <part name="frequency" type="xsd:float"/>

</message>

WSDL porttype

Description des opérations. • One-way,

• Request-response,

• Solicit-response,

• Notification

WSDL porttype

<portType name="StockQuotePortType"> <operation name="GetLastTradePrice" parameterOrder="tickerSymbol timePeriod frequency"> <input message="tns:GetTradePricesInput"/> <output message="tns:GetTradePricesOutput"/> </operation> </portType>

WSDL binding

Description de la liaison entre un porttype et un ou des protocoles : (ex. SOAP RPC sur HTTP)

<binding name="StockQuoteSoapBinding" type="tns:StockQuotePortType"> <soap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http"/> <operation name="GetTradePrices"> <soap:operation soapAction="http://example.com/GetTradePrices"/> <input> <soap:body use="encoded" namespace="http://example.com/stockquote" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/> </input> <output> <soap:body use="encoded" namespace="http://example.com/stockquote" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/> </output> </operation> </binding>

WSDL service

Description des points des "endpoint" : <service name="StockQuoteService"> <documentation>My first service</documentation> <port name="StockQuotePort" binding="tns:StockQuoteBinding"> <soap:address location="http://example.com/stockquote"/> </port> </service>

WSDL service - description HTTP

GET/POST

WSDL peut aussi décrire des simple GET et POST : les valeurs sont part1=1, part2=2, part3=3

• port1: GET, URL="http://example.com/o1/A1B2/3"

• port2: GET, URL="http://example.com/o1?p1=1&p2=2&p3=3"

• port3: POST, URL="http://example.com/o1", PAYLOAD="p1=1&p2=2&p3=3"

Retour est une image gif ou un image jpeg.

WSDL service - description HTTP

GET/POST

<definitions .... > <message name="m1"> <part name="part1" type="xsd:string"/> <part name="part2" type="xsd:int"/> <part name="part3" type="xsd:string"/> </message> <message name="m2"> <part name="image" type="xsd:binary"/> </message> <portType name="pt1"> <operation name="o1"> <input message="tns:m1"/> <output message="tns:m2"/> </operation> </portType>

GET/POST

<service name="service1"> <port name="port1" binding="tns:b1"> <http:address location="http://example.com/"/> </port> <port name="port2" binding="tns:b2"> <http:address location="http://example.com/"/> </port> <port name="port3" binding="tns:b3"> <http:address location="http://example.com/"/> </port> </service> <binding name="b1" type="pt1"> <http:binding verb="GET"/> <operation name="o1"> <http:operation location="o1/A(part1)B(part2)/(part3)"/> <input> <http:urlReplacement/> </input> <output> <mime:content type="image/gif"/> <mime:content type="image/jpeg"/> </output> </operation> </binding>

Sécurité en ingénierie du Logiciel – p.14/16

GET/POST

<binding name="b2" type="pt1"> <http:binding verb="GET"/> <operation name="o1"> <http:operation location="o1"/> <input> <http:urlEncoded/> </input> <output> <mime:content type="image/gif"/> <mime:content type="image/jpeg"/> </output> </operation> </binding> <binding name="b3" type="pt1"> <http:binding verb="POST"/> <operation name="o1"> <http:operation location="o1"/> <input> <mime:content type="application/x-www-form-urlencoded"/> </input> <output> <mime:content type="image/gif"/> <mime:content type="image/jpeg"/> </output> </operation> </binding> </definitions>

Sécurité en ingénierie du Logiciel – p.15/16

Q&R

• adulau@foo.be

• http://www.foo.be/cours/securite-webservices/

• 3B12 DCC2 82FA 2931 2F5B 709A 09E2 CD49 44E6 CBCD