Komponentenorientierte Softwareentwicklung und Hypermedia Seminar bei Herr Prof. Dr. Frank Thiesing Web Service Achim Grimm Fabian Unterschütz - Seite 1 von 18 - Inhaltsverzeichnis Definition und Übersicht über Web Services.............................................. Seite 4 Installation & Beispielanwendung............................................................. Seite 6 SOAP .................................................................................................... Seite 10 Web Service Description Language (WSDL).............................................. Seite 11 Universial Description, Discovery und Integration (UDDI).......................... Seite 12 Enterprise Java Beans (EJB) und Web Service........................................... Seite 13 Sicherheit von Web Services.................................................................... Seite 14 Ausblick.................................................................................................. Seite 17 Quellenangabe........................................................................................ Seite 18 - Seite 2 von 18 - Abbildungsverzeichnis Das Web Service Rollenmodell................................................................. Seite 5 JWDP Ordern-Struktur (%jwsp_home%).................................................. Seite 6 Axis-Webapps Ordner-Struktur................................................................. Seite 7 Happyaxis.jsp - Satusanzeige über die Installation des Axis Web Services... Seite 8 Das Web Service Rollenmodell................................................................. Seite 10 - Seite 3 von 18 - World Wide Web Consortium W3C Das “World Wide Web” wurde vor knapp 15 Jahren vom W3C – Vorsitzenden Tim Bernes – Lee erfunden. In dieser Zeit wurden viele neue Technologien entwickelt und gewannen an Bedeutung, wie beispielsweise das Internetprotokoll HTTP oder die Skriptsprachen HTML und XML. Das World Wide Web Consortium teilt diese Technologien in Working Groups auf, die um einen einheitlichen Standard bemüht sind und versuchen einen solchen zu entwickeln und zu wahren. Web Services sind ebenfalls bereits in solche Working Groups aufgeteilt und die W3C Web Service Architecture Working Group hat eine offizielle Definition für Web Services herausgegeben, die folgendes ausdrückt: „Ein Web Service ist eine durch einen URI (Uniform Ressource Identifier) eindeutig identifizierte Softwareanwendung, deren Schnittstellen als XML – Artefakte definiert, beschrieben und gefunden werden können. Ein Web Service unterstützt die direkte Interaktion mit anderen Softwareagenten durch XML – basierte Nachrichten, die über Internetprotokolle ausgetauscht werden.“ (http://www.w3c.org) Des Weiteren kann man Web Services wie folgt beschreiben: · Web – Services sind selbst beschreibende, modulare Softwarekomponenten im Internet, die sich gegenseitig aufrufen können und so im Sinne einer Programmzu-Programm Kommunikation zu unterschiedlichen Gesamtlösung zusammengefügt werden. · Die Softwarekomponenten kommunizieren über Internetprotokolle miteinander und verwenden allgemeine, plattform- und betriebssystemunabhängige Standards (SOAP, WSDL, UDDI). · Ein Web – Service ist eine unabhängige in sich geschlossene Anwendung. Web – Services sind ortsunabhängig und haben keine graphische Benutzeroberfläche. · Der Zugriff wird über Berechtigungen geregelt. · Ein Web – Service wird begleitet von Metadaten, die während ihrer Laufzeit von weiteren Web – Services ausgewertet werden können. · Web – Services sind nicht monolithisch sondern modular. - Seite 4 von 18 - Einführung in den Gedanken des Web Services Ein „normaler“ Ablauf bei dem ein Web Service ist, eine Person sich einen Passenden Web Service bei einer Regierungsstellen (UDDI) sucht. Dies geschieht dann meist über dessen Web Interface. Dann wird dazu ein Client geschrieben, mit dessen Hilfe dann der Web Service angesprochen wird. Es kann jedoch auch vorkommen, dass ein Client-Programm bereits existiert und ein dazu passender Web Service gesucht wird. Dies kann dann auch automatisch über die UDDI passieren. Somit bieten sich Web Services sehr gut für die Kommunikation verschiedenster Programm an, sodass sie sich zu einem großen Modularem System entwickeln, das verschiedenste Dienste erbringt. Es ist auch möglich, dass ein Web Service gleichzeitig ein Client eines anderen Web Services ist. Den Zusammenhang der drei beteiligten Stellen verdeutlicht die folgende Graphik: Abbildung 1 Das Web Service Rollenmodell - Seite 5 von 18 - Installation Die Installation eines Web Services besteht aus mehreren Schritten bei denen häufig Fehler auftreten können. In diesem Dokument wird nur ein von vielen möglichen Vorgehensweise beschrieben. Der Prozess der Installation ist in X Schritte unterteilt und wird wie folgt durchgeführt: 1. Downloaden der benötigten Komponenten: ● Java Web Service Developer Pack (JWSDP) von http://www.java.sun.com In dem JWSDP ist unter anderem der Tomcat Webserver enthalten in dem der Web Service integriert werden soll. ● Apache Axis von http://ws.apache.org/axis Dies ist der Eigentlich Web Service und einige nützliche Tools auf die wir später noch einmal eingehen werden wenn wir einen Beispiel Client erstellen. 2. Nach der Installation des JWSDP findet sich auf der Festplatte folgende OrdnerStruktur wieder: Abbildung 2 JWDP Ordern-Struktur (%jwsp_home%) - Seite 6 von 18 - Abbildung 3 Axis-Webapps Ordner-Struktur 3. Als nächster Schritt wird das Axis-Archiv entpackt und alle Unterordner des Ordners %axis_home%/webapps in den Ordner %jwsp_home%/webapps kopiert. Dadurch ergibt sich im Ordner webapps folgende Ordner-Struktur: 4. Nun müssen die Jar-Files die im Axis Archiv enthalten waren in das Verzeichnis % jwsp_home%\common\lib kopiert werden. Und die Datei %jwsp_home% \webapps\axis\happyaxis.jsp in das Verzeichnis %jwsp_home%\webapps\ROOT kopiert werden. 5. Jetzt kann der Tomcat-Webserver gestartet werden. Dies geschieht am komfortabelsten über einen im Start-Menü angelegten Eintrag der Setup-Routine. Zum Testen ob bei der Installation Fehler aufgetreten sind, ruft man jetzt am besten die Diagnose-Seite im Internet Explorer unter der Adresse: http://localhost:8080/happyaxis.jsp auf. An dieser Stelle sei gesagt, dass diverse Probleme mit anderen Browsern, wie z.B. Opera, auftreten können und daher nun immer vom Internet Explorer als Browser gesprochen werden wird. Wird die Seite fehlerfrei angezeigt wird, kann man mit der Installation fortfahren. Die Seite sollte wie folgt aussehen: - Seite 7 von 18 - Abbildung 4 Happyaxis.jsp - Satusanzeige über die Installation des Axis Web Services 6. Der nächste Schritt ist es ein Beispiel Web Service zu schreiben. Hierbei wird sich auf das Beispiel „Hi.jws“ des Seminar-Vortrages berufen. Der Quellcode sieht wie folgt aus: public class Hi{ public String hello(){ System.out.println ("Hello Welt! Ich bin ein Webservice"); return "Hello Welt! Ich bin ein Webservice"; } } Es ist sinnvoll den Quellcode für den Web Service in einer Java IDE zu schreiben und dann die Datei umzubenennen. - Seite 8 von 18 - 7. Unter der URL http://localhost:8080/axis/Hi.jws?WSDL kann man sich das dazugehörige WSDL Dokument anzeigen lassen. Axis nutzt hierzu intern das Tool Java2WSDL. Wenn man diese Datei speichert, kann man sie nutzen um mit dem Tool WSDL2Java einen entsprechenden Client zu schreiben. Der entsprechende Kommandozeilenaufruf sieht wie folgt aus: java org.apache.axis.wsdl.WSDL2Java -d Request Hi.WSDL 8. Das Kommando erzeugt unter anderem eine Interface-Datei und eine Stub-Klasse die sich um die eigentliche Kommunikation mit dem Web Service kümmert. Unser Beispielclient sieht wie folgt aus: import localhost.axis.Hi_jws.*; import java.net.*; public class AxisClient{ public static void main(String[] args) throws java.lang.Exception{ HiServiceLocator loc = new HiServiceLocator(); System.out.println ("Stelle eine Verbindung zu >>“+ her..."); +“http://localhost:8080/axis/Hi.jws << Hi ser = loc.getHi(new URL ("http://localhost:8080/axis/Hi.jws")); System.out.println ("Verbindung aufgebaut!\n\n"); System.out.println (ser.hello()); } } 9. Die Ausgabe des Clients ist der Rückgabe wert des Web Services. - Seite 9 von 18 - SOAP Simple Object Access Protocol (SOAP) ist ein leichtwertiges Protokoll, dessen Zweck der Austausch strukturierter Informationen in einer dezentralisierten verteilten Umgebung ist. Dazu wird auf der Basis von XML ein Rahmenwerk für den Austausch von Nachrichten beschrieben, wobei diese Nachrichten über eine Auswahl verschiedener Transportprotokolle übertragen werden können. Das Nachrichtenformat ist komplett anwendungsunabhängig, aber natürlich ist es möglich, anwendungsspezifische Daten in einer SOAP-Nachricht zu transportieren. Jede SOAP-Nachricht besteht aus einem „Envelope“ der die gesamte Nachricht umfasst. Dieser Umschlag enthält zwei Komponenten, nämlich einen SOAP Header und einen SOAP Body. Siehe Abbildung: Abbildung 5 Aufbau einer SOAP Nachricht Die Informationen die der Web Service benötigt, werden im Body übertrage. Hier findet sich dann die jeweiligen Methodenaufrufe oder ihre Rückgabewerte wieder. Natürlich ist dieser Teil ebenfalls in XML. Dies führt dazu, dass verschiedenste eigene Datentypen bzw. Datenstrukturen übertragen werden können. - Seite 10 von 18 - WSDL Wie bei jeder Middelware, ein Web Service ist defakto nichts anderes, muß es ein unabhängige Beschreibung der verschiedensten Funktionen stattfindend. Die Beschreibungssprache die Web Services nutzen, heißt Web Service Description Language. Oder kurz WSDL. WSDL-Dokumente sind in XML formatiert und nutzen den WSDL-XML-Namespace zur Standardisierung der Funktionen. Dies hat den entscheidenden Vorteil, dass sowohl Mensch als auch Maschine diese Beschreibungen lesen können. In der Regel ist für einen Entwickler nicht notwendig ein WSDL-Dokument zu lesen, geschweige denn selber zu schreiben. Für beide Fälle gibt es entsprechende Tools die dies dem Entwickler abnehmen können. Dies hat auch den immensen Vorteil, dass die Entwicklungszeit eines Web Services sehr gering ist, da sich der Entwickler nur um die eigentliche Fachlogik kümmern muß. Die Umsetzung geschieht dann voll automatisch. Dies ist ähnlich zu dem Ansatz der RMI aus Java. Tatsächlich werden Web Services in Java über die Funktionsweise der RMI angesprochen. Hierfür stellt Sun zwei Werkzeuge zur Verfügung. 1. JAVA2WSDL: Dies ist ein Tool mit dem man aus einem Java Programm einen WSDL Code erzeugen kann. Dies ist vor allem für den Diensterbringer notwendig. Da er ja seinen Dienst beschreiben muß. 2. WSDL2JAVA: Dies ist ein Tool aus dem man wiederum aus einem WSDL Dokument, das man z.B. von einem Internetserver bezogen hat, ein Java Programm zu erstellen. Es gibt noch diverse andere Tools die aber ähnliche Funktionsweisen anbieten. Zum Beispiel gibt es von Microsoft im .net Paket solle Tools die die Kommunikation zwischen C# und Web Services erlauben. So das er möglich ist, eine Web Service anzubieten, der in Java Programmiert wurde, und der von einem C# Programm genutzt wird. - Seite 11 von 18 - UDDI Universal Description, Discovery und Integration (UDDI) ist also der Verzeichnisdienst für Web Services. Man kann UDDI neben SOAP und WSDL zu den drei Grundbausteinen des Web-Service-Ansatzes zählen (siehe Das Web Service Rollenmodell auf Seite 5). Es geht auf eine Initiative der drei Firmen Microsoft, IBM und Ariba zurück und wurde im Jahre 2000 erstmals vorgestellt. Inzwischen wird UDDI von OASIS standardisiert. Die aktuelle Version des Standards ist 3.0 und wurde im Juli 2002 verabschiedet. Die besten und aktuellsten Informationen bekommt man von der UDDI-eigenen Web-Seite http://uddi.org Die Veröffentlichungen der UDDI-Arbeitsgruppe (http://uddi.org/specification.html) innerhalb OASIS lassen sich in drei Arten von Dokumenten gruppieren: 1. die eigentlichen Standards, die die entsprechenden Normen darstellen. Wenn es Konflikte mit anderen Dokumenten geben sollte, dann sind dies die entscheidenden. Es gibt Dokumente für UDDI v1, v2 und v3. 2. die Best Practices. Hier wird beschrieben, wie man in der Praxis UDDI-Registries am besten einsetzt und wie man darauf zugreift. 3. die so genannten Technical Notes. Auch hier wird auf eher technischer Ebene beschrieben, wie man UDDI-Registries benutzt. Der Name UDDI setzt sich aus den drei Funktionen der Registry zusammen: 1. Description: oder auch „Yellow Pages“ genannt. Hier findet man alle angebotenen Web Services sortiert nach ihrem Dienst. 2. Discovery: oder auch „White Pages“ genannt. Sie enthalten alle Relevanten Daten über die Firmen oder Organisationen die sich bei der UDDI Registriert haben. 3. Integration: oder auch „Green Pages“ genannt. Hier findet man die URI aller registrierten Web Services und deren WSDL Beschreibung. - Seite 12 von 18 - EJB & Web Services Eine recht neue Idee ist es, einen Web Service bereit zu stellen, der als „Interface“ für einen EJB-Server dient. Damit hat man natürlich den Vorteil, dass man die Features beider Systeme nutzen kann. Ein paar Probleme gibt es auf dem Weg dahin aber natürlich doch noch zu lösen. Zum einen gibt es bei den EJBs Java Beans, bei denen eine Session nicht nur mit der Übertragung einer einzigen Nachricht beendet ist. Da ein Web Service aber eben nicht nach halten kann, ob ein Client zu einer bestimmten Session gehört, muß der Client eine Session-ID bei jedem Aufruf mitliefern. Dies kann jedoch Problematisch sein. Eine schon sehr weit Entwickelte und beliebt EJB Lösung heißt JBoss. Dies ist ein Open-Source-Applikations-Server bei dem man sich bemüht eine Anbindung an Web Services zu realisieren. Für weitere Informationen sei hier auf den Vortrag zu EJBs innerhalb dieses Seminars verwiesen. - Seite 13 von 18 - Sicherheitsanforderungen Der Begriff der Sicherheit in verteilten Systemen ist zunächst natürlich sehr allgemein gehalten. Gemeinhin versucht man deshalb, die Anforderungen, die an solche Systeme bzgl. der Sicherheit bestehen, weiter aufzuschlüsseln. Dabei hat sich das Schema, nach dem wir im Folgenden den Begriff Sicherheit definieren, als Standard heraus geschält. Dazu zählen Vertraulichkeit, Authentizität, Integrität, NichtAnfechtbarkeit und Verfügbarkeit. 1. Vertraulichkeit Vertraulichkeit wird erreicht, wenn nur diejenigen eine Nachricht bzw. ein Datum lesen können, die dazu autorisiert sind. Das bedeutet nicht, dass andere diese Nachricht nicht sehen können, es heißt nur, dass sie den Inhalt nicht verstehen können. Das Problem einer kompromittierten Vertraulichkeit entsteht vor allem durch die Übertragung von Daten. Es ist gemeinhin leichter, Nachrichten zu lesen, die über irgendeine Art von Medium übertragen werden, als in einen Computer einzubrechen (der nicht am Netz ist) und die Daten dort auszuspähen. Insbesondere die zunehmende Verbreitung drahtloser Kommunikation spielt hier eine wichtige Rolle, denn gerade das Medium Funk ist sehr leicht abzuhören. Vertrauliche Nutzung von Web Services bedeutet, dass niemand, der nicht das Recht dazu hat, mitbekommt, welche Daten Sie an einen Web Service übertragen und welche Antwort der Web Service zurückschickt. Auf den ersten Blick könnte man meinen, das Problem wäre doch eigentlich mit dem schon bekannten HTTPS gelöst. Wir werden weiter unten sehen, dass das nur zum Teil stimmt, weswegen man sich einige andere Lösungen hat einfallen lassen. 2. Authentizität Authentizität ist erreicht, wenn Sie sicher sein können, dass derjenige, mit dem Sie gerade digital kommunizieren, auch tatsächlich der ist, für den Sie ihn halten. Das ist keineswegs selbstverständlich: Wenn Sie eine E-Mail bekommen mit einer bestimmten Absenderadresse, dann gehen Sie gewöhnlich davon aus, dass diese Adresse auch stimmt. Unglücklicherweise ist es sehr einfach, diese Adresse zu fälschen. Probleme bei der Authentizität sind vor allem deshalb ein Problem, weil sie die Basis für den Prozess der Autorisierung bildet: Aufgrund der Tatsache, dass man jemanden eine bestimmte Identität (oder besser eine Rolle) zuschreibt, werden ihm auf einem System entsprechende Rechte gewährt. Mit anderen Worten: Wenn es jemandem - Seite 14 von 18 - gelingt, unrechtmäßig eine bestimmte Rolle einzunehmen, dann stehen ihm sämtliche Rechte zu, die mit dieser Rolle verbunden sind. Wenn man sich beispielsweise als Administrator gegenüber einem System authentifizieren kann, dann kann man auf dem System praktisch alles tun. Ein bekanntes Authentifizierungsverfahren beruht auf der Verwendung von Passworten oder von PINs und TANs z.B. beim Homebanking. Hier weist man sich durch den Besitz gewisser Kenntnisse aus. Modernere Verfahren arbeiten mit biometrischen Methoden, bei denen beispielsweise Fingerabdrücke oder die Netzhaut gescannt werden. Authentizität bei Web Services bedeutet, dass der Diensterbringer weiß, von wem ein Dienstaufruf kommt, und dass der Dienstnutzer nachvollziehen kann, von wem dieser Dienst erbracht wird. Sicherlich wären auch hier z.B. Passworte einzusetzen, wir werden jedoch sehen, dass das nicht immer eine gute Lösung ist und dass man sich deshalb spezielle Verfahren zur Authentifizierung auf der Nachrichtenebene ausgedacht hat. 3. Integrität Bei der Bewahrung der Integrität von Nachrichten geht es darum sicherzustellen, dass diese Nachrichten während der Übertragung nicht von einem Dritten verändert werden. Auch dies ist natürlich aus denselben Gründen möglich, wie der Bruch von Vertraulichkeit: Wenn es einem böswilligen Dritten gelingt, einen Zwischenrechner im Netz unter Kontrolle zu bringen, dann ist es ihm ohne Probleme möglich, eintreffende Nachrichten abzufangen und entsprechend den eigenen Wünschen zu ändern. Bei Web Services würde das bedeuten, dass einerseits Aufrufe eines Dienstes verändert werden könnten, so dass z.B. der Zustand einer Ressource anders beeinflusst werden würde als dies ursprünglich vorgesehen war. Andererseits könnte auch die Ergebnisnachricht abgefangen werden. Interessanterweise kann man Integrität für Nachrichten mit denselben bzw. sehr ähnlichen Mitteln erreichen wie Authentizität. 4. Nicht-Anfechtbarkeit Bei vielen geschäftlichen Situationen kommt es darauf an, dass zweifelsfrei nachgewiesen werden kann, dass ein bestimmtes Ereignis stattgefunden hat. Dazu gehören beispielsweise alle Arten von Bestellungen. Hier möchte der Empfänger sichergehen, dass das Produkt auch wirklich korrekterweise ausgeliefert und nicht wieder zurückgeschickt wird, wobei der Besteller behaupten könnte, er hätte das Produkt gar nicht bestellt. Im realen Leben geschieht dies beispielsweise durch Unterschriften unter Kaufverträge. In der digitalen Welt muss dazu ein Äquivalent - Seite 15 von 18 - gefunden werden. Es geht also darum, im Nachhinein dem Sender einer Nachricht nachweisen zu können, dass er die Nachricht tatsächlich abgeschickt hat. 5. Verfügbarkeit und Zugangskontrolle Bei diesem letzten Punkt geht es schließlich darum, dass Ressourcen im Netz auch verfügbar sein müssen, damit sie von Nutzen sind. Der schönste Dienst bringt nichts, wenn man von ihm keine Antworten bekommt. Es gibt viele Möglichkeiten, dafür zu sorgen, dass ein Dienst nicht verfügbar ist. Die Palette reicht von der physischen Zerstörung des Rechners, auf dem der Dienst läuft, über ein Einbrechen auf dem Rechner und z.B. dem Löschen von für den Dienst wichtigen Daten bis hin zu den massiven Denial-of-Service-Angriffen aus dem Netz, bei denen ein Rechner schlicht mit Nachrichten überschwemmt wird, bis er nicht mehr antworten kann. Zur Sicherstellung der Verfügbarkeit hat man sich ebenfalls eine Reihe von Maßnahmen einfallen lassen, die jedoch nicht immer funktionieren. Wir werden eines der wichtigsten Mittel, den Firewall, im nächsten Abschnitt besprechen, werden aber auch feststellen müssen, dass ein traditioneller Firewall gerade bei Web Services ins Leere läuft. - Seite 16 von 18 - Ausblick Web Services werden heutzutage schon sehr erfolgreich als plattformübergreifende Middleware eingesetzt. Besonders von Vorteil ist hierbei die Eigenschaft, auf bestehenden und gut etablierten Internettechnologien wie HTTPS oder DNS aufzubauen, anstatt zu versuchen das Rad neu zu erfinden. Auch die Durchlässigkeit von Firewalls auf den Ports für HTTP und HTTPS ist eine große Hilfe, auch wenn dadurch natürlich das Sicherheitskonzept untergraben wird. Firewalls, die SOAPAufrufe erkennen und filtern, werden sicher auch nicht mehr lange auf sich warten lassen. Natürlich gibt es unzählige Szenarien, wie verschiedene Angebote genutzt werden können, sei es das intelligente Haus, das Ihnen aufgrund des schlechten Wetterberichts das Mitnehmen des Regenschirms nahe legt, oder Ihr Auto, das Sie künftig über die Radarfalle um die Ecke informiert. Allen Szenarien liegt ein Prinzip zugrunde, nämlich die Kombination der Daten aus verschiedenen Quellen. Web Services übertragen Daten, wie es Web-Server heute schon mit HTML-Seiten tun. Allerdings sind die Daten in XML strukturiert und ermöglichen es dem Client so, die Information programmatisch weiter zu verwenden. Damit ist es möglich, Dinge zu tun, die der einzelne Serviceanbieter nicht leisten kann. Die Staumeldung im Radio ist hilfreich. Sie ist aber noch viel hilfreicher, wenn diese Information mit der GPS Positionsinformation des Nutzers kombiniert wird. Diese Möglichkeiten werden heute nur ansatzweise genutzt. In den nächsten Jahren wird man sicherlich noch vieles über Web Services hören und vor allem sehen werden. - Seite 17 von 18 - Quellenangabe http://www.w3c.org Java Web Services - O'Reilly – ISBN: 3-897-21284-6 Web Services – Hanser Verlag - ISBN: 3-446-22530-7 - Seite 18 von 18 -