Benutzerautorisierung mit Anbindung an die Benutzungsoberäche von Rich-Clients auf Basis der Eclipse RCP Diplomarbeit Arbeitsbereich Softwaretechnik Department Informatik Universität Hamburg Verfasser Kai Meyer und Torsten Witte 1. Betreuer: Prof. Dr. Heinz Züllighoven 2. Betreuer: Prof. Dr. Norbert Ritter Hamburg, 25. September 2007 Zusammenfassung Diese Arbeit schat eine Grundlage, die Lücke in der Literatur zwischen Kai Meyer und Benutzerautorisierung und gebrauchstauglichen Benutzungsoberächen, zu Torsten Witte schlieÿen. Dies geschieht am Beispiel von Rich-Client-Anwendungen auf Basis der Eclipse RCP. Bewährte Autorisierungmechanismen werden vorgestellt, Kriterien für gebrauchstaugliche Software aufgestellt und aktuelle Diskussionen über Autorisierung im Umfeld der Eclipse RCP zusammengefasst. Mit den so gewonnenen Erkenntnissen werden lauähige Prototypen entwickelt, die als Grundlage für reale Projekte dienen, in denen Benutzerautorisierung eine Rolle spielt. ii Inhaltsverzeichnis Motivation 1 Ausgangspunkte der Arbeit Ziel der Arbeit . . . . . . . . . . . . . . . . . . . . . . 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 Vorgehensweise der Autoren . . . . . . . . . . . . . . . . . . . . . . 3 Aufbau der Arbeit . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 Abgrenzung der Arbeit . . . . . . . . . . . . . . . . . . . . . . . . . 4 Konventionen 5 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . I Grundlagen 7 1 Begrie und Denitionen 9 1.1 Benutzer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.2 Benutzungsoberächen und Benutzungsfreundlichkeit . . . . . 10 1.3 Identizierung . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 1.4 Single Sign-On (SSO) . . . . . . . . . . . . . . . . . . . . . . . 13 1.5 Authentizierung . . . . . . . . . . . . . . . . . . . . . . . . . 13 1.6 Autorisierung . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 1.7 Rechtevergabe und -entzug . . . . . . . . . . . . . . . . . . . . 15 1.8 Filterregeln bei Autorisierung . . . . . . . . . . . . . . . . . . 18 1.9 Zusammenfassung . . . . . . . . . . . . . . . . . . . . . . . . . 18 2 Die Eclipse Rich-Client-Platform 9 19 2.1 Was ist ein Rich-Client? . . . . . . . . . . . . . . . . . . . . . 19 2.2 Was ist die Eclipse Rich-Client-Platform? . . . . . . . . . . . . 22 2.3 2.2.1 Zur Entstehungsgeschichte der Eclipse RCP . . . . . . 23 2.2.2 Open Service Gateway Initiative (OSGi) . . . . . . . . 23 2.2.3 Erfolg der Eclipse RCP . . . . . . . . . . . . . . . . . . 23 . . . . . . . . . . . . . . . . . 24 2.3.1 Die Eclipse Plug-In-Architektur Plug-Ins . . . . . . . . . . . . . . . . . . . . . . . . . . 25 2.3.2 Lebenszyklus von Bundles/Plug-Ins . . . . . . . . . . . 26 iii Inhaltsverzeichnis iv 2.4 2.3.3 Extension-Points, Extensions und Extension-Registry . 28 2.3.4 Plug-In-Abhängigkeiten . . . . . . . . . . . . . . . . . 30 . . . . . . . . . . . . . . . . 31 Eclipse-Architektur in der Praxis 2.4.1 Aufbau von Plug-Ins . . . . . . . . . . . . . . . . . . . 32 2.4.2 OSGi-Manifest, Plug-In-Manifest und Bundle-Activator 32 2.4.3 Anwendungsklassen . . . . . . . . . . . . . . . . . . . . 34 2.4.4 Wichtige Erweiterungspunkte von Eclipse . . . . . . . . 36 2.4.5 Eine Beispiel-Erweiterung . . . . . . . . . . . . . . . . 37 2.4.6 Fragmente . . . . . . . . . . . . . . . . . . . . . . . . . 39 2.4.7 Features . . . . . . . . . . . . . . . . . . . . . . . . . . 40 2.5 Update-Sites und Updates . . . . . . . . . . . . . . . . . . . . 41 2.6 Abschlieÿende Bemerkungen . . . . . . . . . . . . . . . . . . . 43 II Theoretischer Teil 45 3 Diskussionen 47 3.1 . . . . . . . 47 3.1.1 Interaktionsobjekte bei der Benutzerautorisierung Meldungsfenster . . . . . . . . . . . . . . . . . . . . . . 48 3.1.2 Log-in-Dialog . . . . . . . . . . . . . . . . . . . . . . . 49 3.1.3 Optische Kennzeichnung . . . . . . . . . . . . . . . . . 49 3.1.4 Sperren von Interaktionsobjekten 50 3.1.5 Verstecken von Interaktionsobjekten . . . . . . . . . . 51 3.1.6 Fazit . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52 . . . . . . . . . . . . 3.2 Allgemeine Diskussion . . . . . . . . . . . . . . . . . . . . . . 3.3 Aktueller Diskussionsstand über Autorisierung in der Eclipse RCP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 Bestehende Konzepte und Lösungen 4.1 4.2 54 60 Role Based Access Control (RBAC) . . . . . . . . . . . . . . . 60 4.1.1 Core RBAC . . . . . . . . . . . . . . . . . . . . . . . . 61 4.1.2 Hierarchical RBAC . . . . . . . . . . . . . . . . . . . . 62 4.1.3 Static Seperation of Duty (SSD) . . . . . . . . . . . . . 63 4.1.4 Dynamic Seperation of Duty (DSD) . . . . . . . . . . . 64 4.1.5 Einordnung 64 . . . . . . . . . . . . . . . . . . . . . . . . Lightweight Directory Access Protocol (LDAP) . . . . . . . . 65 . . . . . . . . . . . . . . . . . . . . . . . . 66 Java Authentication and Authorization Service (JAAS) . . . . 66 4.3.1 Authentizierung mit JAAS . . . . . . . . . . . . . . . 66 4.3.2 Autorisierung mit JAAS . . . . . . . . . . . . . . . . . 67 4.3.3 Einordnung . . . . . . . . . . . . . . . . . . . . . . . . 72 4.2.1 4.3 53 Einordnung Inhaltsverzeichnis 4.4 v eXtensible Access Control Markup Language (XACML) . . . . 73 4.4.1 Policies . . . . . . . . . . . . . . . . . . . . . . . . . . 73 4.4.2 Datenuss . . . . . . . . . . . . . . . . . . . . . . . . . 74 4.4.3 Umsetzungen und Erweiterungen . . . . . . . . . . . . 76 4.4.4 Einordnung . . . . . . . . . . . . . . . . . . . . . . . . 76 5 Weitergehende Konzepte und Lösungen 78 5.1 Plug-In-(De-)Aktivierung . . . . . . . . . . . . . . . . . . . . . 5.2 Security-Facade . . . . . . . . . . . . . . . . . . . . . . . . . . 80 5.3 Auswirkungen unterschiedlicher Systemanforderungen . . . . . 83 6 Bestehende Lösungen für Eclipse 78 85 6.1 Rollenabhängige Plug-Ins . . . . . . . . . . . . . . . . . . . . . 85 6.2 Eclipse-JAAS . . . . . . . . . . . . . . . . . . . . . . . . . . . 91 6.3 Capabilities (Activities) in Eclipse . . . . . . . . . . . . . . . . 93 6.4 Fazit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98 III Praktischer Teil 99 7 Dienstplaner 101 7.1 Konzept . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102 7.1.1 Plug-In-Struktur . . . . . . . . . . . . . . . . . . . . . 102 7.1.2 Funktionsweise 7.1.3 Benutzerverwaltung und Rechtevergabe . . . . . . . . . 104 . . . . . . . . . . . . . . . . . . . . . . 103 7.2 Fazit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 108 7.3 Zusammenfassung . . . . . . . . . . . . . . . . . . . . . . . . . 110 8 Taschenrechner 111 8.1 Konzept . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112 8.2 Realisierung . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113 8.3 Zusammenfassung . . . . . . . . . . . . . . . . . . . . . . . . . 118 9 Control System Studio 120 9.1 Konzept . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 122 9.2 Realisierung . . . . . . . . . . . . . . . . . . . . . . . . . . . . 123 9.3 Oene Probleme und Zusammenfassung 10 Zusammenfassung und Ausblick . . . . . . . . . . . . 124 126 Inhaltsverzeichnis vi IV Anhang 129 A Verweise 130 A.1 Eclipse-Newsgroups . . . . . . . . . . . . . . . . . . . . . . . . 130 B Eingesetzte Werkzeuge B.1 B.2 B.3 Java 132 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132 Eclipse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132 B.2.1 Startkongurationen für RCP-Anwendungen . . . . . . 133 B.2.2 OSGi-Konsole . . . . . . . . . . . . . . . . . . . . . . . 133 Java Policy-Tool . . . . . . . . . . . . . . . . . . . . . . . . . 135 C CD-Inhalt 136 C.1 Java C.2 Eclipse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 136 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 136 C.3 Ausführbare Beispiele zu JAAS C.4 Ausführbares Beispiel zu Eclipse-JAAS . . . . . . . . . . . . . 137 C.5 Ausführbares Beispiel zu Capabilities . . . . . . . . . . . . . . 139 C.6 Taschenrechner . . . . . . . . . . . . . . . . . 136 . . . . . . . . . . . . . . . . . . . . . . . . . . 139 Abbildungsverzeichnis 141 Literaturverzeichnis 143 Abkürzungsverzeichnis 151 Index 153 Erklärung 159 Motivation Im Bereich der Anwendungssoftware, insbesondere im Mehrbenutzer- und Kai Meyer und Netzwerkbetrieb, spielen Sicherheitskonzepte eine wichtige Rolle. Torsten Witte Neben Aspekten wie Netzwerksicherheit und Verschlüsselung ist Benutzerauthentizierung und -autorisierung in Anwendungen, in denen Daten oder Funktionalitäten vor unberechtigtem Zugri geschützt werden müssen, ein zentrales Thema und die Grundlage für Sicherheit. Für die Benutzerautorisierung sind im Laufe der Zeit unterschiedliche Konzepte, Standards und proprietäre Lösungen entstanden. Einhergehend mit der stetig steigenden Verbreitung von Rich-Client-Anwendungen ergeben sich weitere Anforderungen und neue Möglichkeiten für die Benutzerautorisierung als bei Thin-Client-Lösungen. Die Anforderung, oine arbeiten zu können, erfordert neben (teilweiser) lokaler Datenhaltung und Datensynchronisation zwischen Client und Server auch eine clientseitige Regelung des Zugris auf diese Daten. Somit reicht es nicht mehr, nur auf dem Server die einzelnen Funktionsaufrufe gegen unbefugte Benutzung zu sichern. Zusätzlich muss clientseitig eine Instanz vorhanden sein, die entscheidet, ob dem Benutzer einzelne Komponenten bzw. Daten zur Verfügung stehen. Darüber hinaus bieten sich bei der Nutzung von Rich-Clients bessere Möglichkeiten an, dem Benutzer mittels der graschen Benutzungsoberäche über z.B. nicht gewährte Funktionen Rückmeldung zu geben. Die meisten Arbeiten, die Sicherheitsmechanismen wie Zugriskontrolle und Verschlüsselung behandeln, decken den Bereich der Sicherheit gut ab, berücksichtigen jedoch nicht die Auswirkungen in der Handhabung der jeweiligen Endanwendung für den Benutzer. Die Problematik, die somit auftritt, ist, dem Benutzer nicht nur gewisse Aktionen, aufgrund der ihm in seiner Rolle zugesicherten Rechte, zu verbieten, sondern ihm auch eindeutig zu zeigen, dass er sie nicht ausführen darf. Dies muss sogar möglich sein, ohne erneut auf einen Server zurück zu greifen. Im Kern steht also die Frage: Wie können die durch eine Zugrisver- waltung (je nach Benutzerrolle) gewährten und nicht gewährten Rechte im gesamten System umgesetzt und für einen Benutzer clientseitig und jederzeit eindeutig kenntlich gemacht werden? 1 Motivation 2 Im Rahmen dieser Arbeit wird versucht, die Brücke zwischen der Zugriskontrolle und der Benutzungsoberäche zu schlagen. Dazu wird der aktuelle Stand der laufenden Diskussionen zu diesem Thema aufgearbeitet. Es wird der Frage nachgegangen, welche Konzepte es für die Zugrisverwaltung gibt und was sie in Bezug auf Aspekte wie Granularität der Rechte, Rechteverwaltung, Feedback für den Benutzer sowie der Sicherheit der verwendeten Methode bieten. Des Weiteren wird untersucht, auf welche Art und Weise die Auswirkungen der Autorisierung am sinnvollsten in der Benutzungsoberäche dargestellt werden können. Ausgangspunkte der Arbeit Kai Meyer und Torsten Witte Authentizierung und Autorisierung Authentizierung ist die Verizierung der Zughörigkeit der angegebenen Identität zu dem momentanen Benutzer, z.B. über die Angabe eines Benutzernamens und des dazugehörigen Passwortes. Über Autorisierung werden dann der bestätigten Identität ihre Berechtigungen im System zugeteilt. Diese Berechtigungen können von einfachen Lese-/Schreibzugrien bis hin zur Ausführung komplexer Aktionen reichen. Zu den bekanntesten Authentizie- rungs- und Autorisierungskonzepten gehören u.a. RBAC (Role Based Access Control - 1992: Ferraiolo und Kuhn), XACML (eXtensible Access Control Markup Language - 2003: OASIS) und speziell für Java JAAS (Java Authentication and Authorization Service - 2004 (seit JDK 1.3): Sun). Rich-Clients Im Gegensatz zu herkömmlichen Thin-Clients bieten Rich-Clients eine breitere Palette an nativen GUI-Elementen (Graphical User Interface) und erhöhen somit die Benutzungsfreundlichkeit. Das Arbeiten ohne ständige Serververbindung ist mit Rich-Clients ebenfalls möglich und der Netzwerkverkehr kann darüber hinaus auch im Online-Betrieb reduziert werden. Eclipse Rich-Client-Platform Die Eclipse Rich-Client-Platform (RCP) bietet eine solide Grundlage für heutige Rich-Client-Applikationen und spielt auf diesem Gebiet eine immer stärkere Rolle. Zum einen ist sie oen für eigene Erweiterungen und zum an- deren bietet sie bereits viele Mechanismen mit denen schnell und einfach Motivation 3 Rich-Client-Applikationen entwickelt werden können. Einige davon lassen sich unter anderem für die Benutzerautorisierung verwenden. Ziel der Arbeit Diese Arbeit gibt einen Überblick über den Stand der aktuellen Diskussio- Kai Meyer und nen zu dem Thema Benutzerautorisierung in (Rich-Client-)Anwendungen. Torsten Witte Des Weiteren werden eigene konzeptionelle Lösungen für Zugriskontrollmechanismen mit Auswirkungen auf die Benutzungsoberäche erarbeitet und vorgestellt. Für diese werden in konkreten Projekten softwaretechnische Lösungen entworfen und prototypisch umgesetzt. Dazu kommt die Eclipse RichClient-Platform (RCP) zum Einsatz. Auf Basis dieser Konstruktionen soll es Anwendungsentwicklern, die die Eclipse RCP einsetzen, auf einfache Weise möglich sein, Zugriskontrollen in ein Anwendungssystem zu integrieren, so dass für den Benutzer jederzeit seine gewährten Rechte eindeutig erkennbar sind. Die mögliche Ausblendung nicht gewährter Aktionen (Menüeinträge, Schaltächen, usw.) führt zudem zu einer Komplexitätsreduktion der gesamten Benutzungsoberäche. Vorgehensweise der Autoren Um das festgesteckte Ziel zu erreichen, haben die Autoren die Literatur Kai Meyer und zu den Themen Benutzerautorisierung und benutzergerechte Softwaregestal- Torsten Witte tung sowohl innerhalb als auch auÿerhalb des Eclipse-Kontextes durchsucht. Ebenso wurden gemeinsam Lösungen ermittelt, wie Autorisierung und Benutzungsoberächen miteinander in Wechselwirkung treten können. Die gesammelten Methoden und Konzepte wurden analysiert und anhand ausgewählter Kriterien miteinander verglichen. Dazu haben die Autoren theoretische Szenarien durchgespielt sowie kleine Beispielanwendungen entwickelt und getestet. Sofern möglich, sind die Autoren mit den Verfassern der für die Eclipse RCP vorgeschlagenen Techniken in Kontakt getreten. Dazu gehören Berthold Daum und Je McAer. Vor dem Hintergrund realer Projekte und mittels der gewonnenen Erkenntnisse entwickelten beide Autoren gemeinsam Prototypen, die den jeweiligen Anforderungen an die Benutzerautorisierung gerecht werden. Die verwendeten Werkzeuge und Beispielprogramme sind dieser Arbeit auf einer CD beigefügt. Motivation 4 Aufbau der Arbeit Kai Meyer und Die Arbeit gliedert sich in einen Grundlagenteil sowie einen theoretischen Torsten Witte und einen praktischen Teil. Teil 1 - Grundlagen Um auf die anschlieÿenden Kapitel vorzubereiten, befasst sich der Grundlagenteil mit Begrien und Denitionen, auf die die späteren Kapitel aufbauen. Ferner wird eine kurze Einleitung in die Eclipse RCP und deren Plug-In-Konzept gegeben. Die nötigen Grundlagen der Plug-In- bzw. RCPEntwicklung werden an dieser Stelle erklärt. Teil 2 - Theorie Der theoretischen Teil beginnt mit einer grundsätzlichen Diskussion über die Darstellung von Berechtigungen innerhalb von Benutzungsoberächen. Anschlieÿend werden die heute existierenden Authentizierungs- und Autorisierungsmechanismen RBAC (Role Based Access Control), LDAP (Lightweight Directory Access Protocol), JAAS (Java Authentication and Authorization Service), XACML (eXtensible Access Control Markup Language), deren Einzelaufgaben und ihr Zusammenspiel vorgestellt und diskutiert. Insbesondere stellen die Autoren die Möglichkeiten, der Eclipse RCP vor (z.B. Capabilities und Plug-In-(De-)Aktivierung) und untersuchen in diesem Kontext angesiedelte OpenSource-Lösungen (wie Eclipse-JAAS). Es wird sich mit der Frage beschäftigt, welche vorhandenen Eclipse-Mechanismen für die Zugrisverwaltung verwendet werden können und was ggf. ergänzt werden muss. Auch werden hier verschiedene konzeptionelle Lösungen für o.g. Problemstellung erarbeitet. Teil 3 - Praxis Der anschlieÿende praktische Teil beschäftigt sich mit der softwaretechnischen Umsetzung der im zweiten Teil vorgestellten konzeptionellen Lösungen in Form von Prototypen. Dazu wird ein erweiterbarer Taschenrechner vorgestellt, der als funktioneller Prototyp für das im Anschluss beschriebene CSS-Projekt dient. Auÿerdem werden Auszüge aus der Realisierung des Autorisierungsmechanismus eines Dienstplaner-Systems für ein Alten- und Pegeheim skizziert. Motivation 5 Abgrenzung der Arbeit Komplette Sicherheit wird nur durch Sicherheit auf jeder einzelnen Systeme- Kai Meyer und bene (Server, Netzwerk, Client, Betriebssystem) gewährleistet. Torsten Witte Der Fokus dieser Arbeit liegt jedoch überwiegend auf der clientseitigen Benutzerautorisierung. So wird im praktischen Teil vorausgesetzt, dass im Anwendungssystem angemeldete Benutzer korrekt authentiziert sind. Ebenso werden Schutzmaÿnahmen gegen Angrie, die sich gegen die zugrunde liegenden Technologien oder die Programmiersprache Java richten, in dieser Arbeit nicht behandelt. Konventionen Zu Beginn eines Kapitels oder Abschnittes ist am äuÿeren Seitenrand der Kai Meyer und Autor vermerkt. Falls verschiedene Autoren Unterabschnitte zu einem Ab- Torsten Witte schnitt beitragen, dann ist der jeweilige Autor bei jedem Unterabschnitt angegeben. Sind dagegen alle Unterabschnitte von dem selben Autor, dann wird dieser nur zu Beginn des umfassenden Abschnittes genannt. Bei Textpassagen, die wörtlich oder sinngemäÿ aus Veröentlichungen entnommen wurden, sind am Ende des jeweiligen Abschnitts die zugehörigen Quellenangaben in eckigen Klammern aufgelistet. Direkte Zitate sind kur- siv gekennzeichnet. Denitionen oder Kernbegrie eines Abschnittes werden fett dargestellt. Der Text enthält meist maskuline Bezeichnungen, um Textpassagen zu vermeiden wie Für einen Anwender/eine Anwenderin, der/die nicht die Berechtigung besitzt, . . . . Frauen sind selbstverständlich ebenfalls gemeint. Zu Beginn der Erstellung dieser Arbeit war Eclipse in der Version 3.2.2 ak- 1 tuell und Version 3.3 befand sich noch in der Entwicklung . Daher bezieht sich diese Arbeit auf die zu der Zeit aktuell verfügbaren Version. 1 Eclipse 3.3 wurde am 29.06.2007 veröentlicht. 6 Teil I Grundlagen 7 Teil 1 - Grundlagen 8 Kai Meyer und Torsten Witte Der erste Teil dieser Arbeit liefert die Grundlagen für die nachstehenden Teile. So ist das erste Kapitel wichtigen Begrien und Denitionen gewidmet, die vorab einen Einstieg in die Thematik bilden. Das anschlieÿende zweite Kapitel stellt Rich-Clients und die Eclipse Rich-Client-Platform in ihren Grundzügen vor. Diese Einführung reicht aus, um selbst Eclipse RCPNeulingen das Verständnis der folgenden Teile zu ermöglichen. Kapitel 1 Begrie und Denitionen Die Kernfrage dieser Arbeit handelt von der korrekten und benutzergerechten Kai Meyer und Umsetzung von Benutzerrechten innerhalb der Benutzungsoberäche eines Torsten Witte Softwaresystems. In diesem Zusammenhang werden einige Begrie verwendet, die an dieser Stelle erläutert werden. 1.1 Benutzer Am Entwicklungsprozess von Software sind verschiedene Akteure beteiligt. Dazu gehören neben den Entwicklern, die die Anwendungssoftware konstruieren, auch die Benutzer, die die Anwendungssoftware am Arbeitsplatz ein- setzen. Allgemein betrachtet ist ein Benutzer eine natürliche Person, die zur Erledigung einer Aufgabe ein Hilfsmittel verwendet, um daraus einen Vorteil zu erzielen. Dabei kann es sich u.a. um Zeitersparnis und Kostenverringerung handeln. Im IT-Bereich ist also ein Akteur in der Rolle des Benutzers eine natürliche Person, die zur Erledigung einer Aufgabe ein Softwareprodukt verwendet, um ihre (tägliche) Arbeit schneller und besser erledigen zu können. In der Regel wird die Benutzerrolle von mehreren Akteuren eingenommen. Das Leitbild Arbeitsplatz für eigenverantwortliche Expertentätigkeit des + Werkzeug- und Material-Ansatzes (WAM) [Z 98] betrachtet Benutzer als kompetente Akteure und Fachleute in ihrem Arbeitsgebiet. Nutzer und Endbenutzer als Synonym Anwender sind dagegen Personen oder Organisa- Im Folgenden werden die Begrie für Benutzer verwendet. tionen, die eine Benutzung veranlassen, ohne unbedingt selbst (direkt) Benutzer zu sein. Die in der Literatur ebenfalls verwendete Bezeichnung Bediener ist irreführend, denn eigentlich soll nicht der Benutzer der Software dienen, sondern umgekehrt. Daher wird der Begri hier vermieden. + [Z 98, S.90f ], [Eng93, S.34] 9 Torsten Witte Teil 1 - Grundlagen 10 1.2 Benutzungsoberächen und Benutzungsfreundlichkeit Torsten Witte Damit ein Benutzer mit dem Softwaresystem interagieren kann, ist eine geeignete Schnittstelle notwendig. Diese Mensch-Maschine-Schnittstelle muss benutzergerecht gestaltet sein, um den Nutzer bei seiner Arbeit nicht zu beeinträchtigen oder gar zu behindern. Dazu haben im Laufe der Zeit neben Erkenntnissen der Informatik auch solche aus der Medienpsychologie, der Arbeitswissenschaft, der Kognitionswissenschaft, der (Software-)Ergonomie, der Soziologie und dem Design beigetragen. Heutzutage besitzen die meisten interaktiven Systeme zungsschnittstellen. grasche Benut- Fenster, Menüs, Werkzeugleisten, Schaltächen und Dialoge sind kaum noch vom Bildschirm wegzudenken. In dieser Arbeit werden in diesem Zusammenhang auch die Begrie User Interface) oder Benutzungsoberäche GUI (engl. verwendet. Graphical Die weit ver- breitete Bezeichnung Benutzeroberäche ist etwas unglücklich gewählt, da es sich bei der Oberäche des Benutzers um seine Haut handelt und nicht um eine Schnittstelle zwischen Mensch und Maschine. Auch die wörtliche Übersetzung von Graphical User Interface, nämlich grasche Benutzerschnittstelle ist nicht ganz treend formuliert. Das Wort Bedienoberäche wird ebenfalls vermieden (vgl. Bediener in Abschnitt 1.1). Die einzelnen Menüs und deren Menüpunkte, Werkzeugleisten, Schaltächen, Eingabe- und Auswahlfelder, Ankreuz-Kästchen, Schieberegler, usw., die in einer graschen Benutzungsoberäche zu nden sind, werden unter dem Sammelbegri Interaktionsobjekte zusammengefasst. Die Gestaltung einer Benutzungsoberäche bezieht sich nicht nur auf deren Layout (Präsentation) oder die Nutzung der unterschiedlichen Interaktionsmöglichkeiten (Handhabung) mit dem Computer. Auch die Vorstellung oder das Bild, das sich die Benutzer beim Einsatz im jeweiligen Anwendungs+ kontext machen, muss berücksichtigt werden. In [Z 98, S.71] wird dazu das Benutzungsmodell eingeführt. Es soll verdeutlichen, mit welchen Mitteln und auf welche Weise die anstehenden Aufgaben eines Benutzers unterstützt werden. Ein Benutzungsmodell ist ein fachlich orientiertes Modell darüber, wie Anwendungssoftware bei der Erledigung der anstehenden Aufgaben im jeweiligen Einsatzkontext benutzt werden kann. Das Benutzungsmodell umfasst eine Vorstellung von der Handhabung und Präsentation der Software aber auch von den fachlichen Gegenständen, Konzepten und Abläufen, die von der Software unterstützt werden. Benutzungsoberächen und Benutzungsfreundlichkeit 11 Grasche Benutzungsoberächen verwenden Symbole und Metaphern, um die Interaktion des Menschen mit dem Computer zu erleichtern. Die bekannteste Metapher ist die des Schreibtisches oder Desktops. Dort gibt es einen Arbeitsplatz, an dem symbolisch dargestellte Dokumente mit Hilfe der Maus ausgewählt und z.B. in einem Ordner oder dem Papierkorb abgelegt werden können. Objekte aus dem Alltag werden auf Datenobjekte im System abgebildet und umgekehrt. Das Prinzip der direkten Manipulation ist auf Shneiderman ([Shn82; Shn83; Shn87]) zurückzuführen. Durch die Verwendung und Darstellung von konkreten Objekten (z.B. Textdokumenten) lässt sich die Interaktion des Benutzers mit dem System auf einen relativ kleinen Satz von Operationen beschränken (z.B. Umbenennen, Bearbeiten, Drucken, Löschen). Dies vermittelt den Eindruck, die am Bildschirm dargestellten Objekte unmittelbar handhaben zu können. Shneiderman führte die direkte Manipulation als Sammelbegri für Benutzungsschnittstellen mit folgenden Eigenschaften ein: • Permanente Sichtbarkeit aller relevanten Objekte • Ersetzung komplexer Kommandos durch physische Aktionen, wie Mausbewegungen, Selektionsaktionen und Funktionstastenbetätigungen • Schnelle, umkehrbare, einstuge Benutzeraktionen mit unmittelbarer Rückmeldung Das bedeutet aber noch nicht, dass eine grasche Benutzungsoberäche von vornherein benutzergerecht gestaltet ist. Dazu muss sie, neben dem Benutzungsmodell, einige weitere Kriterien erfüllen. Ein wichtiger Aspekt in der Mensch-Computer-Interaktion ist die und Hardware (engl.: usability). Gebrauchstauglichkeit von Soft- Hierfür gibt es die im Jahr 2006 über- arbeitete Norm ISO 9241 Ergonomie der Mensch-System-Interaktion der International Organization for Standardization [ISO]. Die Norm deniert, welche Anforderungen an die Gebrauchstauglichkeit von Soft- bzw. Hardware gestellt werden. Nach Teil 110 Grundsätze der Dialoggestaltung (ersetzt den bisherigen Teil 10) und Teil 11 Anforderungen an die Gebrauch- stauglichkeit muss die Schnittstelle folgende Merkmale aufweisen: • Aufgabenangemessenheit • Selbstbeschreibungsfähigkeit • Steuerbarkeit • Erwartungskonformität • Fehlerrobustheit • Individualisierbarkeit Teil 1 - Grundlagen 12 • Erlernbarkeit Als Leitkriterien für die Gebrauchstauglichkeit von Software werden u.a. genannt: • Eektivität zur Lösung einer Aufgabe • Ezienz der Handhabung des Systems • Zufriedenheit der Nutzer einer Software Im Kontext dieser Arbeit sind besonders die Aufgabenangemessenheit, die Erwartungskonformität und die Individualisierbarkeit von Bedeutung. Ein aufgabenangemessen, wenn er den Benutzer unterstützt, seine Arbeitsaufgabe eektiv und ezient zu erledigen. Weiter ist ein Dialog erwartungskonform, wenn er konsistent ist und den Merkmalen des BenutDialog ist zers entspricht, z.B. seinen Kenntnissen aus dem Arbeitsgebiet, seiner Ausbildung und seiner Erfahrung sowie allgemein anerkannten Konventionen. Ein Dialog ist individualisierbar, wenn das Dialogsystem Anpassungen an die Erfordernisse der Arbeitsaufgabe sowie an die individuellen Fähigkeiten und Vorlieben des Benutzers zulässt. + [ZI93, S.9, S.145, S.160 ], [Z 98, S.71], [Sch06] 1.3 Identizierung Kai Meyer Identizierung oder auch Identikation ist laut Duden [Dud02] eine Fest- stellung der Identität . Bei [ITW07] steht unter Identikation: Die Identikation ist die Überprüfung einer Person oder eines Objektes in Bezug auf vorgelegte, eindeutig kennzeichnende Merkmale, die Identität. Die Begrie Identikation und Identizierung werden häug synonym verwendet. Da der Begri Identikation auch für die Einfühlung in einen anderen Menschen steht, wird in dieser Arbeit der Begri Identizierung verwendet. In einem Computersystem bedeutet Identizierung somit, dass der aktuelle Benutzer einer dem System bekannten Identität zugeordnet wird. Im Standardfall erfolgt dies durch einfache Eingabe eines Benutzernamens in einem Log-inDialog. Die Identizierung kann aber ebenso durch die Wiedererkennung eines Fingerabdrucks geschehen. noch keine Rechte im System. Durch diesen Vorgang besitzt die Person Zuerst muss die Identität noch authenti- ziert (Abschnitt 1.5) werden, bevor der Benutzer durch die Autorisierung (Abschnitt 1.6) seine Rechte erhält. Ein Identity-Management regelt und organisiert die Identizierung ei- ner Person oder Prozesses in dem betreenden System. Das Management Single Sign-On 13 unterstützt darüber hinaus bei der Verwaltung der Identitäten, besonders bei Verwendung eines Intranets oder des Internets. Dazu gehört das Erzeugen bzw. Löschen von Identitäten sowie deren Zuordnung zu Rollen (vgl. RBAC, Abschnitt 4.1). In groÿen Unternehmen kann dadurch die Zeit, bis ein neuer Anwender produktiv wird, reduziert werden (siehe auch [SNL06, S.39]). Des Weiteren kann das Identity-Management die Identitäten anderen Anwendungen und Services in heterogenen Umgebungen bereit stellen, um so ein Single Sign-On (SSO) zu gewährleisten. [ITW07], [Dud02], [SNL06] 1.4 Single Sign-On (SSO) Gerade groÿe Organisationen arbeiten mit verschiedenen Diensten und Programmen, die durch ein Log-in geschützt sind. Ein Single Sign-On Kai Meyer er- spart dem Benutzer, sich bei jedem Service separat anzumelden und sich ebenso den betreenden Account zu merken. Auÿerdem beugt es Sicher- heitsproblemen vor, die dadurch entstehen, dass sich ein Benutzer nicht bei einem der Dienste abgemeldet hat. Wie schon dem Begri Single Sign-On zu entnehmen ist, meldet sich der Benutzer nur ein einziges Mal an. Das Identity-Management kümmert sich ab diesem Zeitpunkt um die An- sowie Abmeldung bei allen gestarteten Anwendungen. Dies erhöht nicht nur die Sicherheit, sondern steigert auch die Ezienz der Anwendung, da der Arbeitsuss der Benutzer nicht ständig durch einen erneuten Anmeldevorgang gestört wird. [SNL06] 1.5 Authentizierung Ähnlich wie bei Identizierung und Identikation gibt es auch bei der Verwendung der Begrie Authentizierung und Authentisierung Unterschiede, obwohl sie im normalen Sprachgebrauch oft synonym verwendet werden. Authentizierung ist die Überprüfung (Verizierung) der angegebenen Identität eines Gegenübers, z.B. einer Person oder eines Computersystems. Authenti- sieren wird als glaubwürdig, rechtsgültig machen [Dud02] beschrieben. Da es in dem hier geschilderten Vorgang um die Überprüfung der Identität geht, wird im weiteren Verlauf der Arbeit der Begri Authentizierung ver- wendet. Für die Authentizierung kann von einer sich anmeldenden Person abgefragt werden: Kai Meyer Teil 1 - Grundlagen 14 • Wissen, das nur diese Person haben kann (z.B. Passwörter, PINs) • Besitz, der der Person zugeordnet werden kann (z.B. Schlüssel, ChipKarten) • biometrische Merkmale der Person selbst (z.B. Fingerabdruck, Iris) Allerdings hat jede Form der Authentizierung ihre Schwachpunkte. Passwörter können geraten oder ausspioniert, Schlüssel bzw. Karten gestohlen und Scanner für Fingerabdrücke überlistet werden. Durch Kombinationen der genannten Merkmale (z.B. Abfrage von Wissen und Besitz) lässt sich die Sicherheit der Authentizierung erhöhen. Für die richtige Wahl der Authentizierungsverfahren ist nicht nur dieser Aspekt wichtig, sondern auch der Aspekt der technischen Möglichkeiten. So hat z.B. nicht jeder einen Kartenleser oder Scanner für biometrische Daten an seinem Arbeitsplatz. Die Grenze zwischen Identizierung und Authentizierung ist manchmal schwer zu nden. From a technical perspective, most of us get confused when we try to distinguish between identication and authentication processes. [SNL06, S.29] Bei einem Log-in-Dialog sind die Verantwortlichkeiten noch klar erkennbar. Die Eingabe des Benutzernamens ist die Identizierung, die des Passwortes die Authentizierung. Doch schon beim Einscannen eines Fingerabdrucks sind die Grenzen verwischt. Denn durch das Einlesen des Fingerabdrucks wird die entsprechende Identität ermittelt, aber ebenso bestätigt, dass die Person auch zu der Identität gehört. [SNL06], [Dud02], [Sie06] 1.6 Autorisierung Kai Meyer Autorisierung ist die Festlegung, welche Rechte die im System angemel- dete und somit auch authentizierte Person bekommt. Die Rechte geben an, welche Funktionen vom Benutzer ausgeführt werden dürfen, welche Dateien gelesen und geschrieben oder welche Software-Komponenten zur Verfügung stehen. Um dies zu erreichen, gibt es verschiedene Techniken. Eine der bekanntesten Methoden ist die Verwendung von Access Control Lists (ACLs). Sie enthalten alle Benutzer und die ihnen gewährten Rechte, wie z.B. Leseoder Schreibrechte. Auch die Zuordnung von Benutzern zu Rollen ist weit verbreitet. Dabei überprüft die Anwendung, ob ein Angehöriger der Rolle A Aktion B ausführen darf. Im UNIX-Betriebssystem legt der Erzeuger einer Datei die Zugrisrechte für alle anderen Benutzer fest. Auf diese Thematik wird in Abschnitt 1.7 noch weiter eingegangen. [SNL06] Rechtevergabe und -entzug 15 1.7 Rechtevergabe und -entzug Eingangs wurden Benutzer als am Softwareentwicklungsprozess beteiligte Akteure eingeführt. sonen. Wie alle Akteure sind auch Benutzer natürliche Per- Juristisch gesehen ist eine natürliche Person der Mensch in seiner Rolle als Rechtssubjekt, d.h. als Träger von Rechten und Pichten. Die sog. Rechtsfähigkeit beginnt gemäÿ 1 des Bürgerlichen Gesetzbuches (BGB) mit der Vollendung der Geburt. Demnach besitzt jeder Mensch von Beginn seines Lebens gewisse Rechte. In Bezug auf ein Softwaresystem ist das eher die Ausnahme. Schlieÿlich darf nicht jede natürliche Person bestimmte Daten einsehen oder gar verändern (schon aus juristischen Gründen). Somit müssen diese Daten vor unberechtigtem Zugri geschützt werden. Den meisten Personen wird also der Zugri auf alle Daten und Funktionen innerhalb eines Systems bzw. auf das System selbst verwehrt. Auch die Benutzer, die auf das System zugreifen dürfen, besitzen trotzdem nicht die Berechtigung, alles zu tun, und haben nur eingeschränkte Rechte. Lediglich ein Administrator oder der Firmenchef besitzt alle Rechte, wenn überhaupt. Sobald eine Rechteverwaltung/Zugriskontrolle in ein System integriert werden soll, stellt sich eine Reihe von Fragen. Abgesehen von den technischen Schwierigkeiten, die zu lösen sind, sollte folgendes im Vorfeld geklärt werden: • Welche Rechte werden benötigt? • Auf welcher Ebene? (Betriebssystem-, Dateisystem-, Anwendungs-, Funktions-Ebene) • Wer hat das Recht, Rechte zu vergeben? • Wer hat das Recht, Rechte zu entziehen? • Können Rechte an andere authentizierte Benutzer weitergereicht werden? Je nach Kontext und Betrachtungsebene belaufen sich die Rechte auf einfache Lese- und Schreibrechte. Darüber hinaus können zum Einfügen, Löschen und Verändern einzelner Daten eigene Berechtigungen erforderlich sein. Aus fachlicher Sicht kommen domänenspezische Berechtigungen hinzu, die meist nur gröÿere Konstrukte der erstgenannten sind. Zum Beispiel darf aufgrund der Organisation innerhalb eines Alten- und Pegeheimes nur die Heimleitung die Freistellungsanträge von Mitarbeitern genehmigen. Vorstellbar ist also das Recht Freistellungsanträge genehmigen für eine bestimmte Torsten Witte Teil 1 - Grundlagen 16 Benutzergruppe. Im System kann dies durch eine einfache Schreibberechtigung umgesetzt werden, die sich auf ein Feld mit booleschen Werten (genehmigt/abgelehnt) einer Datenbanktabelle bezieht. Für die Vergabe und den Entzug von Rechten gibt es unterschiedliche Autorisierungsstrategien: • Zentral: z.B. durch einen Administrator (z.B. bei Mandatory Access Control (MAC)) • Dezentral: durch verschiedene Benutzer (i.d.R. bei Discretionary Access Control (DAC)) • Eigentümerprinzip: Der Erzeuger eines Objektes wird sein Eigentümer und kann Rechte am Objekt vergeben/entziehen • Hierarchisch dezentralisiert: Eine zentrale Autorität vergibt Administratorrechte für einzelne Teile der Anwendung an Sub-Administratoren • Kooperativ: Die Vergabe von Rechten ndet nur in Zusammenarbeit einer Gruppe von Benutzern statt (4-Augen-Prinzip) Ebenso existieren verschiedene Methoden für die Menge der vergebenen Berechtigungen zu einem Zeitpunkt: • Need-to-know: Jeder Benutzer bekommt nur die Rechte, die er höchstens braucht. • Minimum privilegies: Über das Need-to-know Prinzip hinaus bekommt jeder Nutzer nur die Rechte, die er aktuell braucht. Gerade der Entzug von Rechten führt weitere Fragen mit sich. Falls Benutzer ihre Rechte an andere Benutzer weiterreichen können, sollen dann weitergereichte Rechte ebenfalls entzogen werden, wenn dem Benutzer, der ein Recht weitergereicht hat, das betreende Recht entzogen wird? Unabhängig davon ist zu klären, welche Auswirkungen sich für den Benutzer ergeben. Folgendes Szenario ist vorstellbar: Ein Benutzer bearbeitet gerade ein Dokument (weil er die Befugnis hat) und ihm wird währenddessen dieses Recht entzogen. Ab wann gilt der Entzug des Rechtes? Sofort oder erst nach einem Neustart der Anwendung? Wann wird der Benutzer darüber in Kenntnis gesetzt und was passiert mit dem bearbeiteten Dokument? Es gibt verschiedene, mehr oder weniger sinnvolle, Möglichkeiten: 1. Es erscheint sofort ein Meldungsfenster mit einem entsprechenden Hinweis. Rechtevergabe und -entzug 17 a. Der Benutzer kann noch weiter arbeiten und seine Änderungen an diesem Dokument abspeichern. b. Der Benutzer kann noch weiter arbeiten, wird aber nicht abspeichern können. c. Das Dokument wird geschlossen und alle Änderungen rückgängig gemacht. 2. Erst beim Speichern erscheint eine Meldung über die fehlende Berechtigung. a. Das aktuelle Dokument wird noch gespeichert. b. Das aktuelle Dokument wird nicht gespeichert und alle Änderungen verworfen. 3. Beim nächsten Önen des Dokumentes erscheint eine Meldung über die entzogenen Rechte. a. Bei der vorherigen Bearbeitung wurde das Dokument noch gespeichert. b. Bei der vorherigen Bearbeitung wurde das Dokument nicht gespeichert und alle Änderungen verworfen. Sicherlich gibt es noch weitere Varianten. Aus Benutzersicht ist wohl eine möglichst schnelle Rückkopplung wünschenswert, ohne die aktuelle Arbeit zu unterbrechen. Die Beantwortung dieser Fragen hängt gewiss davon ab, wie oft Rechte (während des laufenden Betriebs) entzogen werden. Einige der genannten Fragen werden häug auf Datenbank-Ebene diskutiert, um den Zugri auf die darin enthaltenen Daten zu schützen. Viele Datenbanksysteme bieten vernünftige Lösungen an, so dass diese in der eigenen Anwendung nur aufgegrien werden brauchen. Dadurch besteht der Schutz sehr nah an den Daten selbst. Allerdings ist damit noch kein Bezug zu der Benutzungsoberäche der eigenen Anwendung geschaen. Im (aus Entwicklersicht) einfachsten Fall erhält der Benutzer entsprechende Meldungen erst, wenn es aus seiner Sicht zu spät ist (nämlich nach getaner Arbeit) und kann dennoch die verwehrte Aktion innerhalb der GUI jederzeit erneut anwählen. Auf jeden Fall sollte die Rechteverwaltung von Beginn der Entwicklung an mit in die Architektur der Anwendung einbezogen werden. Dies erspart unnötige Arbeit und erhöht die Sicherheit des Systems. [Sch05, S.39], [Bru04, Kap.7] Teil 1 - Grundlagen 18 1.8 Filterregeln bei Autorisierung Torsten Witte Zum Schutz vor Angrien aus einem anderen Netzwerk (z.B. dem Internet) werden Firewalls eingesetzt. Diese lassen lediglich bestimmte Dienste in das lokale Netzwerk durch. Filterregeln. Die Für diese Autorisierung von Diensten gibt es zwei Verbotsregel besagt, dass als gefährlich eingestufte Dien- ste verboten werden. Dies ist ein sehr einfaches Verfahren. Dienste, die nicht explizit verboten werden, bleiben erlaubt und werden nicht in ihrer Ausführung behindert. Riskante Dienste können dabei allerdings übersehen werden. Um dies zu vermeiden, ist es sicherer, nach der Erlaubnisregel vorzugehen. Dabei werden von vorn herein alle Dienste verboten und nur die als sicher eingestuften Dienste erlaubt. Diese Filterregeln lassen sich von dem Firewall-Kontext auch auf die Benutzerautorisierung übertragen. Nach der Verbotsregel werden einem Benutzer grundsätzlich alle Dienste erlaubt und nur bestimmte Funktionalitäten oder Komponenten verboten. Im Gegensatz dazu werden dem Benutzer analog zur Erlaubnisregel generell alle Dienste verboten und nur bestimmte erlaubt. [Bru04, Kap.3] 1.9 Zusammenfassung Kai Meyer und Die in diesem Kapitel genannten Begrie und Denitionen bilden das Basis- Torsten Witte vokabular und die Grundlage für diese Arbeit. Sie wurden hier vorgestellt, um von Anfang an Missverständnissen vorzubeugen, da einige Begrie in der Literatur unterschiedlich verwendet werden. Im weiteren Verlauf dieser Arbeit werden die Begrie durchgehend verwendet: Benutzer werden von einem Softwaresystem authentiziert, um ihre Identität zu bestätigen. Ein Single Sign-On erleichtert dabei den Anmeldevorgang bei anwendungsübergreifenden Systemen. Über die Autorisierung erhalten die Benutzer ihre Berechtigungen innerhalb des Systems. Dies kann über unterschiedliche Strategien und Filterregeln realisiert werden. Wenn die Benutzer ihren Aufgaben nachkommen, interagieren sie über die Benutzungsoberäche und Interaktionsobjekte mit der Anwendung. Die Oberäche sollte daher für eine benutzergerechte Gestaltung bestimmte Kriterien erfüllen und ein passendes Benutzungsmodell umsetzen, um die Benutzer nicht bei ihrer Arbeit zu behindern. Das nächste Kapitel liefert einen Einblick in eine weitere Grundlage dieser Arbeit: die Eclipse Rich-Client-Platform. Kapitel 2 Die Eclipse Rich-Client-Platform Dieses Kapitel behandelt Grundlagen von Rich-Clients, Eclipse und der Torsten Witte Eclipse RCP. Es ist nicht das Ziel, Eclipse oder die Entwicklung von EclipseRich-Clients in vollem Umfang und bis in das letzte Detail zu erläutern, sondern lediglich einen kurzen Einblick zu geben und auf spätere Kapitel vorzubereiten. 2.1 Was ist ein Rich-Client? Ein Rich-Client ist ein Ableger des Fat-Clients mit reichhaltigeren Problemlösungen. Er bietet die Vorteile eines Fat-Clients sowie einige eines Thin- Clients ohne zusätzliche Nachteile. Um einen Rich-Client genauer denieren und abgrenzen zu können, ist es daher nötig, zuerst die Begrie Thin-Client und Fat-Client zu klären. In einer Client-Server-Architektur haben Thin-Clients nur die Aufgabe, die Daten darzustellen, die sie vom Server erhalten. Diese Daten werden meist in Form von HTML-Dateien über das Intra- bzw. Internet übertragen. Zudem übernehmen Thin-Clients die Interaktion mit dem Benutzer, d.h. die Eingabe über Formulare. Daher reicht ein gängiger Webbrowser auf Clientseite aus. Die gesamte Logik der Anwendung bendet sich auf dem Server. Vorteile von Thin-Clients: • Kaum bis gar kein Installationsaufwand des Clients, denn Webbrowser sind bereits in den meisten Betriebssystemen integriert. • Reduzierung des Trainingsaufwandes, da jeder seinen bevorzugten Webbrowser verwenden kann und das Benutzungsmodell für alle Anwendungen gleich ist. 19 Torsten Witte Teil 1 - Grundlagen 20 • Anwendungen können leicht über das Internet zur Verfügung gestellt werden. So können Mitarbeiter auch von zu Hause aus arbeiten. • Änderungen, die auf dem Server durchgeführt werden, werden automatisch und ohne Installationsaufwand von allen Clients übernommen. • Benutzungsoberächen sind relativ einfach und günstig zu implementieren. Nachteile von Thin-Clients: • Reine HTML-Seiten sind statisch und nur sehr wenige Dialogelemente 1 stehen zur Verfügung. Darunter leidet die Benutzungsfreundlichkeit. • Thin-Clients können nur Online verwendet werden. Der Server ist die einzige Datenquelle, die sie besitzen. • Sie sind nicht geeignet für Anwendungen, die einen groÿen Rechenaufwand für die Darstellung benötigen. Diese Aufgabe überschreitet meistens die Rechenleistung des Servers. Auÿerdem ist der Durchsatz des Datentransfers begrenzt. Ein Fat-Client ist das Gegenstück zum Thin-Client. Zu einem Fat-Client werden zu der API (Application Programming Interface) auch die dazugehörige Hardware, und deren Abstraktionsschicht (engl. Hardware Abstraction Layer, HAL) gezählt. Ein Fat-Client ist also weder hardware-, noch plattformunabhängig. Auÿerdem erfüllt er nur die vom Server erwartete Aufgabe. Dabei wird der Server jedoch so weit wie möglich entlastet, denn die eigentliche Datenverarbeitung wird clientseitig durchgeführt. Die grasche Benutzungsoberäche wird ebenfalls von dem Client zur Verfügung gestellt. Für exible Anwendungen ist ein Fat-Client demnach allerdings nicht geeignet. Aktualisierungen sind ebenfalls aufwendig. Um nun die Vorteile beider Client-Architekturen zu nutzen und den Nachteilen entgegenzuwirken, bietet sich der Rich-Client an. Rich-Clients be- sitzen ein robustes Komponentenmodell, das durch Module und Plug-Ins erweiterbar ist. So löst ein Rich-Client nicht nur ein Problem (was bei FatClients üblich ist), sondern kann auch noch artverwandte oder gar artfremde Probleme lösen. Idealerweise können fremde Lösungen (z.B. von verschiedenen Anbietern) innerhalb eines Rich-Clients zusammen arbeiten, so dass sie wie eine einzige Anwendung erscheinen. Software-Entwickler und -Anbieter 1 Dieser Umstand hat zur Entwicklung vieler neuer Technologien beigetragen, die in HTML eingebettet werden. Da sind u.a. zu nennen: Applets, JavaScript, ActiveX, Flash. Alle diese Techniken haben ihre Vor- und Nachteile. Was ist ein Rich-Client? 21 können mit Hilfe von Rich-Client-Plattformen auch sogenannte Rich-ClientDistributionen aus bestimmten Modulen/Plug-Ins bündeln und bestimmten Benutzergruppen fertig zur Verfügung stellen. So erhält Benutzergruppe 1 eine Anwendung, die aus Plug-In für Benutzergruppe 2 aus Plug-In A und B besteht, während die Anwendung B und C zusammengesetzt ist. Eigenschaften und Aufgaben von Rich-Clients: • Robustes Komponentenmodell • Erweiterbarkeit • Anpassungsfähigkeit an den Endbenutzer • Anpassungsfähigkeit an verschiedene Geräte (Hardwareunabhängigkeit) • Sowohl Online- als auch Oine-Arbeiten möglich • Einfache Verteilung an Endbenutzer • Einfache Aktualisierung des Clients • Komplexe (native) Benutzungsoberäche • Entlastung des Servers • Lokale Datenhaltung • Anwendungslogik auf Clientseite • Synchronisation der lokalen Daten mit dem Server Kurz zusammengefasst sollte ein Rich-Client alles können, was eine übliche Desktop-Anwendung zu bieten hat und zusätzlich die Kommunikation mit einem Server gestatten. Darüber hinaus sollen alle denkbaren Vorteile der Serveranbindung zur Geltung gebracht werden. [KB06, S.8 ], [Dau05b, S.1 ], [Bea05], [Bur05] Teil 1 - Grundlagen 22 2.2 Was ist die Eclipse Rich-Client-Platform? In short, Eclipse is an ideal technology for building rich client applications. Je McAer, Jean-Michel Lemieux [ML06, S.25] Torsten Witte Die Eclipse Rich-Client-Platform (RCP) ist eine erweiterbare Plattform für die Entwicklung und den Einsatz von nativen Java-Anwendungen. Mit ihrer Hilfe können schnell und einfach Rich-Client-Anwendungen erstellt werden. Die Eclipse RCP stellt bereits die Infrastruktur für die Entwicklung einer kompletten Rich-Client-Anwendung zur Verfügung. Beispielsweise können vorgefertigte Plug-Ins für einen Update-Mechanismus oder ein Hilfesystem verwendet werden. Das UI-Framework sorgt durch SWT (Standard Widget Toolkit) und JFace für native GUI-Elemente. Somit können sich Rich-ClientEntwickler ganz auf ihre Problem-Domäne konzentrieren. The RCP part is easy; it's your domain that is hard. [ML06, S.59] Merkmale der Eclipse RCP: • Plattform für die Entwicklung und den Einsatz von Rich-Client-Anwendungen • beschleunigt die Desktop-Entwicklung • beinhaltet Equinox, ein auf dem OSGi-Standard basierendes Komponenten-Framework • durch das zugrunde liegende Plug-In-Modell können Anwendungsmerkmale über eine groÿe Produktpalette hinweg gemeinsam verwendet werden • das Plug-In-Modell ermöglicht verteilte Entwicklung, auch über geograsch und organisatorisch getrennte Teams hinweg • ist fähig, native GUI-Anwendungen auf einer Vielzahl von Betriebssystemen einzusetzen, wie z.B. Windows, Linux oder Mac OSX • integrierter Update-Mechanismus für den Einsatz von Desktop-Anwendungen von einem zentralen Server aus • bietet Oenheit und Flexibilität gegenüber eigenen Erweiterungen • Verwaltung von Benutzerpräferenzen [ML06], [Dau05b], [MA06] Zur Entstehungsgeschichte der Eclipse RCP 23 2.2.1 Zur Entstehungsgeschichte der Eclipse RCP Eclipse [Ecla] wurde im November 2001 von IBM veröentlicht und ist seit dem frei verfügbar. Es war zunächst als eine Plattform für Softwarewerk- zeuge geplant und bis Version 2.1 auch nur als solche interessant. In Version 3.0 wurde die gesamte Plattform neu organisiert. Die bis dahin proprietäre Ablaufumgebung wurde auf die standardisierte OSGi-Plattform umgestellt 2 (Equinox ). Die IDE (Integrated Development Environment) wurde vom Kern getrennt. Der Kern ist sehr klein und hat nur die Aufgabe, Plug-Ins zum Ablauf zu bringen. Die Eclipse RCP besteht aus der Laufzeitumge- bung, SWT, JFace und der Generic Workbench (siehe Abschnitt 2.3). This is a generic platform for running applications. [ML06, S.5] Die Eclipse-IDE selbst ist nur noch eine spezische Rich-Client-Anwendung auf Basis dieser RCP. Zur Zeit der Erstellung dieser Arbeit ist Eclipse in der Version 3.2.2 verfügbar. [Dau05b, S.9f, S.25 ], [ML06, S.6f, S.13f, S18f ], [Equ] 2.2.2 Open Service Gateway Initiative (OSGi) Der Zweck der Open Service Gateway Initiative (OSGi) [OSG] ist die Standardisierung von Diensten, die auf lokalen Netzwerken und eingebetteten Geräten zum Einsatz kommen sollen. OSGi-konforme Dienste können auf OSGi-konformen Servern ausgeführt werden. Der Ablaufkern von Eclipse arbeitet als ein solcher OSGi-Server. Der Vorteil dieser Ablaufumgebung liegt unter anderem darin, dass Hot Plugging möglich ist, also der Austausch von Bundles im laufenden Betrieb. Bundles (zu deutsch Bündel) sind Java- Module; im Fall von Eclipse sind es die Plug-Ins. A bundle is a plug-in. A plug-in is a bundle. They are the same thing. [ML06, S.18] Im weite- ren Verlauf dieser Arbeit wird daher im OSGi-Kontext von Bundles und im Eclipse-Kontext von Plug-Ins die Rede sein, obwohl das selbe gemeint ist. [Dau05b, S.9f, S.26f ], [ML06, S.18f ] 2.2.3 Erfolg der Eclipse RCP Die Eclipse RCP spielt auf dem Gebiet der Rich-Client-Anwendungen eine immer gröÿere Rolle. Laut einer Umfrage von Evans Data [Eva] im September 2006 ist die Akzeptanz der Eclipse Rich-Client-Platform gegenüber einer 2 Equinox ist eine Implementierung der OSGi R4.0-Spezikation, eine Menge von Bundles die verschiedene optionale OSGi-Dienste und die übrige Infrastruktur zur Ausführung OSGi-basierter Systeme zur Verfügung stellt. Teil 1 - Grundlagen 24 früheren Untersuchung aus dem Jahr 2005 um 130% gestiegen. 22% der rund 400 Teilnehmer gaben an, dass sie bereits Rich-Client-Anwendungen basierend auf der Eclipse RCP erstellen. 69% gaben an, innerhalb der nächsten sechs Monate mit Eclipse RCP arbeiten zu wollen. [MA06], [Unb06] 2.3 Die Eclipse Plug-In-Architektur Everything in Eclipse is a plug-in. An RCP application is a collection of plug-ins and a Runtime on which they run. Je McAer, Jean-Michel Lemieux [ML06, S.13] Torsten Witte Eine Plattform unterscheidet sich von einer erweiterbaren Anwendung dadurch, dass die Plattform lediglich eine kleine Laufzeitumgebung zur Verfügung stellt, auf der die einzelnen Komponenten ablaufen, die die eigentliche Anwendung ausmachen. Dadurch ist die Anwendung kein fester Klotz, sondern exibel und einzelne Komponenten können leicht ausgetauscht werden (siehe Abbildung 2.1). Genau das bietet auch die Eclipse Rich-Client- (a) Erweiterbare Anwendung (b) Plattform Abbildung 2.1: Erweiterbare Anwendung vs. Plattform [ME05, S.4] Platform. Die einzelnen Plug-Ins werden zu einer gesamten Anwendung zusammengesteckt und auf der Laufzeitumgebung, der Eclipse RCP, ausgeführt. Plug-Ins 25 Abbildung 2.2: Eclipse-Plattform [Dau05a, S.347] An dieser Stelle sei ein kurzer Blick auf die Eclipse-Plattform in Abbildung 2.2 geworfen. Der dunkel gekennzeichnete Teil entspricht der Laufzeitumgebung aus Abbildung 2.1(b). Er macht bis auf einige Komponenten der Generic Workbench die Eclipse RCP-Minimaldistribution aus. Die Generic Workbench stellt die Kernfunktionalität der Rich-Client-Platform dar. Sie verwaltet die globalen Menü- und Werkzeugleisten, Editoren, Views, Präferenzen, Wizards usw. Somit stehen diese Funktionen jeder Rich-Client- Anwendung zur Verfügung. Der hellere Teil in der Grak entspricht den Plug-Ins aus Abbildung 2.1(b) und enthält die Komponenten für die EclipseIDE. Diese Komponenten können auch für eigene Rich-Client-Anwendungen wiederverwendet werden (z.B. die Plug-Ins Help und Update). Im Weiteren werden die Konzepte der einzelnen Bestandteile der EclipseArchitektur vorgestellt. [Dau05a], [ME05], [ER05] 2.3.1 Plug-Ins Ein Plug-In bildet die kleinste Einheit in der Eclipse RCP-Architektur, die eine Funktion bereitstellt und getrennt von anderen Komponenten entwickelt und ausgeliefert werden kann. Für gewöhnlich wird ein kleines Werkzeug Kai Meyer Teil 1 - Grundlagen 26 durch ein Plug-In realisiert, während komplexe Werkzeuge aus mehreren Plug-Ins bestehen. So ist z.B. fast die gesamte Funktionalität der Eclipse Plattform in Plug-Ins enthalten. Nur der Kern, also die Platform Runtime, ist kein Plug-In. Die einzelnen Plug-Ins können selbstständig ihre Aufgaben durchführen oder andere Plug-Ins benutzen beziehungsweise deren Funktionalität erweitern. Die Anbindung eines Plug-Ins an den Rest des Systems wird über die Extension-Registry (siehe Abschnitt 2.3.3) geregelt. Grundsätzlich besitzt jede RCP-Anwendung ein bestimmtes Plug-In, welches als Anwendungs-Plug-In oder RCP-Plug-In bezeichnet wird. Die- ses Plug-In konguriert die RCP-Anwendung und identiziert die Anwendung gegenüber der Eclipse Rich-Client-Platform (siehe dazu Abschnitt 2.4.3). Um Plug-Ins besser strukturieren zu können, sieht die Eclipse RCP Fragmente und Features vor. Fragmente sind im Gegensatz zu Plug-Ins keine eigenständigen Komponenten. So besitzen sie auch keine korrespondierende Repräsentation auf der OSGi-Plattform. Fragmente bieten lediglich weitere Funktionalitäten zu einem existierenden Plug-In an. Dazu gehören unter anderem Sprachpakete und ergänzende Funktionen für andere Betriebssysteme oder Datenbanken. Der Vorteil von Fragmenten ist, dass sie unabhängig vom Rest des Plug-Ins erstellt und somit auch zu einem späteren Zeitpunkt ausgeliefert werden können. Ein Feature hingegen dient der Gruppierung von mehreren Plug-Ins, die eine abgeschlossene Funktionsgruppe bilden. Darüber hinaus werden Features für Update-Sites (siehe Abschnitt 2.5) benötigt. Eigenen Code besitzt ein Feature nicht, sondern liefert lediglich weitere Information zu den Plug-Ins, die dieses Feature beinhaltet. [Dau05b, S.59], [Dau05a, S.439 ], [Ecl06] 2.3.2 Lebenszyklus von Bundles/Plug-Ins Torsten Witte Wie das Zustandsdiagramm in Abbildung 2.3 auf Seite 28 zeigt, kann ein OSGi-Bundle im Verlauf seines Lebens bis zu sieben verschiedene Zustände einnehmen: • Deployed: Ein Bundle ist aufgeboten, wenn es physikalisch auf der Festplatte vorhanden ist. Es kann vorkommen, dass ein Bundle le- diglich auf einem Server aufgeboten ist und nie auf der ausführenden Maschine vorhanden sein wird. Dieser Zustand wird formal nicht vom System repräsentiert. Daher ist er in Abbildung 2.3 nur als schwar- zer Punkt vermerkt. Dennoch wird der Begri verwendet, um über Bundles zu sprechen, die installiert werden könnten. Lebenszyklus von Bundles/Plug-Ins • 27 Installed: Ein installiertes Bundle ist aufgeboten und im OSGi-Framework enthalten, so dass es ausgeführt werden kann. Im Fall von Eclipse werden die Registerbeiträge (engl. registry contributions) installierter Plug-Ins noch nicht zu der Extension-Registry (siehe Abschnitt 2.3.3) hinzugefügt. • Resolved: Damit ein Bundle den Zustand Aufgelöst erreichen kann, muss es installiert sein. Da ein Bundle von anderen Bundles abhän- gig sein kann, müssen zusätzlich alle vorausgesetzten Bundles ebenfalls aufgelöst sein. Innerhalb der Eclipse-Laufzeitumgebung sind die Registerbeiträge aufgelöster Plug-Ins in die Extension-Registry eingebunden. Aufgelöste Bundles können vollständig betriebsbereit sein. Es kann aber vorkommen, dass so ein Bundle nie gestartet wird, da kein Programmcode aus dem Bundle aufgerufen wird. • Starting: Ein aufgelöstes Bundle wechselt in den aktiven Zustand indem es startet. Es bleibt in diesem Zustand bis die start()-Methode des Bundle-Activator vollständig ausgeführt wurde (siehe Abschnitt 2.4.2). • Active: Ein aktives Bundle ist aufgelöst gewesen und die start()- Methode wurde erfolgreich durchgeführt. Aktive Bundles sind voll- ständig betriebsbereit. • Stopping: Aktive Bundles wechseln zurück in den aufgelösten Zustand indem sie angehalten werden. In diesem Zustand bleiben sie solange die stop()-Methode des Bundle-Activator ausgeführt wird. • Uninstalled: Bundles erreichen den Zustand Deinstalliert nur, wenn sie bereits im installierten Zustand gewesen sind und deinstalliert werden. Sollte das Bundle sogar aktiv geworden sein, muss es erst angehalten werden, um deinstalliert werden zu können. Deinstallierte Bundles benden sich immer noch im System. Sie sind nicht von der Festplatte gelöscht und beim nächsten Start der Plattform wieder verfügbar (Installed). In dem Diagramm ist ebenfalls dargestellt, dass Bundles nur in den Zuständen Installed und Resolved aktualisiert werden können. Das bedeutet, dass bereits aktive Bundles gestoppt werden müssen, bevor eine Aktualisierung stattnden kann. Ein aktualisiertes Bundle bendet sich nach dem Update stets wieder im Zustand Installed. Dementsprechend müssen die betreenden Bundles neu aufgelöst werden, um sie wieder in die (laufende) Anwendung einzubinden. Weitere Informationen zu Updates in der Eclipse RCP benden sich in Abschnitt 2.5. Teil 1 - Grundlagen 28 Abbildung 2.3: Lebenszyklus von Bundles [ML06, S.460] Für die Beobachtung und Steuerung, der in einer Eclipse RCP vorhandenen Plug-Ins eignet sich die OSGi-Konsole (Anhang B.2.2). Der Lebenslauf der Eclipse-Workbench ist in [ML06, S.217 ] dargestellt. Der Lebenslauf einer ganzen Eclipse-Rich-Client-Anwendung ist in [ML06, S.475 ] beschrieben. [ML06, S.455, S.459f ] 2.3.3 Extension-Points, Extensions und ExtensionRegistry Torsten Witte Ein Erweiterungspunkt oft auch als Steckdose (engl. extension bezeichnet) deniert eine Schnittstelle eines Plug-Ins. Diese Schnittstelle kann von (anderen) Plug-Ins in Form von (engl. diese alle Erweiterungen extensions; bei obiger Metapher als Stecker bezeichnet) erfüllt werden. ster point; (engl. Das Erweiterungsregi- extension registry) von Eclipse verwaltet Beziehungen zwischen Erweiterungspunkte Plug-Ins. und aufgelösten Plug-Ins registriert. Hier Erweiterungen sind aller Jede Eclipse RCP- Anwendung besitzt so ein Register. Die nebenstehende Abbildung wurde aus [ME05, S.11] entnommen. Plug-Ins bieten sich selbst für Erweiterungen an. Such a plug-in is es- sentially saying, If you give me the following information, I will do . . . [ML06, S.21]. Dazu deklarieren sie Erweiterungspunkte. Andere Plug-Ins liefern dann die benötigte Information zu diesen Erweiterungspunkten über Extension-Points, Extensions und Extension-Registry Erweiterungen. 29 In welchen Relationen Plug-Ins zu Erweiterungen stehen können, listet Azad Bolour in [Bol03, Abschnitt 2.3.2] auf: 1. Ein Plug-In kann mehrere Erweiterungspunkte anbieten 2. Ein Plug-In kann sowohl Erweiterungspunkte als auch Erweiterungen anbieten 3. Mehrere Plug-Ins können einen Erweiterungspunkt erweitern 4. Ein Plug-In kann den selben Erweiterungspunkt mehrmals erweitern 5. Ein Plug-In kann verschiedene Erweiterungen für unterschiedliche PlugIns vorsehen 6. Eine einzige Erweiterung eines einzelnen Plug-Ins kann mehrere Callback-Objekte erzeugen (siehe Abschnitt 2.4.5) 7. Ein Plug-In kann Erweiterungen zu seinen eigenen Erweiterungspunkten anbieten Auf diese Weise entstehen Abhängigkeiten zwischen Plug-Ins, die einer Anbie+ ter-Kunde-Beziehung gleichen (vgl. Vertragsmodell [Z 98, S.45]). Wie Abhängigkeiten zwischen Plug-Ins aufgebaut sein können, ist in Abschnitt 2.3.4 beschrieben. Die Vorteile von Erweiterungspunkten und Erweiterungen sind: • Sie werden lediglich deklarativ angegeben. Dadurch können sie geltert, überprüft und zusammengesetzt werden. • Sie unterstützen Lazy-Loading. Plug-Ins, die Erweiterungen beitragen, können im System präsent sein, ohne dass es nötig ist, ihren Code zu laden. • Sie können zur Laufzeit hinzugefügt und entfernt werden. • Der Mechanismus kann verwendet werden, um Code und/oder Daten beizutragen. Die Eclipse RCP bietet bereits einen Satz von Erweiterungspunkten an. Einige davon sind in Abschnitt 2.4.4 aufgelistet. Zusätzlich können eigene (domänenspezische) Erweiterungspunkte deniert werden. In Abschnitt 2.4.5 wird ein tieferer Blick auf die Verwendung und das Zusammenspiel von Extension-Points, Extensions und Extension-Registry auf programmiertechnischer Ebene geworfen. [ML06, S.21, S.392 ], [ME05], [Bol03] Teil 1 - Grundlagen 30 2.3.4 Plug-In-Abhängigkeiten Torsten Witte Plug-Ins önen sich für andere Plug-Ins, indem sie Erweiterungspunkte anbieten und Teile ihrer Paketstruktur und somit die darin enthaltenen Klassen und Schnittstellen veröentlichen. Dies hat den Vorteil, dass andere Plug-Ins diese Klassen und Schnittstellen verwenden können. Somit können Plug-Ins über die denierten Schnittstellen miteinander kommunizieren (wie in Abschnitt 2.4.5 zu sehen). Auch muss Logik nur einmal implementiert werden, da vorhandene (Hilfs-)Klassen wiederverwendet oder erweitert werden können. (a) (b) (c) Abbildung 2.4: Plug-In-Abhängigkeiten Verwendet z.B. ein Plug-In Plug-Ins A oder importiert direkten Abhängigkeit von B B B einen Erweiterungspunkt eines anderen die Paketstruktur von B zu A (vgl. A, führt dies zu einer Abbildung 2.4(a)). D.h. ohne A kann A nicht den Zustand Aufgelöst erreichen (siehe Abschnitt 2.3.2). Plug-In kann dagegen auch ohne Plug-In B aktiv werden. B kann aber auch zu einem anderen Plug-In A beitragen, ohne davon direkt abhängig zu sein. Dabei wird der Weg über ein drittes Plug-In C gegangen (Abbildung 2.4(b)). Der Erweiterungspunkt org.eclipse.ui.popupMenus des UI-Plug-Ins erlaubt zum Beispiel, Menüpunkte in Kontextmenüs anderer Plug-Ins hinzuzufügen. Wenn B einen Menüpunkt zu A hinzufügt, sind beide Plug-Ins (A und B) direkt von dem UI-Plug-In (also C) abhängig: B, weil es eine Klasse vom Typ IActionDelegate anbietet und den Extension-Point erweitert (beides kommt aus C), und A, weil es ebenfalls zur Ein Plug-In Benutzungsoberäche beiträgt. Somit können beide Plug-Ins ohne das dritte Plug-In C nicht gestartet werden. Trotzdem sind A und B unabhängig voneinander. Falls sich nur B in der Einleitung 31 Laufzeitumgebung bendet, verlaufen die Beiträge zu A jedoch nicht. Sollte nur Plug-In A ins Leere. wird dieses normal ausgeführt, ohne irgendwelche Beiträge von ist B nicht verfügbar und A weiÿ nichts von B. B. Schlieÿlich Erst wenn beide Plug-Ins in der Laufzeitumgebung angemeldet sind, sind die Beiträge von von A Dies stört in der Umgebung vorhanden sein, dann B innerhalb vorzunden. Plug-Ins sind in der Lage, ihre eigenen Abhängigkeiten an Dritte weiterzureichen. Benötigt Plug-In B z.B. Schnittstellen von Plug-In A, da es sich selbst für Erweiterungen zur Verfügung stellt, für die diese Schnittstellen benötigt werden, dann kann Plug-In mögliche erweiternde Plug-Ins von B B (hier die Abhängigkeit zu Plug-In C) A an durchreichen. Auf diese Weise sind Plug-Ins nur noch von dem Plug-In direkt abhängig, das sie erweitern. Die Struktur unterhalb des durchreichenden Plug-Ins muss dabei nicht bekannt sein (vgl. Fassade [GHJV95, S.212]). C kann ohne A und ohne B nicht existieren. Da stieren kann, reicht es aus, wenn bleibt C von A C nur von B B ebenfalls ohne A nicht exi- direkt abhängig ist. Indirekt abhängig (siehe Abbildung 2.4(c)). 2.4 Eclipse-Architektur in der Praxis In den folgenden Abschnitten wird erläutert, wie ein Plug-In intern aufgebaut ist, wie Plug-Ins zueinander in Beziehung treten und wie die einzelnen Funktionen einer zu entwerfenden Anwendung auf Plug-Ins abgebildet werden sollten. Seit Eclipse-Version 3.1 erleichtert die Plug-In Development Environment (PDE) die Entwicklung von Rich-Client-Anwendungen. PDE stellt einfach zu bedienende Werkzeuge wie Wizards und Formular-Editoren zur Verfügung. Diese unterstützen Entwickler beim Entwickeln, Testen, Beseitigen von Fehlern (debugging), Aufbau und Einsatz von Eclipse Plug-Ins. Durch die PDE ist es möglich, schnell und ohne viel Kenntnis der inneren Strukturen (XML-Tags usw.) eigene Rich-Client-Anwendungen zu erzeugen. So ist es nur bedingt nötig, zu wissen, welche Daten in welche Datei gehören, oder die erforderlichen XML-Dateien von Hand zu schreiben. Dennoch wird an einigen Stellen in dieser Arbeit (wie hier) ein kurzer Blick in diese Dateien geworfen, um Zusammenhänge zu verdeutlichen und so das Verständnis zu erleichtern. [MG03] Torsten Witte Teil 1 - Grundlagen 32 2.4.1 Aufbau von Plug-Ins Kai Meyer Der Ausspruch Everything in Eclipse is a plug-in. [ML06, S.13] ist zwar korrekt, kann allerdings auch irreführend sein. Ist nun alles in Eclipse ein einziges Plug-In oder sollte jede noch so kleine Funktion ein neues Plug-In bilden? Diese Frage ist nicht ganz einfach zu beantworten, da es in Eclipse durchaus die Möglichkeit gibt, dass ein Plug-In nur aus dem OSGi- und dem Plug-In-Manifest (siehe Abschnitt 2.4.2) besteht. Aber es ist ebenso vor- stellbar, dass die gesamte Anwendung in einem einzigen Plug-In steckt. Hier ist zu empfehlen, dass die Plug-Ins gemäÿ ihren fachlichen Aufgaben und in Übereinstimmung mit der Architektur erstellt werden. Ein Plug-In sollte eine bestimmte Funktion anbieten und dazu alle benötigten Komponenten (Hilfeseiten, Icons, Schematas, . . . ) beinhalten. Abgesehen von den Plug- Ins, die den Kern der Anwendung bilden, sollte das Fehlen eines bestimmten Plug-Ins lediglich dazu führen, dass in der laufenden Anwendung nur genau diese Funktionalität fehlt. Dies ermöglicht es zusätzlich, ein Plug-In gezielt ohne Seiteneekte durch ein anderes zu ersetzen, welches die gleiche Aufgabe erfüllt, aber von einem anderen Anbieter sein kann. Als Vorbild für die Strukturierung der Plug-Ins können die Schichten einer Schichtenarchitektur dienen. Zudem erweist sich eine Unterteilung in PlugIns für die Geschäftslogik und Plug-Ins für die Benutzungsoberäche oft als sinnvoll. Fragmente und Features, die der besseren Strukturierung von Plug-Ins dienen, werden in den Abschnitten 2.4.6 und 2.4.7 beschrieben. [Dau05a, S.439 ] 2.4.2 OSGi-Manifest, Plug-In-Manifest und BundleActivator Kai Meyer manifest.mf und die plugin.xml sind fester Bestandteil jedes Plug-Ins. Die Diese beiden Dateien steuern die Einbettung der Plug-Ins in die Workbench und beschreiben den Aufbau der Plug-Ins. Das OSGi-Manifest manifest.mf enthält seit Eclipse 3.1 eine Beschrei- bung des Plug-Ins und dessen Beziehung zum Rest der Welt innerhalb der OSGi-Umgebung. So sind hier u.a. folgende Daten zu einem Bundle festgehalten: • der Name des Bundles • ein symbolischer Name (als Id) OSGi-Manifest, Plug-In-Manifest und Bundle-Activator • die Versionsnummer • der Bundle-Activator • die benötigten Bundles • die durchgereichten Bundles • die veröentlichten Pakete dieses Bundles 33 In älteren Versionen von Eclipse standen sämtliche Informationen nur in der plugin.xml, die auch als Plug-In-Manifest bezeichnet wird. Das OSGi- Manifest wurde daraus bei jedem Start neu generiert. Doch seit Eclipse 3.1 enthält die in XML (eXtensible Markup Language) geschriebene Datei plugin.xml nur die neu denierten Erweiterungspunkte, einen Verweis auf deren Schemata sowie die von einem Plug-In angesprochenen Erweiterungspunkte. Zur Veranschaulichung, wie diese Dateien aussehen, folgen Auszüge aus der manifest.mf und der plugin.xml aus dem DienstplanRCP-Plug-In Dienstplaner-Projektes, welches in Kapitel 7 genauer erläutert wird. Quellcode 2.1: manifest.mf Manifest−Version: 1.0 Bundle−ManifestVersion: 2 Bundle−Name: DienstplanRCP Plug−in Bundle−SymbolicName: DienstplanRCP; singleton:=true Bundle−Version: 1.0.0 Bundle−Activator: dienstplanrcp.DienstplanerPlugin Bundle−Localization: plugin Require−Bundle: org.eclipse.ui; visibility: =reexport, org. eclipse .core.runtime; visibility: =reexport, org. eclipse .update.congurator, org. eclipse . ui .forms; visibility: =reexport, org. eclipse .update.core; visibility: =reexport, org. eclipse .update.ui, DP_Server_Jar;visibility:=reexport Eclipse −LazyStart: true Export−Package: dienstplanrcp, dienstplanrcp.actions , dienstplanrcp.comparator, dienstplanrcp.dnd, ... dienstplanrcp.widgets.tree des Teil 1 - Grundlagen 34 Quellcode 2.2: plugin.xml <?xml version="1.0" encoding="UTF−8"?> <?eclipse version="3.2"?> <plugin> <extension−point id="canShowDienstplan" name="Can Show Dienstplan" schema="schema/canShowDienstplan.exsd"/> ... <extension−point id="navigationPerspective" name="Navigations Perspective" schema="schema/navigationPerspective.exsd"/> <extension id="dienstplanerID" point="org.eclipse.core.runtime.applications"> <application> <run class ="dienstplanrcp.Dienstplaner"> </run> </application> </extension> Der Bundle-Activator bildet die Verbindung zwischen der OSGi-Plattform, den Bundles, der Workbench und den zu diesem Plug-In gehörenden Objek- org.eclipse.core.org.eclipse.ui.plugin.AbstractUIPlugin, ten. Der Activator ist entweder eine Unterklasse von runtime.Plugin oder von falls das Plug-In mit einer Benutzungsoberäche ausgestattet ist. nur einen Bundle-Activator pro Plug-In gibt, wird er auch oft als Klasse bezeichnet. Da es Plug-In- Zudem wird der Activator meist als Singleton (vgl. dazu [GHJV95, S.157]) implementiert. Zur Regulierung des Lebenszyklusses wer- start(BundleContext context), stop(BundleContext context) sowie getBundle() angeboten (siehe dazu auch Abschnitt 2.3.2). Des Weiteren den beinhaltet der Activator Methoden für die Ressourcen- und Benutzungso- getPluginPreferences(), getStateLocation(), getDialogsettings(), getWorkbench() und imageDescriptorFormPlugin(). berächenverwaltung. Dazu gehören [ML06, S.16 ], [Dau05a, S.363] 2.4.3 Anwendungsklassen Torsten Witte Jede RCP-Anwendung muss mindestens eine Anwendungsklasse am Erweiterungspunkt org.eclipse.core.runtime.applications deklarieren. Üb- licherweise wird dies in dem Anwendungs-Plug-In der RCP-Anwendung gemacht. Anwendungsklassen implementieren das IPlatformRunnable-Inter- OSGi-Manifest, Plug-In-Manifest und Bundle-Activator face und stellen eine run()-Methode bereit3 . 35 Das Interface dient dazu, seine Implementatoren gegenüber Eclipse als Eintrittspunkt der Anwendung zu identizieren. Die run()-Methode ist dabei vergleichbar mit der main()- Methode einer einfachen Java-Anwendung. Es ist durchaus möglich, mehrere Eintrittspunkte zu spezizieren. Welcher der Eintrittspunkte beim Start von Eclipse aktiv werden soll, lässt sich über eine kleine Kongurationsdatei auÿerhalb des Plug-Ins nachträglich steuern. Eine minimale Anwendungsklasse mit einer typischen Implementierung der run()-Methode sieht so aus: import org.eclipse.core.runtime.IPlatformRunnable; import org.eclipse.swt.widgets.Display; import org.eclipse.ui.PlatformUI; public class Application implements IPlatformRunnable { public Object run(Object args) throws Exception { } Display display = PlatformUI.createDisplay(); try { int returnCode = PlatformUI.createAndRunWorkbench(display, new ApplicationWorkbenchAdvisor()); if (returnCode == PlatformUI.RETURN_RESTART) { return IPlatformRunnable.EXIT_RESTART; } return IPlatformRunnable.EXIT_OK; } nally { display .dispose (); } } Zunächst wird über die Klasse PlatformUI zeugt, welches die Bildschirmanzeige repräsentiert. Advisor Display-Exemplar erDann wird der Workbench- ein neues generiert, der für die Konguration der Benutzungsoberäche zu- ständig ist. Anschlieÿend wird die Workbench über RunWorkbench() gestartet. PlatformUI.createAnd- Wenn die Workbench wieder beendet wird, wird deren Rückgabewert noch in das OSGi-konforme IPlatformRunnable-Proto- koll übersetzt. [Dau05b, S.59 ], [ML06, S.48f ] 3 In Eclipse 3.3 ist das Interface IPlatformRunnable als deprecated markiert. Stattdessen wird das Interface IApplication mit einer start()-Methode verwendet. Teil 1 - Grundlagen 36 2.4.4 Wichtige Erweiterungspunkte von Eclipse Kai Meyer Nun folgt ein Auszug aus der in [Dau05a, S.369 ] aufgeführten Liste der von Eclipse bereitgestellten Erweiterungspunkte. Die hier vorgestellte Auswahl ist grundlegend für die Gestaltung der Benutzungsoberäche einer RCPAnwendung. Zudem werden sie im weiteren Verlauf der Arbeit eingesetzt. Eine Beschreibung für das Anlegen von Extension-Points und deren Schematas bendet sich in [Dau05a] ab Seite 367. • -.ui.actionSets - Ein actionSet fasst Aktionen (Actions) zu einer Gruppe zusammen. Eine Aktion ist in Eclipse eine abstrakte Benutzeraktion, die verschiedene Erscheinungsformen annehmen kann, wie Menüs, Menüpunkte oder Werkzeuge auf der Werkzeugleiste. Ein angelegtes ActionSet kann über diesen Extension-Point mit all seinen Actions in ein von einem anderen Plug-In deniertes Menü eingefügt werden. • -.ui.activities - Über diesen Erweiterungspunkt kann die Benutzungsoberäche skaliert und somit in ihrer Komplexität reduziert werden. Capabilities erlauben es, verschiedene Menüeinträge, Views, Editoren, Perspektiven usw. logisch zu gruppieren und nur die Gruppen anzuzeigen, die vom Benutzer in seinem aktuellen Aufgabenkontext benötigt werden. Eine genauere Beschreibung ist in Abschnitt 6.3 zu nden. • -.ui.perspectives / -.ui.perspectiveExtension - Mit dem Erweiterungspunkt perspectives können neue Perspektiven in die Workbench eingebracht werden. Eine Perspektive gibt die Anordnung von Editoren, Views und Menüs in der Workbench vor. Die in dem ExtensionPoint angegebene Klasse erzeugt das anfängliche Layout der Perspektive, wobei der Benutzer in der Lage ist die Anordnung der Views und Editoren innerhalb der Perspektive nach seinen Vorlieben individuell zu gestalten und neue Views hinzugefügen bzw. nen kann. Mit perspectiveExtension vorhandene entfer- lassen sich bereits vorhandene Perspektiven um weiteren Komponenten anreichern. • -.ui.views / -.ui.viewActions - Mit die Workbench eingeführt werden. views können neue Views in Views gewähren in Eclipse eine bestimmte Sicht auf die Arbeitsmaterialien. So können verschiedene Views auf dem gleichen Material arbeiten, dabei aber verschiedenen Aspekte in den Vordergrund stellen. Mit viewActions Aktionen (Menüpunkte und Werkzeuge [...]) können neue in bereits bestehende Views eingeführt werden. • -.ui.editors / -.ui.editorActions - Die Extension-Points editors Eine Beispiel-Erweiterung und 37 editorActions verhalten sich analog zu views und viewActions, nur werden hier Editoren der Workbench hinzugefügt. 2.4.5 Eine Beispiel-Erweiterung Zur Erklärung, wie Extension-Points und Extensions im Code aufgebaut werden und das Zusammenspiel mit der Extension-Registry auf programmiertechnischer Ebene funktioniert, folgt ein einfaches Beispiel, das häug in der Literatur auftaucht. Das Beispiel zeigt, wie ein Plug-In eine Aktion hinter einem Menüpunkt innerhalb des Anwendungsmenüs unterbringen kann. org.eclipse.ui bietet den Erweiteorg.eclipse.ui.actionSets an, um eine Menge von Menü- Das Eclipse-User-Interface-Plug-In rungspunkt und Werkzeugleisteneinträgen zu der Benutzungsoberäche der Anwendung hinzuzufügen. Damit verpichtet sich das UI-Plug-In, Beiträge von Plug-Ins zu dem ActionSet-Erweiterungspunkt zu verwalten und zu bearbeiten. Die plugin.xml des org.eclipse.ui-Plug-Ins enthält also folgenden Eintrag: <?xml version="1.0" encoding="UTF−8"?> <plugin> ... <extension−point id="actionSets" name="Action Sets" schema="schema/actionSets.exsd"/> ... </plugin> An dieser Stelle ist eine Extension-Point Schema Denition (.exsd-Datei) angegeben. Diese Datei enthält wiederum die eigentliche Denition des Erweiterungspunktes in Form eines XML-Schemas. U.a. wird speziziert, welche Attribute angegeben werden müssen und welche optional sind. Dazu gehören Pfad-Angaben zu Java-Klassen oder anderen Ressourcen (z.B. Bilder) und Zeichenketten. Diese Zeichenketten können Repräsentationen für boolesche Ausdrücke, Zahlen oder Texte sein. Wie die actionSets.exsd genau aussieht, lässt sich in [Bol03, Abschnitt 2.3.3] nachlesen. Die manifest.mf eines erweiternden Plug-Ins (hier MyPlugin) muss den folgenden Eintrag enthalten, da sonst der benötigte Erweiterungspunkt und das IActionDelegate-Interface nicht verfügbar sind. Require−Bundle: org.eclipse.ui; Hier wird auch die Abhängigkeit von (vgl. Abschnitt 2.3.4). MyPlugin zu dem UI-Plug-In deutlich Torsten Witte Teil 1 - Grundlagen 38 Die plugin.xml von MyPlugin sieht entsprechend der o.g. Schema De- nition so aus: <?xml version="1.0" encoding="UTF−8"?> <plugin> ... <extension point="org.eclipse. ui .actionSets"> <actionSet id="org.myApplication.myPlugin.myActionSetId" label="My ActionSet"> <action id="org.myApplication.myPlugin.myActionId" class ="org.myApplication.myPlugin.MyAction" icon="icons/myAction.gif" label="My Action" menubarPath="myMenu"/> <action id="..." class ="..." label="..."/> </actionSet> </extension> ... </plugin> In diesem Fall wird für jede Aktionsmenge (actionSet) mindestens ein ein- deutiger Bezeichner (id) und ein Name (label) benötigt. Für die einzelnen Aktionen (action) wird jeweils eine Id (id), ein Menütext (label), ein grasches Symbol (icon) und eine Klasse des Typs IActionDelegate (class) angegeben. Diese Klasse implementiert die durchzuführende Aktion. Zusätzlich können noch weitere Attribute angegeben werden, z.B. an welcher Stelle der Menüeintrag im Menü auftauchen soll (menubarPath). Das UI-Plug-In durchsucht das Erweiterungsregister der Eclipse RCPAnwendung nach Beiträgen zu seinem Erweiterungspunkt. Dazu muss es im Quellcode auf das Erweiterungsregister der Plattform zugreifen, welches über folgenden Aufruf zu erhalten ist: IExtensionRegistry registry = Platform.getExtensionRegistry(); IExtensionRegistry-Exemplar kann mit einer der getConfigurationElementsFor()-Methoden das Register nach Erweiterungen für einAn diesem zelne Erweiterungspunkte durchsucht werden. UI-Plug-In mit seinem Erweiterungspunkt. Objekte des Typs Genau das macht auch das Die Suchergebnisse werden als IConfigurationElement zurückgeliefert. Von diesen ObgetAttribute(String attrName)- jekten sind die Attributwerte durch die Fragmente 39 Methode in Form von String-Objekten erhältlich. Soll ein Exemplar ei- ner in der Erweiterung angegebenen Klasse erzeugt werden, kann dies mit dem Aufruf von createExecutableExtension(String propertyName) ge- schehen, wobei lediglich der Name des Attributes angegeben werden muss. getExtension() oder getExtensionPoint() IExtensionRegistry-Exemplar sind auch Objektrepräsentationen Über die Methoden an dem der Er- weiterungen und Erweiterungspunkte selbst zu beziehen. Sind alle Erweiterungen zu einem Extension-Point gefunden und ausgewertet, können sie entsprechend behandelt werden. Das UI-Plug-In wird den Menütext und das Symbol jeder Aktion in der Benutzungsoberäche darstellen. Sobald der Benutzer mit der Maus auf so einen Menüeintrag klickt, wird ein Exemplar der zugehörigen Klasse erzeugt, auf ein IActionDelegate run()-Methode aufgerufen. der konkreten IActionDelegate-Klasse gecastet und dessen So ein Exemplar (hier MyAction) wird auch als Callback-Objekt bezeichnet, da es von dem erweiterbaren Plug-In erzeugt und dann zurückgerufen wird (vgl. Don't call us, we call you.). Hollywood-Prinzip: Das Beispiel veranschaulicht auch den Lazy- Mechanismus von Eclipse. Das konkrete Objekt wird erst erzeugt, wenn es wirklich benötigt wird. In diesem Fall, wenn ein Benutzer auf den Menüeintrag klickt und die run()-Methode ausgeführt werden soll. Abbildung 2.5 veranschaulicht den Aufbau und Ablauf von Erweiterungen nochmals grasch. Abbildung 2.5: Erweiterungen [ML06, S.21] [ML06, S.21f, S.392 ] 2.4.6 Fragmente Fester Bestandteil jedes Fragmentes Datei ist vom Aufbau her der ist die plugin.xml fragment.xml. sehr ähnlich. Diese XML- Die wichtigsten Kai Meyer Teil 1 - Grundlagen 40 Angaben in der fragment.xml sind die Identikation und die Version des Plug-Ins, auf das sich dieses Fragment bezieht. Eine eigene Plug-In-Klasse darf ein Fragment in keinem Fall besitzen, da ein Fragment auf der OSGiPlattform keinen eigenen Namensraum bekommt, sondern vollständig mit dem zugehörigen Plug-In verschmilzt. Eine Beschreibung, wie ein Fragment angelegt wird, ist in [Dau05a, S.439] zu nden. [Dau05a, S.439] 2.4.7 Features Kai Meyer In Eclipse besteht ein Feature aus dem Namen des Features, einer mög- lichst eindeutigen Id, einer Angabe der Version, sowie dem Anbieter des Features (Feature Provider ) und einer Liste der beinhalteten Plug-Ins. Ferner kann auch ein Branding-Plug-In und eine URL zur Update-Site (siehe Abschnitt 2.5) speziziert werden. Das Branding-Plug-In enthält Daten für die Produktanpassung. Dazu gehören unter anderem Grsken und weitergehende Beschreibungen für das Feature. Für das Feature kann ebenso festgelegt werden, für welchen Betriebs- und Windowing-Systeme oder für welche Sprachen die enthaltenen Plug-Ins ausgelegt sind. Zusätzlich können eine genaue Beschreibung des Features sowie Urheberrechtsinformationen und Lizenzbedingungen hinterlegt werden. Eine aus dem Dienstplaner-Projekt (siehe Kapitel 7) entliehene sieht so aus: <?xml version="1.0" encoding="UTF−8"?> <feature id="Feature_Admin" label="Admin Feature" version="1.0.0"> <description> [Enter Feature Description here .] </description> <copyright> [Enter Copyright Description here.] </copyright> <license> [Enter License Description here .] </license> <url> <update label="Dienstplaner Products" url=" le: /localhost/UpdateSite"/> </url> <requires> <import plugin="org.eclipse.ui"/> feature.xml Update-Sites und Updates 41 <import plugin="org.eclipse.core.runtime"/> <import plugin="DienstplanRCP"/> </requires> <plugin id="DP_BenutzerAuister" download−size="0" install −size="0" version="1.0.0" unpack="false"/> <plugin id="DP_EinstellungenEditor" download−size="0" install −size="0" version="1.0.0" unpack="false"/> ... </feature> [Dau05a, S.440 ] 2.5 Update-Sites und Updates Eine Update-Site ist eine Quelle im Inter- oder Intranet, die Features und deren Plug-Ins in verschiedenen Versionen zum Download und zur Installation anbietet. Zu Testzwecken kann eine Update-Site auch auf der lokalen Festplatte eingerichtet werden. Im wesentlichen besteht eine Update-Site aus einem Verzeichnis für die beinhalteten Features, einem für deren Plug-Ins, sowie eine site.xml site.xml. können unter anderem: • Gruppen zur besseren Strukturierung für Features angelegt • Features diesen Gruppen zugeordnet • die Versionsnummern der Features übernommen • die URL für diese Update-Site angegeben • und eine Beschreibung dieser Site hinterlegt werden. In der Bevor eine Update-Site betriebsbereit ist, muss für die einzelnen Features erst der Build-Prozess angestoÿen werden. Die site.xml für die Update-Site, die im Dienstplaner (siehe Kapitel 7) Verwendung ndet, sieht wie folgt aus: Kai Meyer Teil 1 - Grundlagen 42 <?xml version="1.0" encoding="UTF−8"?> <site> <description url=" le: /localhost/UpdateSite"> Dienstplaner UpdateSite </description> <feature url="features/Feature_Admin_1.0.0.jar" id="Feature_Admin" version="1.0.0"> <category name="Dienstplaner"/> </feature> <feature url="features/Feature_Core_1.0.0.jar" id="Feature_Core" version="1.0.0"> <category name="Dienstplaner"/> </feature> <feature url="features/Feature_Dienstplan_1.0.0.jar" id="Feature_Dienstplan" version="1.0.0"> <category name="Dienstplaner"/> </feature> ... <category−def name="Dienstplaner" label="Dienstplaner Category"/> </site> Update-Sites können mit Hilfe der Eclipse-PDE recht einfach erstellt werden. Eine genauere Beschreibung dieses Vorgangs ist in [Dau05a, S.448 ] aufgeführt. Eclipse bietet bereits die Möglichkeit vorhandene Features zu aktualisieren oder neue Features zu installieren. Zwar lassen sich die zu den Features gehörenden Plug-Ins auch einfach in Eclipse hinein kopieren, aber wird der in Eclipse enthaltene Update-Manager verwendet, so ergeben sich einige Vorteile. Zum einen zeigt der Manager alle Features und deren Plug-Ins an, die auf den angegebenen Update-Sites vorhanden sind, wodurch die Auswahl des richtigen Plug-Ins erleichtert wird. Zum anderen kann der Update-Manager vor der Installation überprüfen, ob benötigte Plug-Ins vorhanden sind oder ob Versionskonikte auftreten. Darüber hinaus ist es möglich, benötigte aber noch nicht auf der lokalen Festplatte vorhandene Plug-Ins mit einem Druck auf Add required Plugins zusammen mit dem gewünschten Plug-In herunterzuladen. Selbstverständlich muss dafür die Update-Site diese Plug-Ins anbietet. Der Update-Manager ist zudem in der Lage, die auf der UpdateSite hinterlegte Lizenzbedingung dem Benutzer vorzulegen und zur Annahme aufzufordern. In Eclipse ist der Update-Manager über Updates → Find and Install... Help → Software zu erreichen. Die Suche nach Updates kann manuell von dem Benutzer oder von der Anwendung automatisiert ausgelöst werden. Diese automatischen Updates Abschlieÿende Bemerkungen 43 können beim Starten der Anwendung, beim Beenden oder zu bestimmten Zeitpunkten erfolgen. Es ist sogar denkbar, dass eine Administration über das Netzwerk diesen Vorgang startet. Jede Variante birgt ihre eigenen Vorund Nachteile. Wird beim Start nach Updates gesucht, so sind immer die aktuellsten Versionen in Benutzung. die benötigte Zeit für das Starten. Allerdings verlängert dieser Vorgang Auÿerdem kann es passieren, dass ein Neustart der Anwendung erforderlich ist, sofern neue Versionen gefunden wurden. Wird erst beim Schlieÿen der Anwendung nach Updates gesucht, ist kein Neustart erforderlich. Jedoch wurde in diesem Fall die ganze Zeit mit einer alten vielleicht fehlerhaften Version gearbeitet. Des Weiteren wird in dieser Variante mehr Zeit für das Beenden des Programms benötigt. Trit der Benutzer die Entscheidung, wann nach Updates gesucht wird, so ist dies oft ezienter. Doch kann er bei Verwendung des Standard-UpdateManagers auch auf Update-Sites zugreifen, die nicht gewünschte Inhalte anbieten. Ebenso kann es vorkommen, dass der Benutzer nie oder nur sehr spärlich die Programmkomponenten aktualisiert. Die Initialisierung des Update-Vorgangs über das Netzwerk ist die programmtechnisch anspruchsvollste. Denn es muss ein Weg gefunden werden, der erlaubt, Updates durchzuführen, ohne den angemeldeten Benutzer zu stören oder seine bereits gemachte, aber noch nicht gesicherte Arbeit zu verwerfen. Zusätzlich muss die Anwendung aktiv sein, wenn die Auorderung zum Update kommt. Ebenso muss für den Initiator des Vorganges erkennbar sein, auf welchen Rechnern noch keine neuen Versionen installiert wurden. [Dau05a, S.440 ] 2.6 Abschlieÿende Bemerkungen Die Eclipse Rich-Client-Platform ist ein sehr groÿes Themengebiet, das hier Kai Meyer und nur in Auszügen behandelt werden kann. Weitere interessante Gebiete wären: Torsten Witte Perspektiven, Views, Editoren, Wizards, Verwendung von SWT, JFace und Forms, Denition eigener Produkte, Internationalisierung, Verwaltung von Benutzerpräferenzen usw. Als weiterführende Literatur ist hierfür [Dau05a; Dau05b; Dau06; ML06] zu empfehlen. Ebenso ist eine Trennung der Entwicklungs- und der Zielplattform ratsam, um während der Entwicklung von Anwendungen auf Basis der Eclipse RCP beide Plattformen unabhängig voneinander kongurieren oder sogar austauschen zu können (siehe [ML06, S.30 ]). Die in diesem Kapitel vorgestellten Begrie und Konzepte sind notwendig, um die im theoretischen und praktischen Teil beschriebenen Konzepte und Realisierung von und für die Eclipse RCP nachvollziehen zu können. 44 Teil II Theoretischer Teil 45 Teil 2 - Theorie 46 Kai Meyer In diesem Teil soll geklärt werden, wie die Benutzer eines Softwaresystems autorisiert und die Auswirkungen der Autorisierung dem Benutzer kenntlich gemacht werden können. Dazu werden zunächst die grundsätzlichen Varianten für die grasche Repräsentation von Interaktionsobjekten im Rahmen der Benutzerautorisierung beschrieben. Es werden ihre Vor- und Nachteile geschildert und wie sich die jeweilige Variante auf das Verhalten eines Benutzers auswirken könnte. Anschlieÿend werden aktuelle Diskussionen zu diesem Thema zusammengefasst und ihre Ergebnisse dargelegt. In Kapitel 4 erfolgt eine Beschreibung bereits existierender Autorisierungsmechanismen. Innerhalb der Beschreibung wird ebenfalls untersucht in wie weit sie Bezug auf die Benutzungsoberäche nehmen und ob sie sich für den Einsatz in einem Rich-Client eignen. Danach werden zwei grundlegende Konzepte vorgestellt, die die Anbindung der graschen Benutzungsoberäche bereits beinhalten, und unter welchen Umständen sie eingesetzt werden können. Als Abschluss dieses Teils werden Lösungen innerhalb der Eclipse RCP vorgestellt. Kapitel 3 Diskussionen Dieses Kapitel greift unterschiedliche Diskussionen auf, deren Ergebnisse den Torsten Witte weiteren Verlauf dieser Arbeit beeinussen. Zunächst wird der richtige Einsatz von Interaktionsobjekten bei Benutzerautorisierung unter Aspekten der benutzergerechten Softwaregestaltung diskutiert. Daraufhin wird nochmals auf die Wichtigkeit von Gebrauchstauglichkeit gerade im Zusammenhang mit Autorisierung eingegangen. Im Anschluss wird der aktuelle Diskussionsstand über Benutzerautorisierung innerhalb der Eclipse RCP ermittelt. Die dort vorgestellten Methoden und Lösungen werden später in Kapitel 6 näher betrachtet. 3.1 Interaktionsobjekte bei der Benutzerautorisierung Im Zusammenhang mit Benutzerautorisierung ist es für die Gebrauchstaug- Kai Meyer und lichkeit besonders wichtig, die Benutzungsoberäche an die Berechtigungen Torsten Witte des aktuellen Benutzers anzupassen. In diesem Abschnitt werden die dafür möglichen Darstellungsformen von Interaktionsobjekten und deren Verhalten innerhalb der Oberäche diskutiert. Dies geschieht ohne Berücksichtigung von vorhandenen technischen Realisierungen und der Machbarkeit. Die in Abschnitt 1.2 geforderten Kriterien für benutzergerechte Softwaregestaltung werden mit in die Diskussion einbezogen, um diese soweit wie möglich zu erfüllen. Das folgende einleitende Beispiel hat noch keinen Bezug zu Benutzerautorisierung, illustriert aber schon die Wege und Schwierigkeiten der Oberächengestaltung: In MS-Word 2003 ist die Speichern-Schaltäche beispielsweise immer aktiv, selbst wenn das geönete Dokument gerade gespeichert wurde. Somit erhält 47 Teil 2 - Theorie 48 der Benutzer kein Feedback über den aktuellen Bearbeitungszustand eines Dokumentes. Andererseits werden selten verwendete Menüpunkte aus Menüs weg geblendet und tauchen erst nach längerem Aufenthalt innerhalb des Menüs wieder auf. Das vereinfacht die Benutzungsschnittstelle, da sie sich an die Gewohnheiten des Benutzers anpasst, und reduziert die Fehlerhäugkeit. Die Ausblendung einiger Menüpunkte kann aber auch zu verzweifelten Suchaktionen führen. Im Folgenden werden kleine Szenarios gebildet, die verschiedene Varianten der Darstellung und des Verhaltens von Interaktionsobjekten bei nicht gewährtem Zugri aufzeigen. Anhand dieser Szenarien werden die Konse- quenzen für den Benutzer und die Gebrauchstauglichkeit der Software diskutiert. 3.1.1 Meldungsfenster Szenario 1. Ein Benutzer klickt mit der Maus auf eine Schaltäche in der Benutzungsoberäche. Daraufhin erscheint ein Meldungsfenster mit dem Hinweis, dass der Benutzer für diese Aktion nicht berechtigt ist. Das Anzeigen eines Meldungsfensters aufgrund nicht-autorisierten Zugris ist die einfachste und wohl am meisten verwendete Variante der Rückmeldung an den Benutzer. Für die Realisierung dieses Verhaltens wird lediglich ein Mechanismus benötigt, der die auftretenden Zugrisverweigerungen an der Oberäche darstellt. Alle Interaktionsobjekte der Anwendung bleiben von den Benutzerberechtigungen unberührt. Wie in dem Beispiel zu erkennen ist, erfährt der Benutzer erst nachdem er die Aktion ausgelöst hat, dass er keine Berechtigung dafür besitzt. Dies ist inezient und behindert ihn in seinem Arbeitsuss, weil er nicht nur die Zeit vergeudet hat, auf die Schaltäche zu klicken, sondern zusätzlich das Meldungsfenster schlieÿen muss. Auÿerdem widerspricht dieses Systemverhalten seinen vorhandenen Erfahrungen aus anderen Anwendungen, in denen er jede hinter einem anwählbaren Interaktionsobjekt liegende Aktion ausführen kann. Der Benutzer muss demzufolge mühsam durch Versuch und Irrtum erlernen, welche Aktionen er in welcher Rolle ausführen darf. Zur Verbesserung ist statt einem einfachen Meldungsfenster ein Log-in-Dialog denkbar. Mit diesem kann sich der Benutzer unter einer anderen Rolle anmelden, die für die jeweilige Aktion berechtigt ist. Des Weiteren ist eine Kombination mit optischen Kennzeichnungen vorteilhaft. Interaktionsobjekte bei der Benutzerautorisierung 49 3.1.2 Log-in-Dialog Szenario 2. Ein Benutzer klickt mit der Maus auf eine Schaltäche in der Benutzungsoberäche. Daraufhin erscheint ein Log-in-Dialog, der darauf hinweist, dass diese Aktion mit der aktuellen Benutzerkennung nicht durchgeführt werden darf. Über den Dialog ist der Benutzer in der Lage, sich (kurzfristig) mit einer anderen Nutzerkennung anzumelden. Nach erfolgreichem Log-in wird die Aktion sofort ausgeführt. Das hier vorgestellte Prinzip ist dem Meldungsfenster sehr ähnlich. Allerdings erlaubt es dem Benutzer seine Arbeit fortzusetzen, sofern er über eine weitere Nutzerkennung mit entsprechenden Berechtigungen verfügt. Als Konsequenz muss der Nutzer wissen, mit welchem Benutzernamen und Passwort er das benötigte Recht bekommt. Je mehr Kennungen ein Benutzer besitzt, desto schwieriger wird für ihn die richtige Auswahl. Zur Unterstützung kann der Log-in-Dialog weitere Informationen zu den benötigten Rechten bzw. Rollen bereitstellen. Sollte der Benutzer nicht in der Lage sein, sich unter einer geeigneten Nutzerkennung anzumelden, ergibt sich dasselbe Verhalten wie bei einem einfachen Meldungsfenster. Insbesondere ist das der Fall, wenn der Benutzer nur über eine Kennung verfügt. Zur Entlastung des Benutzers kann der Dialog nach einmaliger Eingabe von Benutzername und Passwort die passenden Log-in-Informationen beim erneuten Anstoÿ der selben Aktion vorgeben. Auf diese Weise muss der Benutzer sich nicht mehr alle Zugangsdaten merken und braucht nur noch zu bestätigen. Um auch noch diese Zeit zu sparen und den Benutzer in seiner Arbeit nicht zu unterbrechen, kann der Rollenwechsel im Hintergrund geschehen. Dadurch ist dem Benutzer allerdings nicht mehr bewusst, dass ein Wechsel stattndet und in welcher Rolle er gerade agiert. 3.1.3 Optische Kennzeichnung Szenario 3. Ein Benutzer möchte eine Aktion auslösen. Schaltäche ist jedoch rot gekennzeichnet. Die betreende Der Benutzer erkennt, dass er nicht berechtigt ist, diese Aktion durchzuführen. Daraufhin lässt er von seinem Vorhaben ab. In den vorherigen Szenarien erfuhr der Benutzer erst nachdem er eine Aktion angestoÿen hat, dass er keine Berechtigung dafür besitzt. Dem kann durch eine optische Hervorhebung der betreenden Interaktionsobjekte vorgebeugt werden. Auf diese Weise wird der Benutzer nicht in seinem Arbeitsuss unterbrochen und muss keine unnötigen Dialogfenster schlieÿen. Op- tische Hervorhebung können andere Text- oder Hintergrundfarben, Schriftarten und -stile, unter- oder durchgestrichene Texte, andere Symbole, usw. Teil 2 - Theorie 50 sein. Allerdings muss die Hervorhebung innerhalb der gesamten Anwendung konsistent gehalten werden. Dadurch fällt es dem Benutzer leichter, die Bedeutung der Kennzeichnung zu erlernen. Sofern Standards vorhanden sind, ist deren Verwendung ebenfalls sinnvoll. Damit wird die Oberäche für den Benutzer erwartungskonform. Auf der anderen Seite kann so eine Hervorhebung vieler Interaktionsobjekte zu einer überladenen Benutzungsoberäche führen. Dies ist z.B. der Fall, wenn innerhalb eines Menüs fast alle Menüpunkte nicht gewährt und somit deutlich rot gekennzeichnet sind. Bei dieser Vorgehensweise sind die Interaktionsobjekte lediglich gekennzeichnet, bleiben aber aktivierbar. Somit stellt sich die Frage: Was passiert, wenn der Benutzer nicht wie in dem Szenario beschrieben, von seinem Vorhaben ablässt und die Aktion dennoch anstöÿt? Hierbei kommen die bereits in 3.1.1 und 3.1.2 genannten Verhaltensweisen mit ihren Konsequenzen in Frage. Zusätzlich gibt es die Möglichkeit, dass gar nichts passiert. Schlieÿlich sieht der Benutzer ja anhand der Kennzeichnung, dass er diese Aktion nicht durchführen darf. Allerdings erwartet der Benutzer, dass etwas passiert. Folgerichtig sollte das Interaktionsobjekt gesperrt werden. Diese Variante wird im nächsten Abschnitt diskutiert. 3.1.4 Sperren von Interaktionsobjekten Szenario 4. Ein Benutzer möchte eine Aktion auslösen. Die betreende Schaltäche ist jedoch gesperrt. Der Benutzer erkennt, dass er diese Aktion nicht ausführen kann. Daraufhin lässt er von seinem Vorhaben ab. Gesperrte Interaktionsobjekte werden zwar in der Benutzungsoberäche dargestellt, können aber nicht ausgelöst werden. Die Sperrung von Interaktionsobjekten geht meist einher mit einer optischen Kennzeichnung und einem anderen Verhalten als freigegebene Interaktionsobjekte: • andere optische Darstellung (blasser Text, graues Symbol, . . . ) • keine Hervorhebung des Objektes, wenn sich der Mauszeiger darüber bendet • keine optische Rückmeldung beim Klicken mit der Maus auf das Objekt (Button wird nicht eingedrückt, kein Cursor im Textfeld, . . . ) Standardmäÿig wird von gesperrten Interaktionsobjekten Gebrauch gemacht, wenn Aktionen im momentanen Systemzustand keinen Sinn machen. Z.B. das Sortieren einer Liste mit nur einem Eintrag oder das Speichern eines unveränderten Dokumentes. Durch einfache Aktionen, wie das Bearbeiten Interaktionsobjekte bei der Benutzerautorisierung (a) freigegeben 51 (b) gesperrt Abbildung 3.1: Interaktionsobjekte (Windows XP) (a) freigegeben (b) gesperrt Abbildung 3.2: Interaktionsobjekte (Mac OSX) eines Dokumentes, lassen sich vorher gesperrte Interaktionsobjekte wieder frei schalten. Werden nun gesperrte Interaktionsobjekte ebenfalls für Benutzerautorisierung verwendet, kann der Benutzer nicht mehr unterscheiden, weshalb er die Aktion gerade nicht ausführen kann. As you implement a role-based lter, be careful not to disable (gray out) user-inappropriate tasks if they are never possible, because this would only clutter the UI and also be misleading, as it might prompt users to think they could tweak some settings to enable the never-needed functions. [Mol01, Part 2] Um die Konsistenz der Benutzungsoberäche zu erhöhen und dem eben geschilderten Eekt entgegen zu wirken, können Interaktionsobjekte, die zur Eingabe, Veränderung und Auswahl von Daten dienen (z.B. Text- und Auswahlfelder), durch rein anzeigende Objekte (z.B. Labels) ausgetauscht werden. 3.1.5 Verstecken von Interaktionsobjekten Interaktionsobjekte, für deren Verwendung ein Benutzer nicht autorisiert ist, können versteckt werden und sind somit auf der Benutzungsoberäche nicht sichtbar. Dies hat den Vorteil, dass der Benutzer nur die Interaktionsobjekte Teil 2 - Theorie 52 vorndet, die er Verwenden darf und (im Idealfall) zur Erledigung seiner Aufgaben benötigt. Dadurch ist die GUI auf die nötigen Funktionen reduziert und übersichtlicher. Die Ezienz der Handhabung der Anwendung wird erhöht. Die Anwendung ist zudem aufgabenangemessen und erwartungskonform in Bezug auf gesperrte Interaktionsobjekte (siehe Abschnitt 3.1.4). And if a user never needs to do something, his or her UI will be simplied if it's never shown. Chances for errors are also reduced. [Mol01, Part 2] Da nur für gewährte Aktionen Interaktionsobjekte vorhanden sind, weiÿ der Benutzer bei fehlenden Interaktionsobjekten nicht, ob er diese Aktionen nicht durchführen darf, ob es sie überhaupt gibt oder ob er sie nur nicht ndet. Aber bei vernünftiger Zuordnung von Rollen zu Aufgaben und Rechten sollte der Benutzer kein Bedürfnis nach weiteren Funktionen haben. Zumindest wenn die Anwendung über alle Funktionen verfügt, die zur Erledigung der Aufgabe nötig sind. Das Verstecken von Interaktionsobjekten führt natürlich zu einem unterschiedlichen Aussehen der Benutzungsoberäche, abhängig von der aktuellen Rolle. Wenn der Benutzer Kenntnis über das Aussehen der Oberäche unter einer anderen Rolle besitzt, vermisst der Benutzer unter Umständen Interaktionsobjekte, die nur in jener Rolle verfügbar sind. Auf der anderen Seite verdeutlicht dies dem Benutzer, in welcher Rolle er gerade agiert. 3.1.6 Fazit Welche Variante Verwendung ndet, hängt sicherlich von den Anforderungen an das System, den Gewohnheiten der Benutzer und letztendlich den technischen Gegebenheiten ab. Kombinationen sind ebenfalls denkbar, um die Nachteile der einzelnen Ansätze zu reduzieren. Allerdings schlieÿen sich Meldungsfenster und Login-Dialog mit Sperren und Verstecken aus. Die Entscheidung der gewählten Variante hängt ebenfalls davon ab, wie häug die aktive Rolle im laufenden Betrieb gewechselt werden muss. Bei zu häugen Unterbrechungen, um die Rolle zu wechseln, sollte das Rechte-Konzept überprüft werden. Ein Meldungsfenster sollte stets integriert sein, aber nur dann Anwendung nden, wenn andere Mechanismen nicht korrekt arbeiten. Das Sperren von Interaktionsobjekten ist ein gängiges Vorgehen und in den meisten Fällen dem puren Kennzeichnen vorzuziehen. Für eine hohe Gebrauchstauglichkeit der Software ist das Verstecken von Interaktionsobjekten zu empfehlen. Mitunter macht es trotzdem Sinn, Interaktionsobjekte, auf die der Benutzer Interaktionsobjekte bei der Benutzerautorisierung 53 nicht zugreifen darf, anzuzeigen und zu sperren oder mit einem Dialogfenster darauf hinzuweisen. Zum Beispiel in funktionell eingeschränkten Testversionen von Software, die für Vermarktungszwecke eingesetzt werden. Der potentielle Kunde soll selbst den Funktionsumfang und den Umgang mit der Software (in der Vollversion) ermitteln können. Wichtig ist in jedem Fall eine konsistente Oberäche, bzw. eine einheitliche Darstellungsform der Interaktionsobjekte. 3.2 Allgemeine Diskussion Sämtliche Bereiche der Sicherheit, ob Verschlüsselung, Virenschutz oder Benutzerautorisierung, werden rege auf verschiedenen Sicherheitskonferenzen diskutiert. Auch zur Gestaltung der Benutzungsoberäche und dem groÿen Begri Usability gibt es viele Bücher, Artikel und Berichte. Doch gibt es kaum Literatur, die sich mit den Auswirkungen der Benutzerautorisierung auf die Benutzungsoberäche beschäftigt. Eine Ausnahme bildet der Artikel Why Johnny Can't Encrypt [WT99]. Diese Arbeit bezieht sich auf die Benutzbarkeit von Verschlüsselungsprogrammen, aber die allgemeinen Aussagen über die Benutzungsoberäche lassen sich auch auf Benutzerautorisierung anwenden. So wird in dem Text unter anderem folgendes erörtert: User errors cause or contribute to most computer security failures, yet user interfaces for security still tend to be clumsy, confusing, or near-nonexistent. [WT99, S.1] Dazu stellen die Autoren des Artikels die Hypothese auf, dass für wirksame und benutzbare Sicherheit die bisherigen Vorgehensweisen für die Gestaltung der Benutzungsoberäche nicht ausreichen und fordern daher weitergehende Usability-Standards. Um die Einhaltung der neuen Design-Regeln für die Benutzungsoberäche festzustellen, werden ebenfalls neue, noch zu erstellende Evaluierungsmethoden benötigt. Laut den Untersuchungen, die für Why Johnny Can't Encrypt durchgeführt wurden, spielt für die Benutzer die Gebrauchstauglichkeit eine deutlich stärkere Rolle als das Verlangen nach Sicherheit. Ist das verwendete Programm sehr sicher, aber unzureichend in der Handhabung, ndet es bei den Benutzer wenig Akzeptanz oder es wird nach Wegen gesucht, die Sicherheitsmechanismen zu umgehen. In Bezug auf die Benutzerautorisierung bedeutet dies, dass Benutzer, die Kai Meyer Teil 2 - Theorie 54 aufgrund von unzureichender Darstellung ihrer Berechtigungen von dem Programm frustriert sind, es entweder nicht benutzen oder einen Account verwenden, der möglichst viele Rechte beinhaltet. Dies kann im schlimmsten Fall dazu führen, dass ein Account mit allen Rechten erstellt und dieser von jedem Benutzer verwendet wird. Das macht die gesamte Benutzerautorisierung überüssig. Bei der Administration der Rechte ist es ähnlich. Ist die Editierung der Rechte zu kompliziert oder nur mit viel Aufwand durchzuführen, werden die Administratoren die Rechte nur sehr selten anpassen und daher u.U. den Benutzern auch nicht benötigte Rechte geben. Somit würden sie gegen das Need-to-know-Prinzip (siehe Abschnitt 1.7) verstoÿen. Entsprechendes gilt auch für Entwickler, die ein Framework für die Benutzerautorisierung verwenden. Ist das Schützen einer Komponente und die Anbindung an die Benutzungsoberäche mit hohem Aufwand verbunden, so werden die Programmierer das Framework nicht verwenden oder versuchen den Mechanismus zu umgehen. Dass die Auswirkungen der Autorisierung auf die Benutzungsoberäche mit verschiedenen Mitteln umgesetzt werden können und dass dabei noch oene Fragen existieren, wurde bereits im vorherigen Abschnitt (3.1) erörtert. Welche Bemühungen, die Autorisierung mit der Benutzungsoberäche zu verweben, speziell im Eclipse-Umfeld existieren, ist Gegenstand des nächsten Abschnittes. [WT99] 3.3 Aktueller Diskussionsstand über Autorisierung in der Eclipse RCP Torsten Witte Das Verlangen nach rollenbasierter Autorisierung in Eclipse mit entsprechend adaptiver GUI ist groÿ. Wer die Eclipse-Newsgroups in den letzten Jahren verfolgt hat, ndet viele Einträge zu diesem Thema. In Anhang A.1 sind einige Einstiegspunkte in die Diskussionen aufgelistet. Aufgrund des wachsenden Interesses wurden auch auf der EclipseCon [Ecld] immer wieder Vorträge über Authentizierung und Autorisierung gehalten. Die Eclipse- Con ist die gröÿte Konferenz zu Eclipse und ndet seit 2004 jedes Jahr im März statt. Auf der mehrere Tage andauernden Veranstaltung werden die neuesten Techniken und Ideen in Seminaren und Übungen vorgestellt. Aktueller Diskussionsstand über Autorisierung in der Eclipse RCP 55 Auf der EclipseCon 2006 diskutieren Jay Rosenthal und Matthew Flaherty im Rahmen ihres Vortrags Eclipse RCP Applications and Enterprise Security [RF06] darüber, was an der Eclipse RCP getan werden muss, um die Entwicklung sicherer Unternehmensanwendungen einfacher zu gestalten. Unter den Anforderungen an sichere Anwendungen, wie Authentizierung, Netzwerksicherheit, Verschlüsselung und Single Sign-On, wird natürlich auch Autorisierung genannt. Während einige Techniken wie digitale Signaturen bereits von Eclipse 3.2 unterstützt werden, bleibt es bisher den Entwicklern überlassen, vorhandene Java- und J2EE-Sicherheitstechniken wie Sandboxing und JAAS in die Rich-Client-Platform und die eigene Anwendung zu integrieren. Rosenthal und Flaherty geben daher an, was die Eclipse RCP in der Zukunft auf diesem Gebiet leisten könnte. Dazu zählt ein Rahmenwerk, das basierend auf JAAS ein Plattform-Log-in bereit stellt. Eine bessere und einfachere Integration von verschiedenen Java-Sicherheitsimplementierungen über den Plug-In-Mechanismus ist ebenfalls ein Punkt auf ihrer Liste. Zudem ist eine exible und erweiterbare Benutzungsschnittstelle denkbar, die mit dem zugrundeliegenden Sicherheitssystem in Wechselwirkung steht. Die Dialoge und das Verhalten der Oberäche werden von den jeweiligen Berechtigungen beeinusst. Funktionen für die Verbreitung von Benutzungsrichtlinien und zur Administration könnten in Zukunft zusätzlich von Eclipse bereit gestellt werden. Eine weitere Anforderung von Rosenthal und Flaherty an zukünftige EclipseVersionen ist die Code-Sicherheit auf Basis von J2SE-Berechtigungen. Bisher besitzt Eclipse keine Einschränkungen auf die Ausführung von Code. verwendete Der FrameworkSecurityManager verletzt das Minimum privilegies- Prinzip (siehe Abschnitt 1.7), da er standardmäÿig alles zulässt. Plug-Ins brauchen nur in das plugins -Verzeichnis kopiert werden und der neue Code ist lauähig. Dieser Code kann unter Umständen private Daten lesen und verändern. Ein Prototyp, der diese Code-Sicherheit in die Plattform integriert und mit einem J2SE SecurityManager ausgeführt wird, existiert bereits im Rahmen des Equinox-Projektes. Jay Rosenthal ist seit über zehn Jahren Softwaretechniker der IBM Co- poration. Sein Team legt den Schwerpunkt auf das Einbinden von Si- cherheitskonzepten in die Rich-Client-Platform, um die Entwicklung sicherer Unternehmenssoftware zu ermöglichen. In den letzten drei Jahren hat er am Workplace Managed Client gearbeitet. Matt Flaherty ist der Sicherheitsleiter dieses Projektes, das auf der Eclipse RCP basiert. Kimberly Horne hat auf der vorhergehenden EclipseCon (März 2005) die Möglichkeiten von Capabilities (Activities) vorgestellt. Eigentlich für die Filterung groÿer Benutzungsschnittstellen gedacht, kann dieser Erweite- Teil 2 - Theorie 56 rungspunkt des Eclipse-UI-Plug-Ins auch für Autorisierungszwecke eingesetzt werden. Sie selbst sagt jedoch, dass diese Vorgehensweise keine Sicherheit bietet: Very poor substitute for real security throw food at me for even suggesting this [Hor05b, Folie 22]. Weshalb, wird in Abschnitt 6.3 erläutert. Kimberly Horne arbeitet seit 2003 im IBM Ottawa Team und ist seit dem 3.0 Release Mitglied des Eclipse Platform UI Teams. Dort ist sie u.a. für das Capabilities-Framework und dynamische Plug-Ins verantwortlich. Bereits in seinem Buch [Dau05b] aus dem Jahr 2005 stellt Berthold Daum zur Demonstration des Plug-In-Mechanismus einen starren Ansatz der Benutzerautorisierung vor. Er verwendet in seiner Beispielanwendung rollen- abhängige Plug-Ins. Der vorhandene Plug-In-Mechanismus von Eclipse wird so ausgenutzt, dass jedem Benutzer nur die Plug-Ins zur Verfügung stehen, die er in seiner Rolle verwenden darf. Die Realisierung dieses Ansatzes wird in Abschnitt 6.1 ausführlicher vorgestellt. Die Eclipse-IDE bietet so etwas ähnliches bereits über die Startkonguration zum Testen von Plug-Ins bzw. Rich-Client-Anwendungen. Dort kann ausgewählt werden, mit welchen Plug-Ins die Rich-Client-Anwendung oder die Testumgebung gestartet werden soll (siehe Anhang B.2.1). Berthold Daum hat noch weitere Bücher über Eclipse und die Eclipse RCP verfasst. Dazu gehören [Dau05a] und [Dau06]. Im September 2005 ist dann Eclipse-JAAS entstanden (siehe Abschnitt 6.2). Neil Bartlett hat sein Projekt auf Sourceforge (unter [Eclc]) zur Verfügung gestellt. Dabei handelt es sich um ein Rahmenwerk für die Eclipse RCP, das den Java Authentication and Authorization Service nutzt, um den Benutzer beim Starten der Anwendung zu authentizieren. Aufgrund seiner Identität werden dem Benutzer dann nur bestimmte Plug-Ins angeboten. [Eclb] Im März 2007 hielt Neil Bartlett den Vortrag Secure Desktop Applications with Eclipse RCP [Bar07] auf der EclipseCon. Das Abstract dazu lautet wie folgt: Eclipse RCP is rapidly gaining popularity as a framework for corporate desktop applications. These applications are often developed bespoke or in-house, and are the gateways to critical business functions. As such they must be secured: we must know exactly who each user is (i.e. they must be authenticated), and we must prevent users from performing tasks that they do not have the authority to perform (i.e. they must have authorization). Eclipse RCP is an excellent base on which to build secure applications. Through plugins and extensions, we can oer a far cleaner Aktueller Diskussionsstand über Autorisierung in der Eclipse RCP 57 experience for users by simply hiding the functions for which they are not authorized, instead of constantly showing Access Denied errors. Using OSGi we can even dynamically grant or deny access to functionality while the application is running. Yet, frustratingly, RCP stops short of supplying out-of-the-box support for authentication and authorization, so this support must be added on. In this talk we discuss the principle techniques required; what the most common business requirements are for security, and how to achieve them; and how to integrate with existing technologies such as JAAS or Kerberos. [Bar07] In dem Vortrag spricht er also an, dass auf dem Gebiet der Authentizierung und Autorisierung in Eclipse noch einiges getan werden muss, damit allgemeine Sicherheitsanforderungen auf Basis der vorhandenen Techniken erfüllt werden können. Was heute allerdings schon getan werden kann und was auch in Zukunft beachtet werden sollte, teilt Bartlett ein drei Lektionen ein: 1. Primary Access Control MUST take place in the server Eine wichtige Voraussetzung ist, dass die Kontrolle über die Benutzerrechte auf einem (zentralen) Server und somit beim Administrator bleibt. Denn nur der Administrator weiÿ, wozu welcher Benutzer autorisiert ist. 2. If they can't do it... don't show it to them! Damit bezieht sich Neil Bartlett auf die Gebrauchstauglichkeit von Software. Die Benutzungsoberäche soll nur die Funktionen enthal- ten, für die der Benutzer autorisiert ist. 3. Control Bundle Installation Um in einer heutigen Eclipse-Umgebung die Kontrolle über die installierten Erweiterungen zu erhalten, muss überwacht werden, welche Plug-Ins den Zustand Aufgelöst erreichen dürfen (siehe Abschnitt 2.3.2). Wenn die benötigte Information zu dieser Überwachung von einem Server stammt, wie in der ersten Lektion verlangt, dann wird durch diese Vorgehensweise die zweite Lektion ebenfalls erfüllt. Allerdings bleiben einige Kritikpunkte: Zum einen muss eine Verbindung zum Server bestehen, was den Netzwerkverkehr erhöht. larität. Auf der anderen Seite steht die Problematik der Granu- Durch Überwachung der aufzulösenden Plug-Ins werden automa- tisch alle Erweiterungen der einzelnen Plug-Ins kontrolliert. Ein Benutzer kann also nicht für einzelne Erweiterungen eines Plug-Ins autorisiert sein. Einer der Vorschläge von Neil Bartlett zur Verfeinerung dieses Alles oder Teil 2 - Theorie 58 Nichts-Prinzips ist die Filterung der Ergebnisse aus der Extension-Registry (registry.getExtension*() und For*()). registry.getConfigurationElements- Auch die deklarative Angabe von Rollen in Erweiterungspunkten wäre denkbar: <extension point="..." role="admin"> Zur Autorisierung auf deklarativen Erweiterungen stuft Bartlett den Java Authentication and Authorization Service als ungeeignet ein, da dieser Dienst nur Code vor unbefugter Ausführung schützt. Bartlett sieht einen weiteren Nachteil bei der Verwendung von JAAS. Ob ein Benutzer zu einer Aktion berechtigt ist oder nicht, entscheidet sich erst, wenn die Aktion durchgeführt wird (siehe Abschnitt 4.3.3). Neil Bartlett ist ein Java-Entwickler und Berater, der sich insbesondere auf die Nutzung von Eclipse RCP und OSGi innerhalb von Unternehmen spezialisiert hat. Er hat bereits einige Kreditinstitute bei der Einführung der RCP unterstützt und predigt die Verwendung der RCP- und OSGi-Technologie bei der client- und serverseitigen Entwicklung. In den eingangs erwähnten Diskussionen in den Eclipse-Newsgroups werden überwiegend Kimberly Hornes Activities und Neil Bartletts EclipseJAAS diskutiert. Es werden sogar Versuche unternommen, die beiden Ansätze miteinander zu verknüpfen. Je McAer ist Leiter der Eclipse RCP und Equinox Teams und seit Anfang an in Eclipse einbezogen. Er ist einer der Architekten der Eclipse-Plattform und Koautor des Buches eclipse Rich Client Platform (siehe Literaturverzeichnis [ML06]). McAer bevorzugt die Deaktivierung von Plug-Ins vor der Nutzung von Activities und äuÿert sich zu dem Thema wie folgt: Activities are weak and I don't really see going further with them. Fundamentally they are a UI ltering mechanism to control what is on the glass. There are many other aspects to the generic notion of capabilities than just what the user sees. For example, there may be some set of services registered that either show up in the UI (through some third party mechanism) or just do work in the background (e.g., a builder). If the user is not authorized for this function, activities are not going to help. Personally I am a fan of simply disabling plugins that the user is not authorize to use. The problem is eectively one of granularity. What if you want the user to be able to use part of a plugin and you are not the plugin producer? Is this a real usecase? Are there any simplifying assumptions we can make to help sort out the Aktueller Diskussionsstand über Autorisierung in der Eclipse RCP 59 presentation? To answer these, imagine you can change anything in Eclipse. What would need to be changed (and how) to get the right security model in place and address these issues? [McA05] In den folgenden Kapiteln werden vorerst von Eclipse unabhängige, grundlegende und bewährte Konzepte und Lösungen für Benutzerautorisierung vorgestellt. Dabei wird untersucht, in wie weit sie in einer Eclipse RCP- Anwendung verwendet werden können. Um im Anschluss der Auorderung von McAer nachzukommen, greifen die Autoren dieser Arbeit den einfachen Ansatz der Plug-In-(De-)Aktivierung auf. Auÿerdem stellen sie ein Konzept vor, mit dem es möglich ist, dem Benutzer lediglich einzelne Funktionalitäten von Plug-Ins zur Verfügung zu stellen. Auf die hier diskutierten Ansätze wird in Kapitel 6 ein Blick geworfen. Kapitel 4 Bestehende Konzepte und Lösungen Kai Meyer Die folgenden Abschnitte stellen einige der bekanntesten Konzepte und Produkte für die Authentizierung und Autorisierung vor: • • • Role Based Access Control (Abschnitt 4.1, Seite 60) Lightweight Directory Access Protocol (Abschnitt 4.2, Seite 65) Java Authentication and Authorization Service (Abschnitt 4.3, Seite 66) • eXtensible Access Control Markup Language (Abschnitt 4.4, Seite 73). Es werden kurz die grundsätzlichen Merkmale beschrieben, bevor ein genauerer Blick auf die Funktionsweise und die einzelnen Komponenten geworfen wird. Danach werden vorhandene Erweiterungen, Kooperationsmöglichkeiten mit anderen Produkten oder, sofern es sich um ein Konzept handelt, Umsetzungen aufgezeigt. Der abschlieÿende Teil Einordnung soll keinesfalls eine Wertung darstellen, sondern lediglich beschreiben, in wieweit das Konzept oder die Lösung geeignet ist für den Einsatz innerhalb eines Rich-Clients und wie die GUI in der Spezikation berücksichtigt wurde. 4.1 Role Based Access Control (RBAC) Kai Meyer Die Idee, einzelnen Benutzern aufgrund ihrer Rolle Berechtigungen zuzuweisen, gibt es schon seit über 25 Jahren. 60 Doch erst 1992 wurde dieser Role Based Access Control (RBAC) 61 Gedanke von D.F Farraiolo und D.R. Kuhn zu einem akzeptierten Standard namens Role Based Access Control (RBAC) aufbereitet. RBAC speziziert ein exibles und einfach zu handhabendes Konzept für die Autorisierung. Die überarbeitete Version von RBAC wurde im November 2001 von dem InterNational Committee for Information Technology Standards (INCITS) als INCITS BSR 359 veröentlicht. Wie dem Namen Role Based Access Control, also Rollen-basierte Zugriskon- trolle, zu entnehmen ist, ndet die Autorisierung aufgrund der Rollen eines Benutzers und den mit ihnen verbunden Rechten statt. Rollen in einem Betrieb oder einer Organisation bleiben über einen langen Zeitraum konstant, während die registrierten Benutzer und ihre Verantwortlichkeiten häugen Änderungen unterliegen. So ist es bei einer Versetzung oder Neueinstellung nur nötig dieser Person eine andere Rolle zuzuweisen. Dabei kann die Struktur der Rollen und die Zuordnung der Rechte zu den Rollen unangetastet bleiben. Das RBAC Referenz Modell deniert vier Komponenten. Dazu gehören Core RBAC, Hierarchical RBAC, Static Seperation of Duty und Dynamic Seperation of Duty. In Core RBAC sind die grundlegenden Elemente enthalten. Somit ist Core RBAC für jedes Role Based Access Control System erforderlich, während die anderen Komponenten unabhängig von einander sind und einzeln implementiert werden können. In den folgenden Abschnitten werden die Aufgabenbereiche der einzelnen Komponenten näher erläutert. 4.1.1 Core RBAC Im RBAC Modell werden den einzelnen Benutzern verschiedene Rollen zugewiesen und die Berechtigungen mit den Rollen verknüpft. Dafür beinhaltet Core RBAC fünf Hauptelemente: Benutzer (USER), Rollen (ROLES), Objekte (OBS), Operationen (OPS) und Genehmigungen (PRMS). Zusätzlich enthält die Spezikation Sitzungen (SESSIONS). Die Beziehungen zwischen diesen Elementen ist in Abbildung 4.1 dargestellt. • Das Grundkonzept von RBAC sieht Benutzer als natürliche Personen, was mit der Denition des Begries Benutzer innerhalb dieser Arbeit übereinstimmt. Dem entgegen gesetzt kann in RBAC das Konzept Be- nutzer auch um Maschinen, Software-Systeme oder um selbstständige (Software-)Agenten erweitert werden. • Eine Rolle ist eine Beschreibung für eine Personengruppe, die inner- halb eines Unternehmens bestimmte Tätigkeiten ausführt und die dafür Teil 2 - Theorie 62 Abbildung 4.1: Core RBAC Elemente [Ame03, S.8] vorgesehenen Rechte und Verpichtungen hat. • Eine Genehmigung ist eine Erlaubnis, Operationen an zu schützen- den Objekten auszuführen. • Eine Operation wird auf Objekte angewendet und verändert gegebe- nenfalls deren Zustand. • Eine Sitzung ist eine Abbildung zwischen einem angemeldeten Benut- zer und einer Menge an aktivierten Rollen, die dem Benutzer zugeordnet sind. Was genau eine Operation oder ein Objekt ist, hängt von dem zugrunde liegenden System ab. Innerhalb einer relationalen Datenbank können die Operationen delete, insert, append oder update und die Objekte die Zellen, Spalten oder Zeilen sein. 4.1.2 Hierarchical RBAC Abbildung 4.2: Hierarchical RBAC Elemente [Ame03, S.10] Um die Rollen besser zu strukturieren und sie der Firmenstruktur anzupassen, wird in vielen RBAC Anwendungen wendet. Hierarchical RBAC ver- Die Rollenhierarchie deniert eine Vererbungsbeziehung zwischen Role Based Access Control (RBAC) 63 Rollen. So vererbt eine Vater-Rolle alle ihre Rechte an ihre Kinder, die dann eigene Berechtigungen hinzufügen können. Hierarchical RBAC unterstützt Mehrfachvererbung, um eine beliebige partielle Ordnung zu erzeugen. Wird lediglich Einfachvererbung verwendet, ist die Struktur der Rollen ein einfacher Baum, in dem jede Rolle zwar mehrere Kinder haben kann, aber nur eine einzige Vaterrolle. 4.1.3 Static Seperation of Duty (SSD) Mit Static Seperation of Duty (SSD) also der statischen Trennung von Verpichtungen ist RBAC in der Lage, die Zuordnungen von Benutzern zu Rollen einzuschränken. Static Seperation of Duty erlaubt einem Administrator SSD-Richtlinien zu denieren, so dass sich bestimmte Rollen gegenseitig ausschlieÿen. Auf diese Weise verhindert SSD, dass ein Benutzer zwei sich gegenseitig ausschlieÿende Rollen bekommt. Die Interessenpolitik einer Firma kann es vorsehen, dass ein Benutzer mit Rolle A nicht der Rolle B angehören darf. So wird sichergestellt, dass an wichtigen Entscheidungen mehrere Personen beteiligt sind, um Risiken besser erkennen und abschätzen zu können (Vier-Augen-Prinzip). Zum Beispiel kann es in einem Betrieb verlangt werden, dass Verträge, die von einer Person erstellt werden, vor der Unterzeichnung von einem anderen Mitarbeiter überprüft werden. Wird zusätzlich zu SSD auch Hierarchical RBAC verwendet, kann es zu Inkonsequenzen bezüglich der Vererbungsstruktur kommen. Schlieÿen sich zwei Rollen gegenseitig aus, muss zusätzlich auf die Rollen geachtet werden, die von diesen Rollen erben. Um dies zu bewerkstelligen wurde die Rollenhierarchie um die Vererbung der SSD-Bedingungen erweitert (siehe Abbildung 4.3). Abbildung 4.3: SSD Elemente [Ame03, S.13] Teil 2 - Theorie 64 4.1.4 Dynamic Seperation of Duty (DSD) Ebenso wie Static Seperation of Duty reduziert auch of Duty Dynamic Seperation (DSD) die für einen Benutzer verfügbaren Berechtigungen. Der Unterschied liegt im Kontext, in dem die einzelnen Regeln greifen. Während SSD die Menge der zuweisbaren Rechte im gesamten System beschränkt, ist DSD verantwortlich für die Reduzierung der Rechte zur Laufzeit innerhalb einer Sitzung (siehe Abbildung 4.4). D.h. ein Benutzer kann mehreren Rol- Abbildung 4.4: DSD Elemente [Ame03, S.14] len zugewiesen sein, die einzeln verwendet keine Interessenskonikte verursachen. Nur wenn der Benutzer innerhalb einer Sitzung verschiedenen Rollen aktiviert, kommt es zu diesen Konikten. Hier greift DSD ein. Versucht ein Benutzer sich mit einer weiteren Rolle anzumelden, die in Konikt mit einer bereits aktiven Rolle steht, wird er von RBAC aufgefordert, die aktive Rolle zu beenden, bevor die neue aktiviert werden kann. Somit unterstützt DSD das Minimum Privilegies-Prinzip, welches bereits in Abschnitt 1.7 erklärt wurde. 4.1.5 Einordnung RBAC beschreibt eine einfaches und leicht zu administrierendes Vorgehen um Benutzerautorisierung durchzuführen. Durch die Verwendung von Rollen und den dazu denierbaren Bedingungen kann RBAC eine groÿe Bandbreite an Sicherheitsrichtlinien umsetzen. Da beim Anmelden eines Benutzers seine Berechtigungen ermittelt werden und RBAC keine Annahmen darüber macht, was geschützt werden soll, kann auch die Benutzungsoberäche entsprechend angepasst werden. Der Einsatz in einer Rich-Client-Architektur ist ebenfalls denkbar. Es müssen lediglich die Rollenzuordnungen auf dem Rich-Client verfügbar sein und bei einer bestehenden Serververbindung aktualisiert werden. [FK92], [Uni03], [Ame03] Lightweight Directory Access Protocol (LDAP) 65 4.2 Lightweight Directory Access Protocol (LDAP) Für die Speicherung und den Zugri auf Benutzerinformationen bieten sich Verzeichnisdienste an. Ein Verzeichnis ist eine Auistung von Informationen über Objekte in einer gewissen Ordnung. Zu jedem Objekt können Detailinformationen abgefragt werden. Beispiel: In einem Telefonbuch sind die Objekte die Personen, die Ordnung ist alphabetisch und die Detailinformationen sind Adresse und Telefonnummer. Neben solchen Kontaktdaten kann ein Verzeichnis auch Passwörter, private Schlüssel, Zertikate, Richtlinien und Zugriskontrolllisten (Access Control Lists, ACLs) enthalten. Ein Verzeichnisdienst wird eingesetzt, um die Daten zentral zu halten und redundante Informationen an verschiedenen Stellen zu vermeiden. Dabei liegen die Daten in einem einheitlichen Schema vor und sind unter einer einheitlichen Schnittstelle erreichbar. Eine Zugriskontrolle auf die enthaltenen Informationen ndet ebenfalls statt. Verzeichnisdienste sind mehr für das schnelle Aunden und Auslesen auf Informationen ausgelegt als auf das Schreiben neuer Informationen. Beispiel: Ein Telefonbuch wird nur jährlich aufgelegt, eine Passwort-Datenbank wird nur selten geändert, aber beide werden ständig abgefragt. Das Lightweight Directory Access Protocol ist ein Protokoll zum Zugri auf Verzeichnisdienste. Zusätzlich gibt es eine hierarchische Verzeichnisstruktur vor. LDAP basiert auf dem X.500-Standard, der 1988 von der ISO und der International Telecommunication Union (ITU) geschaen wurde. Die Kommunikation mit der Verzeichnisstruktur ndet über das Directory Access Protocol (DAP) statt. Bei X.500 ist das DAP sehr umfangreich und setzt auf den vollständigen ISO/OSI-Stack auf ([ISO94, S.34], + [Z 98, S.346f ]). Dadurch ist das Protokoll schwer zu implementieren. Aus diesem Grund wurde 1995 an der Universität von Michigan LDAP entwickelt. LDAP bietet eine leichtgewichtigere Version des Directory Access Protocol für den Zugri auf X.500 Verzeichnisse über TCP/IP. Aufgrund seiner Einfachheit, Flexibilität und Vielseitigkeit ist LDAP zum de facto Standard für die Verwaltung von Benutzerinformationen geworden. LDAP ist ein oener Standard und hersteller- und plattformunabhängig. Die enthaltenen Informationen werden durch Authentizierung, Zugriskontrollen (über ACLs) und Verschlüsselung geschützt. Eine bekannte OpenSource-Umsetzung von Torsten Witte Teil 2 - Theorie 66 LDAP ist OpenLDAP [Ope]. OpenLDAP wird standardmäÿig bei Linux und BSD-Betriebssystemen verwendet und kann mit den meisten UNIX-Systemen genutzt werden. 4.2.1 Einordnung Da in Java über das Java Naming and Directory Interface (JNDI) Kontakt mit einem LDAP-Server aufgenommen werden kann, ist die Verwendung von LDAP auch innerhalb eines Eclipse-Rich-Clients möglich. Damit ist ein geeigneter Ort für die Authentizierungs- und Autorisierungsdaten innerhalb eines Netzwerks gefunden. [SNL06, S.73 ], [Mit], [BG03] 4.3 Java Authentication and Authorization Service (JAAS) Torsten Witte Ursprünglich bietet Java bezugsquellen-basierte Zugriskontrollen an (codesource-based access controls), d.h. Zugriskontrollen die darauf basieren, von wo der Code abstammt und wer den Code signiert hat. Der Java Authentication and Authorization Service (JAAS) erweitert die JavaSicherheitsarchitektur um die Fähigkeit, Zugriskontrollen davon abhängig zu machen, wer den Code ausführt. Seit Java Version 1.4 ist JAAS fest in das Java 2 Standard Edition Development Kit (J2SDK) integriert. Es handelt sich dabei um eine reine Java-Implementierung. JAAS kann für zwei Anwendungsbereiche eingesetzt werden: 1. für die Authentizierung von Benutzern, um zuverlässig und sicher zu bestimmen, wer gerade Java-Code ausführt 2. für die Autorisierung von Benutzern, um sicherzustellen, dass Benutzer die für ihre Handlungen erforderlichen Genehmigungen besitzen [Jav07c], [Jav07d] 4.3.1 Authentizierung mit JAAS Da JAAS modular aufgebaut ist, bleiben Anwendungen unabhängig von der darunterliegenden Authentizierungs-Technologie. Auf diese Weise können Java Authentication and Authorization Service (JAAS) 67 stets neue oder verbesserte Technologien verwendet werden, ohne dass die zugehörige Anwendung angepasst werden muss. Es ist sogar möglich, mehrere Authentizierungs-Module aufzuschichten und ein anwendungsübergreifendes Single Sign-On (siehe Abschnitt 1.4) zu realisieren. Die Authentizierung eines Benutzers spielt sich bei JAAS in einem inContext ab. Log- Für die korrekte Authentizierung innerhalb dieses Kontextes ist das Login-Modul, eine Implementierung des Interfaces auth.spi.LoginModule, javax.security.- verantwortlich. Vorgefertigte Login-Module für Unix, Windows, JNDI (Java Naming and Directory Interface) und Kerberos sind in Java bereits enthalten. Login-Module kommunizieren mit Hilfe von Callbacks und einem Callback- Handler mit dem Benutzer, um z.B. dessen Namen und Passwort abzufragen. Dadurch bleiben Login-Module unabhängig von der eingesetzten Benutzerinteraktion. Da Login-Module lediglich in einer Kongurationsdatei angegeben werden, sind sie leicht austauschbar. Hier ein Beispiel für den Inhalt so einer Datei: LoginContextName { authorizationExample.MyLoginModule required; }; Ein authentizierter Benutzer oder Dienst wird in JAAS von einem ject Sub- repräsentiert. Bei erfolgreicher Authentizierung eines Benutzers bin- det das Login-Modul ein oder mehrere Principals an dessen Subject. Jedes Principal repräsentiert eine Identität des Benutzers. Dabei ist eine einfache Namens- oder Benutzerkennung (Id) denkbar, wodurch Subjects voneinander unterschieden werden können. Die Zuweisung von Gruppen oder Rollen ist ebenfalls über Principals möglich. Anhand dieser Kennungen kann dann später ermittelt werden, ob der Benutzer die Erlaubnis besitzt, bestimmte Code-Abschnitte auszuführen. Das Sequenzdiagramm in Abbildung 4.5 auf Seite 68 veranschaulicht den Authentizierungsvorgang grasch. Ein ausführliches Beispiel zur Authentizierung mit JAAS ist [Jav07a] oder der beigefügten CD zu entnehmen. [Jav07a], [Jav07c], [Jav07d] 4.3.2 Autorisierung mit JAAS Ob ein Benutzer autorisiert ist, einen bestimmten Code-Block auszuführen, ist in einer Policy-Datei (engl. Richtlinie; Regelwerk) festgehalten. Diese Richtlinien-Dateien sind einfache ASCII-Dateien und können mit Hilfe des 68 Teil 2 - Theorie Abbildung 4.5: Authentizierung mit JAAS - Sequenzdiagramm Java Authentication and Authorization Service (JAAS) 69 Policy-Tools von Java erstellt und bearbeitet werden (siehe Anhang B.3). Eine Policy-Datei enthält z.B. folgende Einträge: grant Principal authorizationExample.principals.MyNamePrincipal "joe" { permission java. io .FilePermission "foo.txt", "read, write"; permission java. util .PropertyPermission "java.home", "read"; permission authorizationExample.permissions.MyPermission "permissionForMyAction1"; }; grant Principal authorizationExample.principals.MyNamePrincipal "bob" Principal authorizationExample.principals.MyRolePrincipal "role1" { //Nur ein Subject, das ALLE o.g. Principals besitzt , darf die jew. Action ausführen permission authorizationExample.permissions.MyPermission "permissionForMyAction1"; permission authorizationExample.permissions.MyPermission "permissionForMyAction2"; }; Subject, dass das Principal MyNamePrincipal authorizationExample.principals mit dem Namen joe In diesem Beispiel hat ein aus dem Paket besitzt, folgende Berechtigungen: • Lesen und Schreiben der Datei • Lesen der Property-Variable • Ausführen von plar der foo.txt java.home MyAction1, d.h. dem Code-Block, der durch ein ExemKlasse MyPermission mit dem Attributwert permissionFor- MyAction1 geschützt ist (siehe unten) Permissions zur VerfüPermissions und Principals angelegt werden. Die Überprüfung der Permissions geschieht im Code über eine der zahlreichen check...-Methoden des SecurityManagers der Java-Anwendung. Besitzt das System nicht die benötigte Berechtigung, wird eine SecurityException geworfen. Das Beispiel zeigt ebenfalls, dass Java bereits einige gung stellt und diese auch überprüft. Zusätzlich können eigene Subjects ausgeführt werden darf, berun()-Methode einer java.security.PrivilegedAction oder java.security.PrivilegedExceptionAction. Diese Schnittstellen werDer Code, der nur von bestimmten ndet sich in der den benötigt, um den Code als geschützte Aktion zu kapseln und vom System im Auftrag eines Subjects ausführen zu lassen. Dazu später mehr. Das folgende Codebeispiel zeigt die Implementierung von der MyAction1. Mit checkPermission()-Methode des SecurityManagers wird überprüft, ob Subjects) die benötigte Berechtigung besitzt. das System (im Auftrag eines Teil 2 - Theorie 70 package authorizationExample.privilegedActions; import java.security.PrivilegedAction; import authorizationExample.permissions.MyPermission; public class MyAction1 implements PrivilegedAction { public Object run() { try { } } SecurityManager securityManager = System.getSecurityManager(); if (securityManager!=null) { securityManager.checkPermission(new MyPermission("permissionForMyAction1")); } System.out.println("MyAction1 −> ok"); Object result = new Object(); //do something return result; } catch (SecurityException e) { System.out.println("MyAction1 −> not ok"); throw e; } PrivilegedAction im Auftrag eines Subjects Subject die statischen Methoden doAs() und doAsPrivileged(). Diese Methoden nehmen als Parameter ein Subject und eine PrivilegedAction entgegen. Die Methode doAsPrivileged() erwartet darüber hinaus einen AccessControlContext. Der SecurityManager ist nach dem Aufruf einer der doAs-Methoden in der Lage, Berechtigungsentscheidungen aufgrund der Principals des Subjects und dem Inhalt der Policy-Datei zu treen. Die run()-Methode der jeweiligen PrivilegedAction Damit das System eine ausführen kann, enthält die Klasse wird ausgeführt und, sofern alle benötigten Berechtigungen vorhanden sind, deren Ergebnis von der SecurityException doAs-Methode zurückgeliefert. Andernfalls wird eine geworfen. Die komplette Beispielanwendung bendet sich auf der CD zu dieser Arbeit (siehe Anhang C.3). Abbildung 4.6 auf Seite 71 zeigt ein vereinfachtes Sequenzdiagramm des Autorisierungsvorgangs. In dem Diagramm ist zu erkennen, dass bereits für die Ausführung der doAs-Methoden Systemberech- tigungen notwendig sind. [Jav07b] Java Authentication and Authorization Service (JAAS) Abbildung 4.6: Autorisierung mit JAAS - Sequenzdiagramm 71 Teil 2 - Theorie 72 4.3.3 Einordnung JAAS ist ein bewährtes, Java-internes Rahmenwerk, das den von vornherein in Java vorhandenen Sicherheitsmechanismus um benutzerabhängige Zugriskontrollen erweitert. Dadurch wird benutzer-, gruppen- und rollenbasierte Autorisierung möglich. Der Bezug zu einer GUI ist im Bereich der Authentizierung einfach herzustellen (z.B. mit einem Log-in-Dialog). Da die doAs-Methoden im nicht-autorisierten Fall eine SecurityException werfen, werden diese meist einfach an den Benutzer in Form eines (Fehler-)Dialogs weitergereicht. Allerdings können über einen kleinen Workaround die Berechtigungen abgefragt werden, ohne die geschützte Aktion durchzuführen. So ist auch auf dem Gebiet der Autorisierung eine anpassbare Benutzungsoberäche möglich (z.B. durch Weglassen von Menüpunkten, für die der Benutzer nicht berechtigt ist). Der Nachteil von JAAS liegt bei den Policy-Dateien. Diese sind standardmäÿig Textdateien auf der Clientseite. Daher können sie ohne groÿe Probleme von unbefugten Benutzern verändert werden. Auÿerdem sind sie durch keine Prüfsumme gesichert, um Änderungen gegebenenfalls zu erkennen. Da je- doch die Berechtigungen von Benutzern oder Rollen von Zeit zu Zeit gewechselt werden, ist ein weiterer Nachteil die fehlende Aktualisierung im System. Wurden Policy-Dateien einmal vom System eingelesen, können sie zwar nachträglich verändert werden, doch das Java-System erkennt diese Änderung nicht. Als Konsequenz muss die Anwendung neu gestartet werden. Um JAAS innerhalb eines Rich-Clients verwenden zu können, muss also ein Weg gefunden werden, der diese Probleme sinnvoll löst. Da sich das Sicherheitssystem von Java beliebig erweitern lässt, lassen sich z.B. die Standardtextformate durch XML-Dateien ersetzen, die verschlüsselt und mit einer (durch eine digitale Signatur gesicherten) Prüfsumme gespeichert werden. Solange die Policy-Dateien auf dem Client bleiben, kann der Rich-Client die Berechtigungsentscheidungen weiterhin auch ohne bestehende Serververbindung treen. Sobald die Verbindung zum Server wieder hergestellt ist, muss die lokale Policy-Datei mit dem Server synchronisiert werden. Eine Umsetzung, die den Java Authentication and Authorization Service und die Eclipse Rich-Client-Platform zusammenführt, ist Eclipse-JAAS (siehe Abschnitt 6.2). [Ull06, Kap. 24.3] eXtensible Access Control Markup Language (XACML) 73 4.4 eXtensible Access Control Markup Language (XACML) Die von der Organization for the Advancement of Structured In- eXtensible Access Control Markup Language ist eine bewährte Beschreibungssprache für Sicherformation Standards (OASIS) spezizierte heitsrichtlinien. Es ist eine XML-basierte Sprache zur Beschreibung sowohl von Autorisierungsregeln und Policies (siehe Abschnitt 4.4.1) als auch von Auswertungsregeln, um Entscheidungen für die Autorisierung treen zu können. Zusätzlich beschreibt XACML ein Nachrichtenformat, das für die Erzeugung von Autorisierungsanfragen und -antworten verantwortlich ist. Dabei ist XACML generisch und exibel genug, um verschiedene Sicherheitsanforderungen sowie groÿe und komplizierte Richtlinienstrukturen zu unterstützen. Einer der groÿen Vorteile von XACML ist, dass es Zugrisrechte auf bestimmte Teile von XML-Dokumenten vergeben kann. Den Kern von XACML bilden der und der Policy Enforcement Point (PEP) Policy Decision Point (PDP). Im Kontext von XACML ist der Begri Point als Einstiegspunkt zu verstehen. Der PEP schützt die zugrundeliegenden Ressourcen, indem er die Anfragen eines Benutzers zuerst an den PDP schickt und nur wenn diese Instanz den Zugri gewährt, werden die entsprechenden Aktionen vom PEP veranlasst. Die Nachrichten zwischen PEP und PDP werden in dem in XACML enthaltenen Nachrichtenformat generiert und versendet. Nachdem der PDP eine Anfrage von PEP erhalten hat, antwortet er mit: • Permit - Zugri gewähren • Deny - Zugri verweigern • Indeterminate - Die Entscheidung kann nicht getroen werden, da benötigte Daten nicht vorhanden oder Fehler aufgetreten sind • Not Applicable - Die Anfrage kann von diesem PDP nicht beantwortet werden 4.4.1 Policies Die XACML Beschreibungssprache für Policies ist in der Lage auch sehr exible und komplexe Policies zu denieren. Aufgrund der Gröÿe des zugrundeliegenden Daten-Modells werden hier nur die wichtigsten Komponenten vorgestellt: Kai Meyer Teil 2 - Theorie 74 • Eine XACML-Policy (Richtlinie) ist eine Menge von Regeln zusam- men mit einem Algorithmus, um diese Regeln zu kombinieren. Zusätzlich können mehrere Obligations (Verpichtungen) hinterlegt werden. Diese spezizieren Operationen, die ausgeführt werden sollen, nachdem eine Autorisierungsentscheidung getroen wurde. Jede Policy beinhaltet genau einen Policy- oder PolicySet-XML-Tag. • Ein PolicySet ist eine Menge von Policies oder anderen PolicySets und dient hauptsächlich der Strukturierung von Policies. Ähnlich wie bei einer Policy, ist in jedem PolicySet ein Algorithmus, der die Policies verknüpft. Auch hier können wieder Obligations angegeben werden. • Eine Rule (Regel) beschreibt, welche Bedingungen erfüllt sein müssen, damit erbetene Zugrie auf Ressourcen gewährt werden. Sie beziehen sich auf genau ein Target. Das Ergebnis bzw. der Eekt einer Regel (permit oder deny) wird zurückgegeben, sofern das Target und die optionalen Condition s zutreen. • Eine Condition (Bedingung) kann auf die Attribute von der Umge- bung, der Ressource, dem Subject (einem Benutzer oder eine Instanz) und der Aktion zugreifen. Die so erhaltenen Informationen können anschlieÿend zu einem booleschen Ausdruck zusammengefasst werden. • Ein Target (Ziel) ist eine Menge von Bedingungen für Ressourcen, Subjects und Aktionen bzw. deren Attribute. Die Policy, das Poli- cySet oder die Rule passt zu einer Anfrage, wenn die in der Anfrage enthaltenen Attribute den Bedingungen im Target entsprechen. Die Information in einem Target können auch dazu verwendet werden, die Policies zu strukturieren. Dies ist gerade bei einer sehr groÿen Anzahl von Policies hilfreich. • Ein Attribute (Attribut) ist ein unter einem Bezeichner bekannter Wert eines Subject s, einer Ressource, einer Aktion oder der Umgebung. Der Name des Benutzers, seine Gruppenzugehörigkeit, die aktuelle Uhrzeit oder die Uhrzeit der Anfrage sind solche Attribute. 4.4.2 Datenuss Die Abbildung 4.7 stellt einen typischen Anfrageablauf in XACML da. Die einzelnen Schritte sind dabei: 1. Ein Administrator legt am Policy Administration Point (PAP) Po- licies und Policies-Sammlungen fest. eXtensible Access Control Markup Language (XACML) 75 Abbildung 4.7: XACML-Datenuss [SNL06, S.419] 2. Ein Antragsteller (Benutzer oder andere Instanz) stellt eine Anfrage bzgl. einer Ressource an den PEP. Dazu müssen die Attribute und Policies der Ressource, der Umgebung, der Aktion und des Antragstellers selbst bekannt sein. 3. Der PEP leitet die in dem domänenspezischen Format verfasste Anfrage an den Context Handler weiter. 4. Der Context Handler kreiert aus der Anfrage einen XACML AnfrageKontext und sendet anschlieÿend eine Auswertungs-Anfrage an den PDP. 5. Der PDP fragt nun den Context Handler nach Daten, die für die Entscheidung benötigt werden. Dazu gehören Attribute des Benutzers, des betreenden Subject s, der Ressource, der Aktion sowie der Umgebung. 6. Der Context Handler bezieht die geforderten Attribute entweder aus dem schon erstellten Anfrage-Kontext oder aus einem mation Point (PIP). Policy Infor- 7. Der PIP sammelt die Attribute von den entsprechenden Stellen. 8. Der PIP übergibt die Daten dem Context Handler. Teil 2 - Theorie 76 9. Optional kann der Context Handler die Ressource dem Kontext anhängen. 10. Der Context Handler sendet die gesammelten Attribute an den PDP 11. Die passenden Policies werden ausgewertet, ein Entscheidungskontext generiert und dieser Kontext zusammen mit der Entscheidung zurück an den Context Handler geschickt. 12. Der Context Handler übersetzt die Antwort in das domänenspezische Format und leitet dies an den PEP weiter. 13. Der PEP führt am Obligations Service alle von der Entscheidung abhängigen Verpichtungen (engl. obligations) aus. 4.4.3 Umsetzungen und Erweiterungen Sun Microsystems hat auf Sourceforge eine OpenSource Implementierung von XACML veröentlicht. Das XACML Kit Version 1.2 [Sun] unterstützt die derzeit aktuelle XACML 2.0 Spezikation. Das Kit bietet verschiedene Pakete, die einzelne Bereiche der XACML Spezikation umsetzen. Derzeit wird an der Version 2.0 gearbeitet. ebXML Registry [ebX] benutzt XACML, um eine Zugriskontrolle für WebServices zu realisieren. Es regelt unter welchen Umständen ein Benutzer Zugri auf einen Web-Service hat. SAML (Security Assertion Markup Language) ermöglicht in der Version 2.0 eine Anbindung von XACML. SAML übernimmt die Authentizierung und die Aufgaben eines Identity-Management und kann somit ein SSO (siehe Abschnitt 1.4) bereitstellen. Allerdings beinhaltet es keinerlei Autorisie- rungsmechanismen. Diese können dann von XACML übernommen werden. 4.4.4 Einordnung XACML beschreibt, wie eine Autorisierungsentscheidung zustande kommt. Dabei werden in der Spezikation keine Annahmen gemacht, wie sich die Entscheidungen auf die Benutzungsoberäche auswirken. Bei entsprechender Implementierung des PEP und des PDP ist es jedoch vorstellbar, aufgrund der getroenen Entscheidungen einzelne GUI-Komponenten auszublenden bzw. zu (de-)aktivieren und zwar bevor die zu den Komponenten gehörenden Aktionen ausgeführt werden. XACML kann auch innerhalb eines Rich-Clients verwendet werden, da die eXtensible Access Control Markup Language (XACML) 77 Spezikation keine Annahmen darüber macht, wo und wie der PDP zu erreichen ist. Wenn der Policy Enforcement Point bestandteil des Rich-Clients ist, ist es sogar möglich, dass ein Policy Decision Point ebenfalls lokal vorhanden ist. So wäre der Rich-Client ohne Serververbindung in der Lage, Autorisierungsentscheidungen zu treen. Sobald der Server wieder erreichbar ist, können die Policies synchronisiert werden. Es ist ebenfalls denkbar, dass der Server seinen eigenen PDP besitzt. Dieser kann dann nicht nur die eingehenden Synchronisationsanfragen überprüfen, sondern auch direkt von einem Rich-Client angesprochen werden, um ohne weitere Synchronisierung direkt auf den aktuellen Policies zu arbeiten. [SNL06, S.411 ], [Sun] Kapitel 5 Weitergehende Konzepte und Lösungen Kai Meyer Die bisher vorgestellten Autorisierungsmechanismen sind alle bewährt und vielfach eingesetzt. Jedoch beschreibt keines der Konzepte, wie sich die Auswirkungen der Autorisierung sinnvoll in die Benutzungsoberäche integrieren lassen. Die Eclipse RCP bietet über die Plug-In-(De-)Aktivierung (Abschnitt 5.1) eine einfache Möglichkeit für die Autorisierung. Durch diesen Mechanismus wird, die in Abschnitt 3.1.5 diskutierte Variante des Verstecken von Interaktionsobjekten realisiert. Unter bestimmten Umständen, die in dem noch kommenden Abschnitt Auswirkungen unterschiedlicher Systemanforderungen (5.3) näher erläutert werden, ist dieses Vorgehen allerdings nicht ratsam. Für diese Fälle wurde im Zuge dieser Diplomarbeit von den Autoren das Konzept der Security-Facade (Abschnitt 5.2) erstellt. Dieses Konzept erlaubt eine exible Anbindung der Benutzungsoberäche, die sich für jedes zu schützende Interaktionsobjekt individuell kongurieren lässt. 5.1 Plug-In-(De-)Aktivierung Torsten Witte Die Plug-In-Architektur von Eclipse erlaubt die Auswahl der Plug-Ins, die in eine RCP-Anwendung integriert sein sollen. Dies ist nicht nur für die Entwicklung von Produkten interessant, sondern ebenso für die Benutzerautorisierung. Durch die Kontrolle, welche Plug-Ins in einer Anwendung aktiv sein dürfen, wird automatisch kontrolliert, welche Registerbeiträge in ihr Erweiterungsregister gelangen. Somit werden gleich zwei Ziele erreicht: Zum einen ist der, vor der Ausführung zu schützende, Code nicht die Anwendung integriert und zum anderen tauchen nur die Beiträge der bewilligten Plug-Ins 78 Plug-In-(De-)Aktivierung 79 in der Benutzungsoberäche auf. Bei Verwendung der Plug-In-(De-)Aktivierung bietet sich eine Rechtevergabe auf Plug-In-Ebene an. Dies ist ein Alles oder Nichts-Prinzip, denn entweder hat eine Rolle Zugri auf ein komplettes Plug-In oder nicht. Dabei müssen bei der Zuordnung von Rechten die Abhängigkeiten der Plug-Ins untereinander beachtet werden. Es ergibt sich zwangsläug eine hierarchische Berechtigungsordnung, da keine Rolle die Berechtigung für ein Plug-In haben kann, ohne die Berechtigung auf dessen benötigte Plug-Ins zu besitzen. Dementsprechend müssen Plug-In- und Rechte-Hierarchie aufeinander abgebildet werden können. Dieser Umstand ist bereits bei der Entwicklung der Plug-Ins für eine RCP-Anwendung zu berücksichtigen und kann bei Integration fremder Plug-Ins auf Schwierigkeiten stoÿen. Für die Umsetzung dieses Konzeptes gibt es verschiedene Möglichkeiten. Drei davon werden im weiteren Verlauf dieser Arbeit vorgestellt: Der Ansatz von Berthold Daum (Abschnitt 6.1), Eclipse-JAAS (in Abschnitt 6.2) und eine Eigenentwicklung der beiden Autoren (Dienstplaner-Projekt, Kapitel 7). Jede dieser Realisierungen hat ihre Vor- und Nachteile und ist für einen anderen Einsatzkontext mehr oder weniger sinnvoll. Auch müssen die Konsequenzen beachtet werden, die sich aus der gewählten Methode ergeben. Die hier vorgestellten Umsetzungen haben gemeinsam, dass der Benutzer sich beim Starten der Anwendung anmeldet und ihm daraufhin nur die gewährten Plug-Ins zugesprochen werden. Für einen Wechsel der Rolle ist stets ein Neustart der Anwendung notwendig. Laut OSGi-Spezikation ist das Hinzufügen und Entfernen von Bundles zu einer Anwendung während des laufenden Betriebes möglich. Also auch ein Rollenwechsel ohne Neustart der Anwendung, da Plug-Ins nachgeladen oder entfernt werden können. Das wird in den hier vorgestellten Realisierungen jedoch nicht behandelt. Allerdings liegt genau in dieser Oenheit der Plattform eine Sicherheitslücke. Im Fall der Eclipse RCP können über die OSGi-Konsole (siehe Anhang B.2.2) jederzeit weitere Plug-Ins in die Anwendung integriert werden. Keine der drei hier genannten Umsetzungen überwacht oder unterbindet die nach dem Anwendungsstart eingespielten Plug-Ins. Also kann nachdem die Autorisierung und damit die Deaktivierung einiger Plug-Ins stattgefunden hat, diese wieder rückgängig gemacht werden. Um diese Sicherheitslücke zu schlieÿen, sollte entweder verhindert werden, die jeweilige Eclipse RCPAnwendung mit der OSGi-Konsole zu starten, oder besser, auf Änderungen an dem Erweiterungsregister gehorcht werden, um entsprechend zu reagieren. Teil 2 - Theorie 80 5.2 Security-Facade Kai Meyer Da die Granularität der Berechtigungen bei der Plug-In-(De-)Aktivierung für manche Anwendungskontexte zu grob ist, haben die Autoren im Zuge dieser Diplomarbeit das Konzept der Security-Facade erstellt. Das Konzept be- schreibt einen Autorisierungsmechanismus, der sich direkt auf die grasche Benutzungsoberäche auswirkt. Ferner erlaubt es eine sehr feine Struktu- rierung der Berechtigungen, da es den Schutz einzelner Code-Blöcke unterstützt. Zudem können beliebige Interaktionsobjekte individuell den aktuellen Berechtigungen des Benutzers angepasst werden. Zusätzlich ermöglicht das Konzept, die Berechtigungen zur Laufzeit zu editieren, was sich dann ebenfalls umgehend auf die Benutzungsoberäche auswirkt. Die wichtigsten Komponenten sind in Abbildung 5.1 dargestellt: Abbildung 5.1: Komponenten der Security-Facade • Die Security-Facade Kern des Konzeptes. bildet zusammen mit den Executables den Die Executables beinhalten neben einem Be- zeichner die zu schützenden Code-Blöcke. Die Bezeichner dienen der Identizierung eines Executables und für die spätere Ermittlung der benötigten Rechte zu dessen Ausführung. Die erstellten Executables werden jedoch nur dann aufgerufen, wenn es die Security-Facade erlaubt. Diese Entscheidung wird mit Hilfe des User- und Rights-Managements getroen. • Das User-Management dient der Anbindung des Authentizierungs- mechanismus. Darüberhinaus referenziert es den zur Zeit angemeldeten Benutzer und welche Berechtigungen er besitzt. Das User-Management ist auch dafür verantwortlich, einen Wechsel des Benutzers sowie Veränderungen seiner Rechte an die Security-Facade und andere registrierte Security-Facade 81 Stellen zu melden, z.B. durch Verwendung eines Beobachter-Musters (siehe [GHJV95, 287 ]). Die Berechtigungen werden in Form von Right-Sets festgehalten. • Das Rights-Management verwaltet die für die Ausführung jedes Exe- cutables benötigten Rechte. Diese können aus einem persistenten Speicher (Datenbanken, XML-Dateien, LDAP, . . . ) bezogen werden. Die Referenzierung der benötigten Rechte für ein Executable erfolgt über dessen Bezeichner. Auch dieses Management arbeitet auf den RightSets. Des Weiteren benachrichtigt das Rights-Management die SecurityFacade und andere Instanzen über Änderungen der geforderten Rechte für die Bezeichner. • Ein Right-Set besteht aus einer Menge von Rechten und einem Be- zeichner. Der Bezeichner kann entweder der Name eines Benutzers oder der Bezeichner eines Executables sein. Es ist ebenso möglich, dass die Bezeichner komplexe Objekte sind. Für einen Benutzer repräsentiert das Right-Set die ihm gewährten Berechtigungen im System, während ein Right-Set zu einem Executable den geforderten Rechten entspricht. Über die eingesetzten Bezeichner kann ein Right-Set eindeutig einem Benutzer oder einem Executable zugeordnet werden. Die Verwendung der Right-Sets im User- und Rights-Management vereinfacht die Ermittlung der Berechtigungen in der Security-Facade. • Das Activation-Management und die Activation-Adapter dienen der Anpassung der Benutzungsoberäche. Eine genauere Beschreibung dieser Komponenten erfolgt später. Die Executables werden also nicht direkt mit den Berechtigungen belegt, sondern lediglich mit einem Bezeichner versehen. Ein Administrator weist nur den Bezeichnern die benötigten Berechtigungen zu. Durch Vergabe des selben Bezeichners an mehrere Executables können Funktionsgruppen erstellt werden. Somit sind entweder alle Executables einer Gruppe ausführbar oder keines von ihnen. Wie aus dem Datenussdiagramm in Abbildung 5.2 zu ersehen, ermittelt die Security-Facade bei einer eingehenden Anfrage nach einem Executable zunächst die gewährten Berechtigungen des aktuellen Benutzers vom UserManagement. Anschlieÿend werden die geforderten Rechte für den Bezeichner des Executables vom Rights-Management erfragt. Ergibt sich bei dem Vergleich der beiden Right-Sets eine Übereinstimmung, erlaubt die SecurityFacade die Ausführung des Executables. Teil 2 - Theorie 82 Abbildung 5.2: Security-Facade-Datenuss Die geforderte Anbindung der Benutzungsoberäche wird über das vation-Management erreicht. Acti- Es nutzt die schon vorhandenen Bezeichner und die Security-Facade. Das Activation-Management erlaubt, beliebige Objekte zusammen mit einem Bezeichner und einem Activation-Adapter zu registrieren. Diese Objekte können sowohl existierende oder selbst erstellte Interaktionsobjekte aber auch Verbindungen zu Datenbanken oder anderen Diensten sein. Die registrierten Objekte werden abhängig von den geforderten Rechten für den Bezeichner und den gewährten Rechten des Benutzers (de-)aktiviert. Das Wissen, auf welche Weise das Objekt aktiviert bzw. deaktiviert werden soll, ist im zugehörigen Activation-Adapter gekapselt. Wechselt der Benutzer oder werden Rechte neu zugewiesen, erfährt dies das Activation-Management auf die gleiche Weise wie die Security-Facade. Daraufhin kann es alle registrierten Objekte den neuen Bedingungen entsprechend anpassen. Somit besteht die Möglichkeit, nicht nur die Ausführung eines bestimmten Code-Blocks zu verhindern, sondern ebenso das zugeordnete Interaktionsobjekt, gemäÿ den in Abschnitt 3.1 geschilderten Varianten, zu markieren. Es folgt ein kleines Beispiel, das verdeutlicht, wie die einzelnen Komponenten verwendet werden: Eine Anwendung beinhaltet eine sensible Funktion, die über eine Schaltäche auf der graschen Benutzungsoberäche erreichbar ist. Um diese Funktion zu schützen, wird der betreende Code innerhalb eines Executables mit dem Bezeichner Exec1 implementiert. Die Schaltäche ruft nun bei Betätigung über die Security-Facade das Executable auf. Damit ist diese Funktion vor unberechtigter Ausführung geschützt. Soll dem Benutzer eine optische Rückmeldung über die aktuellen Berechtigungen gegeben werden, muss lediglich diese Schaltäche zusammen mit einem Activation-Adapter und dem Bezeichner Exec1 beim Activation- Auswirkungen unterschiedlicher Systemanforderungen 83 Management angemeldet werden. Wird ein Activation-Adapter verwendet, der das Interaktionsobjekt sperrt, kann die Schaltäche nur dann betätigt werden, wenn auch das Executable ausgeführt werden kann. Darf die Funktion nicht ausgeführt werden, ist auch die Schaltäche gesperrt. Um das Interaktionsobjekt zu verstecken, muss ein Activation-Adapter verwendet werden, der die Sichtbarkeit der Schaltäche steuert. Die Abbildung 5.3 beschreibt, wann welche Nachrichten verschickt werden, um die beim Activation-Management registrierten Objekte bei einem Benutzerwechsel oder bei Veränderungen der Berechtigungen den aktuellen Gegebenheiten anzupassen. Abbildung 5.3: Security-Facade-Datenuss mit Activation-Management 5.3 Auswirkungen unterschiedlicher Systemanforderungen Der Kontext, in dem ein Softwaresystem eingesetzt werden soll, stellt bestimmte Bedingungen an die Anwendung. Diese Anforderungen wirken sich auf die Benutzungsoberäche und die Autorisierungsmechanismen aus. So erlaubt die Verwendung eines Rich-Clients zwar eine reichhaltigere Benutzungsoberäche als ein Thin-Client, aber da der Rich-Client ein Arbeiten ohne Serververbindung fordert, muss auch die Authentizierung und Autorisierung ohne Verbindung zum Server möglich sein. Ebenso ist die Betriebsart der Software entscheidend. Wird der Klient je- desmal neu gestartet, wenn ein Benutzer Aufgaben erledigen möchte, kann es ausreichen, die Berechtigungen nur beim Starten der Anwendung zu überprüfen. Läuft die Anwendung jedoch im Dauerbetrieb, also 24 Stunden an 7 Tagen die Woche, mit wechselnden Benutzern, reicht dies natürlich nicht aus. Es muss dann ein Weg gefunden werden, die Berechtigungen jederzeit Kai Meyer Teil 2 - Theorie 84 aktuell zu halten oder zumindest bei einem erneuten Log-in zu überprüfen. D.h. im Dauerbetrieb sind Autorisierungs-Lösungen, die auf dem Plug-In(De-)Aktivierungs-Konzept (Abschnitt 5.1) aufsetzen nicht praktikabel oder nur mit Zusatzaufwand zu realisieren. Ist die permanente Aktualisierung gefordert kann auch JAAS (Abschnitt 4.3) nicht verwendet werden, da JAAS nur beim Starten die Policy-Datei ausliest und eine nachträgliche Änderung ohne Neustart nicht möglich ist. Eine weitere wichtige Rahmenbedingung ist die Granularität der Rechte. Sind die zu schützenden Funktionen groÿ und komplex genug, um sie sinnvoll auf Plug-Ins abzubilden, können Plug-In-(De-)Aktivierungsstrategien durchaus eingesetzt werden. Bei feiner strukturierten Rechten ist dieses Vorgehen nicht zu empfehlen. Stattdessen können XACML (Abschnitt 4.4), JAAS oder die Security-Facade (Abschnitt 5.2) eingesetzt werden. Selbst Vorgaben für die Gestaltung der Benutzungsoberäche können die Wahl des Autorisierungsmechanismus beeinussen. Wird für eine möglichst konstante GUI gefordert, dass sämtliche Funktionen und Optionen stets sichtbar sind (nur eventuell gesperrt), kann die Autorisierung ebenfalls nicht über (De-)Aktivierung von Plug-Ins realisiert werden. Auf diese Weise würden die nicht gewährten Elemente in der GUI fehlen. Sind die Geräte der Benutzer nicht sehr leistungsstark (z.B. PDAs, einfache Workstations, usw.) bietet sich hingegen die (De-)Aktivierung der Plug-Ins gerade zu an, da so das laufende Programm möglichst wenig Speicherplatz benötigt. Dies wird durch den in der Eclipse RCP verwendeten Lazy Loading-Mechanismus noch unterstützt. Gerade bei sehr fein strukturierten Rechten kann die Handhabung unübersichtlich und somit auch die Administration erschwert werden. Dem entgegen wirken kann die Verwendung von RBAC (Abschnitt 4.1) oder LDAP (Abschnitt 4.2). Aufgrund der verschiedenen Anforderungen an ein Softwaresystem gibt es keine universell einsetzbare Autorisierungsstrategie. Je nach geforderter Granularität der Rechte, Darstellungsrichtlinien für die Benutzungsoberäche und Betriebsart der Software bieten sich unterschiedliche AutorisierungsKonzepte an. Kapitel 6 Bestehende Lösungen für Eclipse Dieses Kapitel greift die in Abschnitt 3.3 angesprochenen Autorisierungs- Torsten Witte methoden für die Eclipse RCP auf. Hier wird ihre Funktionsweise und Realisierung vorgestellt. Des Weiteren werden sie auf ihre Tauglichkeit untersucht und ihre Eigenschaften ermittelt, um sie miteinander vergleichen zu können. 6.1 Rollenabhängige Plug-Ins Wie bereits in Abschnitt 3.3 genannt, stellt Berthold Daum in [Dau05b] eine Variante für die Realisierung von Benutzerautorisierung in Eclipse RCPs vor. Hauptsächlich macht er dies, um zu demonstrieren wie Plug-Ins programmgesteuert (de-)aktiviert bzw. RCP-Anwendungen nur mit bestimmten Plug-Ins gestartet werden können. Die Situation in seiner Beispielanwendung ist folgende: Jeder Benutzer besitzt eine oder mehrere Rollen. Jeder Rolle kann eine oder mehrere Per- spektiven zugeordnet sein. Wenn einem Benutzer mehrere Perspektiven zur Verfügung stehen, soll der Benutzer zwischen den für ihn zugelassenen Perspektiven umschalten können. Für die Auswahl von Perspektiven bietet sich die Standard-Perspektivenleiste von Eclipse an. Das Problem ist, dass diese stets alle registrierten Perspektiven verwaltet. Eine Lösung für dieses Problem ist die programmgesteuerte (De-)Aktivierung von Plug-Ins, um deren Perspektiven aus der Extension-Registry zu entfernen. Wird jede Perspektive durch ein eigenes Plug-In implementiert und werden je nach Benutzerrolle nur die wirklich benötigten (und zugelassenen) Plug-Ins aktiviert, so kann die normale Eclipse-Perspektivenleiste für die Auswahl der Perspektiven verwendet werden. 85 Torsten Witte Teil 2 - Theorie 86 Für die Realisierung dieser Problemlösung deniert Berthold Daum in com.bdaum.planner seines Projektplaners einen Extension-Point namens com.bdaum.planner.roles. Über diesen Extensiondem Anwendungs-Plug-In Point wird eine Perspektiven-Rollen-Zuordnung ermöglicht. Gleichzeitig wird eine Zuordnung zwischen Rolle und Plug-Ins getroen. Ein Plug-In, das zu diesem Erweiterungspunkt beiträgt, gibt den Namen einer (ggf. neuen) Rolle an, welche Perspektive erlaubt ist und ggf. initial geönet werden soll und welche Plug-Ins für diese Rolle zugelassen sind. Die folgende plugin.xml des Supervisor-Plug-Ins zeigt dies am Bei- spiel der Supervisor -Rolle. Supervisor verwalten innerhalb des Projektplaners die Projektressourcen. Projektpläne dürfen sie dagegen nicht erstellen. Das dürfen nur Benutzer in der Planer -Rolle. Als initiale Perspektive für Supervisor wird daher die in dem Plug-In denierte Supervisor-Perspektive gesetzt. Diese Perspektive enthält die ebenfalls deklarierte ResourceView. Die zulässigen Plug-Ins sind das Supervisor-Plug-In selbst sowie das passende Hilfe-Plug-In. <?xml version="1.0" encoding="UTF−8"?> <?eclipse version="3.0"?> <plugin> <extension point="org.eclipse.ui.views"> <category name="Supervisor" id="com.bdaum.planner.supervisor"> </category> <view name="Resources" icon="icons/sample.gif" category="com.bdaum.planner.supervisor" class ="com.bdaum.planner.supervisor.views.ResourceView" id="com.bdaum.planner.supervisor.views.ResourceView"> </view> </extension> <extension point="org.eclipse.ui. perspectives"> <perspective class ="com.bdaum.planner.supervisor.Perspective" xed="true" id="com.bdaum.planner.supervisor.perspective" name="Supervisor"/> </extension> <extension point="com.bdaum.planner.roles"> <role name="Supervisor"> <perspective id="com.bdaum.planner.supervisor.perspective" initial ="true"/> <plugin id="com.bdaum.planner.supervisor"/> Rollenabhängige Plug-Ins 87 <plugin id="com.bdaum.planner.supervisor.help"/> </role> </extension> </plugin> Die plugin.xml des TaskPlanner-Plug-Ins ist analog dazu aufgebaut. Nur wird dort die Planer-Rolle deniert, die TaskPlanner-Perspektive als initiale Perspektive festgelegt und das TaskPlanner-Plug-In selbst sowie dessen Hilfe-Plug-In der Planer-Rolle zugeordnet. Alle Plug-Ins, die der Benutzer aufgrund seiner Rollen nicht verwenden darf, müssen nun von der Anwendung ausgeschlossen werden. in der Application-Klasse Dies wird des Anwendungs-Plug-Ins erledigt, also direkt beim Start der Anwendung. Für die Deaktivierung und Deinstallation von Plug-Ins gibt es die Bundle-Methoden stop() und uninstall() schnitt 2.3.2). public class Application implements IPlatformRunnable { public Object run(Object args) throws Exception { // Benutzer muss sich anmelden und authentiziert werden Display display = PlatformUI.createDisplay(); Shell topLevelShell = new Shell(display, SWT.NONE); LoginDialog dialog = new LoginDialog(topLevelShell); dialog .open(); topLevelShell. close (); // Der aktuelle Benutzer wird in der PlannerPlugin−Klasse gehalten User user = PlannerPlugin.getDefault().getUser(); if (user == null) // Shutdown return IPlatformRunnable.EXIT_OK; // Update durchführen, falls nötig UpdateAction updateAction = new UpdateAction(); updateAction.run(null); if (updateAction.isRestart()) // Restart return IPlatformRunnable.EXIT_RESTART; // Einmal alle Rollen laden und merken, bevor einige Plugins // deaktiviert werden. Dies wird für den Administrator benötigt, // der ALLE Rollen verwalten muss. PlannerPlugin.getAllRoles(); // Plugins deaktivieren , die nicht zugelassen sind // (abhängig von den Rollen des Benutzers) congureSystem(user.roles ); (siehe Ab- Teil 2 - Theorie 88 try { int returnCode = PlatformUI.createAndRunWorkbench(display, new ApplicationWorkbenchAdvisor()); if (returnCode == PlatformUI.RETURN_RESTART) { return IPlatformRunnable.EXIT_RESTART; } } return IPlatformRunnable.EXIT_OK; } nally { display .dispose (); } private void congureSystem(Collection roles) { // Alle Plugins, die Benutzerrollen zugeordnet sind Set<String> allNegotiableBundles = new HashSet<String>(); // Alle Plugins, die den aktiven Benutzerrollen zugeordnet sind Set<String> activeBundles = new HashSet<String>(); // Erweiterungsregister IExtensionRegistry registry = Platform.getExtensionRegistry(); // Rollendenitionen durchlaufen for (ICongurationElement role : registry . getCongurationElementsFor("com.bdaum.planner", "roles")) { // Bestimmen, ob eine gegebene Rolle aktiv ist boolean active = roles.contains(role .getAttribute("name")); for (ICongurationElement plugin : role .getChildren("plugin")) { // zugeordnetes Plugin allNegotiableBundles.add(plugin.getAttribute("id")); if (active) activeBundles.add(plugin.getAttribute("id")); } } // Nicht erlaubte Plugins entfernen BundleContext context = PlannerPlugin.getDefault().getContext(); for (Bundle bundle : context.getBundles()) { String id = bundle.getSymbolicName(); if (allNegotiableBundles.contains(id) && !activeBundles.contains(id)) { try { // Eigentlich nicht notwendig, da noch kein Plugin läuft bundle.stop(); } catch (BundleException e) { } try { bundle.uninstall (); } catch (BundleException e) { } } } Rollenabhängige Plug-Ins } 89 } Beim Start der Anwendung wird der Benutzer aufgefordert, sich mit Benutzernamen und Passwort einzuloggen. In-Klasse des Anwendungs-Plug-Ins ein Im Erfolgsfall enthält die Plug- User-Objekt. Dieses User-Objekt enthält neben dem Benutzernamen auch eine Liste mit den Namen aller bewilligten Rollen. Schlieÿlich werden in der configureSystem()-Methode alle Plug-Ins von der Anwendung ausgeschlossen, die mindestens einer Rolle zugeordnet sind, aber keine dieser Rollen vom aktuellen Benutzer eingenommen werden darf. Somit bleiben nur die Plug-Ins installiert, die entweder gar keiner Rolle oder mindestens einer Rolle des aktiven Benutzers zugeordnet sind. Plug-Ins von Drittanbietern können also weiterhin in die Anwendung integriert werden, obwohl sie nicht den role-Erweiterungspunkt erweitern. Dies kann abhängig vom Einsatzkontext ein Vor- oder Nachteil sein, widerspricht jedoch der Erlaubnisregel, da grundsätzlich alle Fremd-Plug-Ins für jeden Benutzer verfügbar sind (vgl. Abschnitt 1.8). Die configureSystem()-Methode ist so implementiert, dass mehrere Plug- Ins zu der selben Rolle beitragen können. Die Information, welche Plug-Ins von einer Rolle genutzt werden dürfen, muss also nicht in einem einzigen Plug-In untergebracht sein. Somit lassen sich vorhandene Rollen jederzeit um neue Plug-Ins für zusätzliche Funktionalitäten oder Aufgabenbereiche erweitern, ohne existierende Plug-Ins anpassen zu müssen. Allerdings müssen die Zugehörigkeiten von Plug-Ins zu Rollen bereits zur Entwicklungszeit bekannt sein und können im späteren Betrieb nur über Manipulation der jeweiligen plugin.xml verändert werden. Dementsprechend können die Zugehörigkeiten nicht zur Laufzeit konguriert werden. Zusätzlich muss bei der Zuordnung von Plug-Ins zu Rollen darauf geachtet werden, dass die von einem Plug-In vorausgesetzten Plug-Ins generell oder zumindest für dieselbe Rolle verfügbar sind. Ansonsten kann das Plug-In nicht aufgelöst werden. Damit ein Benutzer von einem neuen Recht Gebrauch machen kann, ist ein Neustart und ein Update der Anwendung nötig (wie in der der Application-Klasse zu sehen ist). run()-Methode Dies reicht in einigen Einsatzgebieten aus. Beim Entzug von Rechten fällt dieser Umstand allerdings schwerer ins Gewicht. Solange ein Benutzer seine Anwendung nicht neu startet, kann er mit Plug-Ins arbeiten, für die er keine Berechtigung mehr besitzt. Ein Neustart der Anwendung ist auch für einen einfachen Rollenwechsel erforderlich. Plug-Ins, die für die neue Rolle erlaubt sind, könnten beim vorherigen Log-in deinstalliert worden sein und sind über die Extension-Registry nicht mehr verfügbar. Teil 2 - Theorie 90 Berthold Daum erkennt diese Probleme und schreibt: [. . . ] Allerdings wird die Verwaltung der Konguration durch ein solches Vorgehen erschwert. Ändern sich die Zuordnungs- regeln, so müssen Plugins aktualisiert werden. Auÿerdem ist, wenn bestimmte Features deaktiviert sind, nicht mehr alle Kongurationsinformationen sichtbar. Eine exiblere Möglichkeit ist die Denition einer eigenen Kongurationsdatei (z.B. im XMLFormat). Eine solche Datei kann leicht zwischen Server und Client ausgetauscht werden. Sie muss natürlich lokal auf dem Klienten gespeichert werden, um auch im Oine-Fall verfügbar zu sein. Die Auswertung kann dann über einen Kongurationsmanager erfolgen, der vom Anwendungs-Plugin aus erreichbar sein sollte. Hier können bei kommerziellen Projekten auch Lizenzen geprüft werden, wenn bestimmte Funktionen abhängig von der jeweiligen Lizenz sind. Es versteht sich, dass auch die Kongu- rationsdateien digital signiert sein sollten, um Manipulationen vorzubeugen. [Dau05b, S.456] Auf genauere Anfrage zu seinem vorgestellten Ansatz antwortet Daum: [. . . ] Dass diese Art der Rollenzuordnung für die Praxis zu starr ist, versteht sich. In der Regel wird man eher mit einer separaten Kongurationsdatei arbeiten, und zur Laufzeit statt der ExtensionRegistry diese Kongurationsdatei auswerten. So arbeitet z.B. der IBM Workplace Managed Client [. . . ], eine kommerzielle Erweiterung der Eclipse Rich Client Platform. Sie sorgt insbesondere dafür, dass rollenbasierte Desktops im Zusammenspiel mit den IBM Workplace Collaboration Services zentral verwaltet und konguriert werden können. [E-Mail von B. Daum an T. Witte] Die komplette Beispiel-Anwendung ist in [Dau05b] beschrieben und kann unter [Dau] heruntergeladen werden. Zusammenfassung Dieser Ansatz eignet sich für Anwendungen, in denen die Anforderungen folgendes zulassen: Eclipse-JAAS 91 Kriterium Eigenschaft Autorisierungs-Ebene Plug-Ins Filterregel Verbotsregel GUI-Anpassung verstecken, über Plug-In-Mechanismus Rollen-/Rechtezuordnung sehr starr, zur Entwicklungszeit, nicht durch Anwender Anpassung an veränderte Rechte erst nach Neustart des Clients, Update notwendig [Dau05b, S.15, S.22, S.74, S.260, S.453 ] 6.2 Eclipse-JAAS Eclipse-JAAS macht sich ebenfalls das Plug-In-Konzept von Eclipse zu Nutze. Das Framework erweitert die Eclipse RCP so, dass der Java Authentication and Authorization Service zur Authentizierung und Autorisierung von Benutzern verwendet wird. LoginModule und CallbackHandler können über Erweiterungspunkte kombiniert und konguriert werden. Dies erlaubt einen hohen Freiheitsgrad bei der Auswahl der Authentizierungs-Technologie, z.B. von einem einfachen Log-in-Dialog über Smartcards bis zu FingerabdruckScannern. Die Autorisierung ndet auf Plug-In-Ebene statt. Ob ein Benutzer (in seiner Rolle) für ein Plug-In autorisiert ist, wird über das eingeloggte Subject und die jeweilige Plug-In-Id entschieden. Das geschieht in einem oder mehreren Exemplaren des Types IPluginAuthorization. Der Benutzer erhält Zugri auf ein Plug-In, falls ihm eines dieser Exemplare die Erlaubnis erteilt. Die Grundlage, auf der das jeweilige IPluginAuthorization-Exemplar seine Entscheidung trit, ist freigestellt. Sie kann hart codiert sein oder eine externe Datei, ähnlich der Policy-Datei bei JAAS, zu Rate ziehen. Auch die Anfrage bei einer Datenbank oder einem Verzeichnisdienst ist denkbar. Die IPluginAuthorization-Exemplare werden über einen Erweiterungspunkt in die Anwendung eingebunden. Welche Plug-In-Ids auf Benutzerberechtigung abgefragt werden, wird ebenfalls über Erweiterungen angegeben. Eclipse-JAAS sieht eine strikte Trennung von Kern- und rollenspezischen Plug-Ins vor, um die Autorisierung und die Verteilung der Plug-Ins zu vereinfachen. Zu den Kern-Plug-Ins zählen: • Das Plug-In, das die RCP-Anwendung deniert • Das Plug-In, das den Code für die Authentizierung über JAAS enthält, die Orte der rollenspezischen Plug-Ins auistet (siehe unten) und die Autorisierung für diese Plug-Ins übernimmt Torsten Witte Teil 2 - Theorie 92 • Alle allgemein verwendeten Library-Plug-Ins • Alles, was von allen Benutzern verwendet werden darf, unabhängig von deren Rolle Die rollenspezischen Plug-Ins enthalten die Geschäftslogik, die nur von bestimmten Benutzerrollen verwendet werden darf. Diese Plug-Ins werden separat aufgeboten (deployed), z.B. auf einem HTTP-Server. Von ihnen werden bei jedem Start der RCP-Anwendung nur die Plug-Ins installiert und gestartet, für die der Benutzer berechtigt ist. Die übrigen Plug-Ins bleiben lediglich (auf dem Server) aufgeboten. Wo sich die rollenspezischen Plug-Ins genau benden, wird als URL über Erweiterungen bzw. System-Properties angegeben. An dieser Stelle werden bereits einige Schwächen dieser Vorgehensweise deutlich. Wenn die rollenspezischen Plug-Ins auf einem separaten Server liegen, zu dem zum Startzeitpunkt der Rich-Client-Anwendung keine Verbindung besteht, stürzt die Anwendung zwar nicht zwangsläug ab, sondern wird ohne die rollenspezischen Plug-Ins ausgeführt. Dies behindert aber dennoch den Benutzer bei seiner Arbeit, falls ihm genau diese Plug-Ins fehlen. Ein gröÿeres, sicherheitsrelevantes Problem ist, dass bei der Autorisierung die Erlaubnisregel nicht umgesetzt ist. Alle Plug-Ins, die sich im lokalen plugin -Verzeichnis der RCP-Anwendung benden, sind unweigerlich in die Anwendung eingebunden. Da es zusätzlich ausreicht, dass nur eines der IPluginAuthorization-Exemplare die Erlaubnis für die Verwendung eines Plug-Ins gibt, kann nachträglich mühelos ein Plug-In integriert werden, das grundsätzlich den Zugri auf alle Plug-Ins erlaubt. Die Oenheit der Eclipse RCP für Erweiterungen birgt also eine Sicherheitslücke in sich. Wie bei JAAS auch, fehlt hier die Benachrichtigung und die automatische Anpassung an wechselnde Berechtigungen zur Laufzeit. Sobald ein Benutzer ein weiteres Plug-In verwenden darf oder ihm die Berechtigung für die Verwendung eines Plug-Ins entzogen wird, muss die RCP-Anwendung neu gestartet werden. Ansonsten sind die neuen Plug-Ins nicht in die Anwendung eingebunden und die alten Plug-Ins immer noch für den Benutzer verfügbar. Dennoch ist die Verbindung des in Java vorhandenen Java Authentication and Authorization Service und der Eclipse RCP eine gute Idee. Besonders für die Benutzerauthentizierung lohnt sich der Einsatz. Auf Seiten der Autorisierung besteht allerdings noch Entwicklungsbedarf. Die Verwendung in einer eigenen RCP-Anwendung ist sehr einfach, da EclipseJAAS nur an einer Stelle direkt im Code zwischen die Eclipse RCP und die Capabilities (Activities) in Eclipse 93 eigene RCP-Anwendung integriert wird. Anstatt im RCP-Plug-In das Interface IPlatformRunnable direkt zu implementieren, braucht nur von deren JaasApplication geerbt werden. Das Starten der Workbench geschieht von da an über Subject.doAs(...). Alles weitere (LoginModule, CallbackHandler usw.) wird deklarativ über Erweiterungen abstrakten Implementierung eingebunden und beeinusst nicht den Code der eigenen Anwendung. Das hier vorgestellte Konzept beruht auf der Version 1.0.0 von EclipseJAAS, das unter [Eclc] verfügbar ist. In Anhang C.4 bendet sich eine Beispielanwendung, der auch ein Plug-In zur Umgehung der Benutzerautorisierung beigefügt ist. Des Weiteren ist dort beschrieben, wie die Autorisierung mit Hilfe der OSGi-Konsole (Anhang B.2.2) umgangen werden kann. Zusammenfassung Eclipse-JAAS besitzt folgende Eigenschaften: Kriterium Eigenschaft Autorisierungs-Ebene Plug-Ins Filterregel Verbotsregel GUI-Anpassung verstecken, über Plug-In-Mechanismus Rollen-/Rechtezuordnung Fest codiert oder exibel über XMLDateien, Datenbank oder Verzeichnisdienst. Dadurch auch durch Anwender kongurierbar. Anpassung an veränderte Rechte erst nach Neustart des Clients [Eclb], [Bar05], [Bar07] 6.3 Capabilities (Activities) in Eclipse Seit Eclipse 3.0 wird eine Skalierung der Benutzungsoberäche unterstützt. D.h. die Benutzungsoberäche kann an die jeweilige Arbeitsaufgabe an- gepasst werden. gabe relevant. Nicht jede Funktionalität ist für die aktuelle ArbeitsaufGroÿe, unübersichtliche Menüs werden somit klein gehal- ten und dadurch übersichtlicher. Für die Skalierung lassen sich Menüs und Menüeinträge, Werkzeugleisten und deren Einträge, Views, Editoren, Perspektiven, Preference- und Property-Pages sowie Wizards logisch in Gruppen zusammenfassen. Diese Gruppierung kann nach Funktionalität (JavaEntwicklung, Plug-In-Entwicklung) oder Benutzererfahrungen (Einfach, Torsten Witte Teil 2 - Theorie 94 Erfahren, Experte) stattnden. Die einzelnen Gruppen können manu- ell vom Benutzer oder auch programmgesteuert in der Benutzungsoberäche ein- und ausgeblendet werden. Zur Realisierung dieser Filterung der Benutzungsoberäche werden pabilities verwendet. Ca- Ursprünglich wurde jedoch die Bezeichnung Activi- ties gewählt. Der Begri Capability wurde erst eingeführt, nachdem bei der Entwicklung von Eclipse 3.0 erkannt wurde, dass Activity bereits an anderer Stelle verwendet wird. Um Verwirrung zu vermeiden, wurden also in der Dokumentation und in der Benutzungsoberäche Activities in Capabilities umbenannt, aber aus Kompatibilitätsgründen der Extension-Point org.eclipse.ui.activities und die bestehende API beibehalten. Sowohl Perspektiven als auch Capabilities unterstützen das aktuelle Interessengebiet eines Benutzers und beziehen sich auf seine jeweilige Arbeitsaufgabe. Während Perspektiven das Layout der Oberäche, d.h. die Anordnung von Views, Editoren usw., bestimmen und den einfachen Zugri auf häug benötigte Funktionalitäten ermöglichen, sind Capabilities für die Filterung nicht relevanter Funktionalität zuständig. Und zwar solange, bis der Be- nutzer ausdrücklich ein Interesse an der Verwendung dieser Funktionalitäten äuÿert. Die Aufgabe der Erstellung von Capabilities ist für Produkt-Entwickler vorgesehen. Sie sind dafür verantwortlich, Plug-Ins so zusammenzustellen, dass sie sinnvoll miteinander arbeiten. Daher verstehen sie, wie die Plug-Ins zusammen verwendet werden, und können am besten deren Funktionalitäten in Gruppen fassen. Plug-In-Entwickler dagegen haben meist nur ihr eige- nes Plug-In im Fokus. Die Erstellung und Verwaltung von Capabilities wird durch ein Entwickler-Werkzeug erleichtert, welches bei [Khe04] zu nden ist. Die Eclipse-IDE besitzt z.B. die Capability Java Development. Sie beinhaltet sämtliche Funktionen für die Java-Entwicklung. Wenn diese Capability abgeschaltet ist, ist die Mehrheit dieser Funktionalitäten vor dem Benutzer versteckt. Java-Views tauchen nicht mehr in dem Show View-Menü auf, Java-Präferenzen sind nicht mehr in den Präferenzen sichtbar usw. Alle Capabilities können von dem Benutzer über Preference Pages konguriert sowie ein- und ausgeschaltet werden. Damit die Benutzer sich nicht merken müssen, wann sie welche Capability (de-)aktivieren müssen, um an die gewünschten Funktionen zu kommen, können tet werden. Trigger Points eingerich- Trigger Points sind z.B. Aktionen, die als Einstiegspunkt in einen neuen/anderen Aufgabenbereich dienen. Wird so ein Trigger Point ausgelöst, wird die zugehörige Capability aktiviert und deren Beiträge in der Benutzungsoberäche angezeigt. Auch die Capability Java Development besitzt solche Trigger Points. Dabei Capabilities (Activities) in Eclipse 95 handelt es sich um die kleine Menge der Funktionen, die für die Entwicklung von Java-Anwendungen nötig sind und stets in der GUI sichtbar bleiben, selbst wenn die Capability Java Development abgeschaltet ist. Über diese Trigger Points bekundet der Benutzer ausdrücklich sein Interesse an den zusätzlichen Funktionalitäten der Java Development -Capability. Der New Java Project-Eintrag in dem New-Wizard ist so ein Trigger Point. Sollte der Benutzer ein neues Java-Projekt anlegen, werden die übrigen Java Funktionalitäten sofort sichtbar und für den Benutzer verfügbar. Schlieÿlich wird er sie zur weiteren Entwicklung seines Projektes benötigen. Des Weiteren können einzelne Capabilities untereinander in Beziehung stehen. So werden bei Aktivierung einer Capability ebenfalls alle Capabilities aktiviert, von denen die aktuelle Capability abhängig ist. Beispielsweise macht die Capability Plug-In Development ohne Java Development keinen Sinn, da Plug-Ins in Java geschrieben werden. Das Konzept der Skalierung der Benutzungsoberäche über Capabilities lässt sich auch auf Benutzerrollen übertragen. In den Eclipse-Newsgroups wird dies häug vorgeschlagen. Anstatt eine Capability Java Development oder Plug-In Development anzulegen, ist eine Capability Administrator, Gast, Rolle A oder Rolle B denkbar. Auf diese Weise können in der Benutzungsoberäche bestimmte Erweiterungen nur bestimmten Benutzern mit der jeweiligen Rolle angezeigt werden. Da Capabilities für die Produktentwicklung gedacht sind, brauchen die einzelnen Rollen bei der Entwicklung der Plug-Ins noch nicht bekannt sein und berücksichtigt werden. Allerdings ist zu beachten, dass diese Vorgehensweise ohne weitere Mechanismen keine Sicherheit bietet. Die einzelnen Funktionen sind lediglich aus der Benutzungsoberäche ausgeblendet, der Code bleibt in der Anwendung enthalten und kann potenziell jederzeit ausgeführt werden. Ein Plug-In, dass Preference Pages zum Umschalten von Capabilities zu der Anwendung hinzufügt, ist schnell geschrieben. Eclipse bietet diese Präferenz-Seiten bereits an, d.h. sie können ohne viel Aufwand eingebunden werden (siehe Quell- code 6.1). Die Ids der einzelnen Capabilities sind leicht zu ermitteln, um alle Capabilities in einer Kategorie zusammenzufassen und in den PräferenzSeiten anzuzeigen. Die Integration des neuen Plug-Ins in die Anwendung ist ebenfalls kein Problem, da es nur in das plugins -Verzeichnis eingefügt werden braucht. Teil 2 - Theorie 96 Quellcode 6.1: plugin.xml eines Plug-Ins, das Preference Pages für Capabilities einbindet <?xml version="1.0" encoding="UTF−8"?> <?eclipse version="3.2"?> <plugin> ... <extension point="org.eclipse.ui.preferencePages"> <page class ="org.eclipse . ui . activities .ActivityCategoryPreferencePage" id="MyPlugin.capabilitiesPreferencePage" name="Capabilities"> </page> <page class ="org.eclipse . ui . activities .ActivitiesPreferencePage" id="MyPlugin.advancedCapabilitiesPreferencePage" name="Advanced Capabilities Settings"> </page> </extension> </plugin> Die CD zu dieser Arbeit enthält eine Beispiel-Anwendung, die Kimberly Horne auf der EclipseCon 2005 zur Demonstration von Benutzerautorisierung über Capabilities vorgestellt hat (siehe Anhang C.5). Das Projekt beinhaltet ein Anwendungs-Plug-In, das die beiden Benutzerrollen Employee und Manager über Capabilities umsetzt. Ein Employee verfügt über weniger Views als ein Manager. Dabei setzt die Manager-Capability die EmployeeCapability voraus, d.h. alles was ein Employee darf, darf auch ein Manager. Das Beispiel veranschaulicht, wie die einzelnen Views über Id-Muster von den beiden Capabilities geltert werden. Diese Muster werden in der Form <Plug-In-Id>/<Contribution-Id> angegeben. So gehören alle Views, deren Id dem Muster .*/man\..* entsprechen, zu der Manager-Rolle. Eine ge- nauere Erläuterung zu diesen Patterns ist in [Hor06] enthalten. Zusätzlich enthält das Beispiel ein von dem Autor dieses Abschnittes geschriebenes Plug-In, mit dem der Autorisierungsmechanismus umgangen werden kann. Dieses Plug-In wurde ohne Einblick in den Quellcode der RCPAnwendung von Kimberly Horne entwickelt. Zusammenfassung Capabilities sind aus folgenden Gründen für die Benutzerautorisierung interessant: • Einzelne Teile von Plug-Ins sind vor dem Benutzer verborgen oder für ihn sichtbar (nicht entweder das gesamte Plug-In oder gar nichts) Capabilities (Activities) in Eclipse • 97 Geltert werden: Neu-, Import-, Export-Wizards; die Show ViewsListe; die Open Perspective-Liste; Werkzeugleisten-, Menü-Beiträge; Präferenz-, Eigenschafts-Seiten; Editoren; Suche; Hilfe • Abhängigkeiten bzw. Hierarchien zwischen Capabilities sind denierbar (activityRequirementBinding) • Die Gruppierung von Capabilities in Kategorien ist möglich (categoryActivityBinding) • Standardmäÿig sind alle Capabilities deaktiviert (defaultEnablement) • Erstellungszeitpunkt erst bei der Produkt-Entwicklung Der reine Capability-Ansatz eignet sich ohne weitere Mechanismen aus folgenden Gründen nicht für Benutzerautorisierung: • Bietet kaum Sicherheit, da lediglich eine Ausblendung der jeweiligen (Menü-)Einträge stattndet • Capabilities sind jederzeit wieder freischaltbar, z.B. durch ein neues Plug-In oder Preference Pages • Einmal aktive Capabilities können nicht zurückgenommen werden • Aktueller Zustand der Capabilities bleibt nach dem Ausschalten der Anwendung erhalten • Rollen stehen nach der (Produkt-)Entwicklung fest, d.h. sie können ohne in den Quellcode einzugreifen nicht verändert werden • Nicht auf einzelne Interaktionsobjekte wie Buttons oder Textfelder anwendbar Kriterium Eigenschaft Autorisierungs-Ebene Actions, Views, Editoren, Wizards, usw. Filterregel Verbotsregel GUI-Anpassung verstecken, über Capability- Mechanismus Rollen-/Rechtezuordnung sehr starr, zur (Produkt-)Entwick- lungszeit, nicht durch Anwender Anpassung an veränderte Rechte erst nach Neustart des Clients, Update notwendig [Hor05a], [Hor05b], [Hor06], [HM04], [Cre04] Teil 2 - Theorie 98 6.4 Fazit Torsten Witte Bei Verwendung der Plug-In-(De-)Aktivierung ist eine Trennung von Kernund rollenspezischen Plug-Ins, wie sie in Abschnitt 6.2 beschrieben ist, durchaus sinnvoll. Ebenso ist es wichtig, dass die Erlaubnisregel umgesetzt wird, da sonst eine Umgehung der Autorisierung durch Fremd-Plug-Ins auf einfache Weise möglich ist. Der Capability-Ansatz bietet ohne weitere Si- cherheitsmechanismen keine ausreichende Sicherheit für die Benutzerautorisierung. Abschlieÿend darf nicht vergessen werden, dass die Autorisierung hier nur auf dem Client stattndet. Der Server muss ebenso stets vor unberechtigtem Zugri geschützt sein, so dass alle vertraulichen und sicherheitsrelevanten Funktionen nur von autorisierten Benutzern ausgeführt werden können. Die Umsetzung der Benutzerautorisierung auf der Serverseite ist besonders wichtig, wenn die Schnittstelle (API) des Servers veröentlicht wird und beliebig viele Clients entwickelt werden können. Teil III Praktischer Teil 99 Teil 3 - Praxis 100 Kai Meyer und Torsten Witte Der dritte Teil dieser Arbeit widmet sich der Umsetzung konkreter Projekte, in denen Benutzerautorisierung eine Rolle spielt. Dabei werden die in den vorherigen Kapiteln diskutierten Aspekte berücksichtigt. Bereits vorgestellte Konzepte und Methoden werden verwendet, verbessert oder an das jeweilige Projekt angepasst. Konsequenzen, die sich durch die Umsetzung in den jeweiligen Projekten ergeben, werden angesprochen und diskutiert. Alle Projekte setzen auf der Eclipse Rich-Client-Platform auf und zeigen, dass die erstellten Konzepte realisierbar sind. Begonnen wird mit dem Dienstplaner-Projekt, welches das Konzept der Plug-In-(De-)Aktivierung verfolgt und die Erkenntnisse aus den Ansätzen von Berthold Daum und Neil Bartlett aufgreift. Anschlieÿend wird ein Taschenrechner vorgestellt, bei dem die Benutzer nur bestimmte Operationen durchführen dürfen. Dazu wird die Security-Facade implementiert. Der Taschenrechner dient als Vorlage für das Control System Studio (CSS), welches das darauf folgende Kapitel füllt. Das Besondere am CSS-Projekt ist, dass dort eine einheitliche Infrastruktur für verschiedene Anwendungen im CSS-Rahmen entwickelt wird. Zu diesen Anwendungen zählt das Synoptic Display Studio, welches für Entwickler und Benutzer sogenannter synoptischer Displays gedacht ist. Für die eigens erstellten Interaktionsobjekte innerhalb der Displays können zur Laufzeit Berechtigungen vergeben werden. Als Abschluss dieser Arbeit wird am Ende dieses Teils nochmals auf die Kernfrage eingegangen und die erzielten Ergebnisse zusammengefasst. Kapitel 7 Dienstplaner Der Dienstplaner ist eine Eigenentwicklung der beiden Autoren. Das Projekt befasst sich mit der Entwicklung eines Softwaresystems für ein Alten- und Pegeheim. Die Anwendung soll bei der Erstellung der monatlichen Dienstpläne für die Bereiche Pege, Küche und Reinigung unterstützen. Dazu gehört auch die Verwaltung der einzelnen Mitarbeiter, Bewohnerzahlen, Dienstzeiten, Ferien, Feiertage, Freistellungsanträge und nicht zuletzt der Dienstpläne selbst. Das Personal soll an seinem jeweiligen Arbeitsplatz, z.B. dem Stationszimmer, jederzeit die Dienstpläne einsehen, Freistellungsanträge stellen und Notizen hinterlegen können. Der Dienstplanersteller muss u.a. die Anzahl der Heimbewohner, die Notizen des Personals und die von der Heimleitung genehmigten Freistellungsanträge berücksichtigen. Die Benutzer der Anwendung schauen aus unterschiedlichen Sichten auf die einzelnen Dokumente wie Dienstpläne und Freistellungsanträge und dürfen jeweils nur bestimmte Teile dieser Materialien bearbeiten. Daher müssen die Benutzer für die einzelnen Aufgaben wie das Anlegen und Erstellen von Dienstplänen oder dem Genehmigen von Freistellungsanträgen autorisiert werden. Diese Berechtigungen müssen nicht zwingend statisch sein. Es kann vorkommen, dass einem Benutzer Rechte entzogen werden oder er kurzfristig ein zusätzliches Recht erhält, z.B. weil ein Kollege krank geworden ist und dessen Aufgaben trotzdem erledigt werden müssen. Das Projekt verfügt derzeit über einen weit fortgeschrittenen Prototypen, + der als Pilotsystem (siehe [Z 98, 637 ]) eingesetzt werden kann. Dieser Prototyp setzt den hier beschriebenen Entwurf für die Benutzerautorisierung vollständig um. 101 Torsten Witte Teil 3 - Praxis 102 7.1 Konzept Torsten Witte Der Dienstplaner wurde auf Basis der Eclipse RCP entwickelt und setzt für die Benutzerautorisierung das Konzept der Plug-In-(De-)Aktivierung um (siehe Abschnitt 5.1). Rechte werden also auf Plug-In-Ebene vergeben und beziehen sich auf den Zugri auf Plug-Ins, d.h. ein Benutzer kann sämtliche oder gar keine Funktionen eines Plug-Ins verwenden. Bei der Entwicklung dieses Systems sind die Ansichten von Berthold Daum und Neil Bartlett mit eingeossen. Die Eigenschaften ihrer Ansätze wurden wie in den Abschnitten 6.1 und 6.2 herausgearbeitet, um sie zu nutzen oder zu verbessern. Das so entstandene Ergebnis wird in den folgenden Abschnitten vorgestellt. 7.1.1 Plug-In-Struktur Bereits bei der Erstellung der Architektur zu dieser RCP-Anwendung wurde das Konzept der Plug-In-(De-)Aktivierung für die Benutzerautorisierung berücksichtigt. So gibt es neben dem Anwendungs-Plug-In Hilfs- und LibraryPlug-Ins, die von allen Benutzern verwendet werden dürfen. Ins bilden die Gruppe der Kern-Plug-Ins. Diese Plug- Alle übrigen Plug-Ins repräsen- tieren eine Funktionalität bzw. ein Werkzeug zur Erledigung einer (Teil-)Arbeitsaufgabe und lassen sich in weitere Gruppen einteilen: Für die Erstellung neuer Dokumente gibt es die Erzeuger-Plug-Ins. Jedes dieser Plug-Ins ist für die Erzeugung neuer Exemplare eines Dokumenttypes verantwortlich. Da es vorkommt, dass verschiedene Benutzer(-rollen) die selbe Ansicht auf ein Dokument besitzen, doch der eine Benutzer das Dokument bearbeiten darf und der andere nicht, sind weitere Plug-Ins in Betrachtungs- und Bearbeitungs-Plug-Ins eingeteilt. Um Logik nur einmal zu implementieren und vorhandenen Code wiederverwenden zu können, bauen die Bearbeitungs-Plug-Ins auf den Betrachtungs-Plug-Ins auf. Dadurch sind sie eng miteinander gekoppelt. Betrachtungs-Plug-Ins können ohne entsprechendes Bearbeitungs-Plug-In verwendet werden. Bearbeitungs-Plug-Ins verwenden oder erweitern jedoch einige Java-Klassen eines Betrachtungs-PlugIns, nämlich genau um die Editier-Funktionen. Daher können BearbeitungsPlug-Ins nicht ohne ihr Betrachtungs-Plug-In ausgeführt werden. In Abbildung 7.1 sind diese Plug-In-Abhängigkeiten am Beispiel von Dienstplänen grasch dargestellt. In Bezug auf die Autorisierung tauchen an dieser Stelle keine Konikte auf. Wenn ein Benutzer das Recht besitzt, einen Dokumenttyp (z.B. Dienstpläne) zu bearbeiten, dann darf er die Dokumente auch ansehen und lesen (zumindest den Ausschnitt, den ihm das Betrachtungs-Plug-In bietet). Durch diese Zuweisung der Plug-In-Verantwortlichkeiten kann Benutzern mit- Dienstplaner 103 Abbildung 7.1: Dienstplaner: Plug-In-Struktur tels der Plug-In-(De-)Aktivierung das Werkzeug für die Erzeugung, die Betrachtung und die Bearbeitung von Dokumenten gegeben oder entzogen werden. Alle Plug-Ins, die von mindestens einem Benutzer verwendet werden dürfen, sind auf einer Update-Site (siehe Abschnitt 2.5) innerhalb des lokalen Netzwerkes aufgeboten. Dabei sind alle Plug-Ins, die für die Ausführung der RCP-Anwendung unabdingbar sind und von jedem Benutzer verwendet werden dürfen, in einem Kern-Feature zusammengefasst. Dieses Feature deckt sich mit der Gruppe der Kern-Plug-Ins. Weitere, rollenspezische Plug-Ins sind dagegen in separaten Features untergebracht. Diese Art der Einteilung der Plug-Ins in Features ist zwar nicht zwingend notwendig, erleichtert dem Administrator jedoch die Arbeit, wie später in Abschnitt 7.1.3 gezeigt wird. 7.1.2 Funktionsweise Direkt nach dem Start des Clients wird auf der Update-Site (sofern erreichbar) nach verfügbaren Updates für bereits lokal installierte Plug-Ins sowie nach neuen Plug-Ins gesucht und ggf. installiert (siehe Abschnitt 2.5). Anschlieÿend muss der Benutzer sich über einen Log-in-Dialog authentizieren. Nach erfolgreicher Anmeldung werden die Ids aller erlaubten Plug-Ins für diesen Benutzer ermittelt. Dies geschieht über eine Anfrage bei einer Datenbank auf dem zentralem Server. Nun werden alle Plug-Ins gestoppt und deinstalliert, für die der Benutzer nicht berechtigt ist und die nicht von gewährten Plug-Ins vorausgesetzt werden. Somit verbleiben auf der Plattform nur die Plug-Ins für die der Benutzer berechtigt ist und die er zu deren Ausführung benötigt. Erst dann wird die Workbench gestartet und der Benutzer kann Teil 3 - Praxis 104 mit seiner Arbeit beginnen. Die Abbildungen 7.2 und 7.3 zeigen Auszüge von der Benutzungsoberäche mit vollen und eingeschränkten Zugrisrechten. Es ist deutlich zu erkennen, dass Benutzer nur die Funktionen zu sehen bekommen, die sie auch durchführen dürfen. (a) Vollzugri (b) Eingeschränkter Zugri Abbildung 7.2: Dienstplaner: Menüleiste Für einen Benutzer(-rollen)wechsel ist jeweils ein Neustart der Clientanwendung nötig. Dadurch werden die einzelnen Plug-Ins und Berechtigungen aktuell gehalten. Der Benutzer verfügt immer nur über die Plug-Ins, für die er beim Start der Anwendung autorisiert ist. 7.1.3 Benutzerverwaltung und Rechtevergabe Abbildung 7.4 zeigt die Benutzungsoberäche für die Verwaltung von Benutzern und deren Berechtigungen. Im Gegensatz zu RBAC (Abschnitt 4.1) sind die Benutzer(-objekte) intern nicht über Rollen mit ihren Rechten verknüpft, obwohl die Benutzer natürlich innerhalb des Systems unterschiedliche Rollen einnehmen. Stattdessen sind die Zugrisrechte auf die Plug-Ins direkt an die Benutzer(-objekte) gebunden. Auf diese Weise ist der Administra- tor in der Lage, einem einzelnen Benutzer direkt das Zugrisrecht auf ein Plug-In zu entziehen oder zu gewähren. Dadurch ist die Autorisierung auch für Krankheits- oder Urlaubsfälle exibel, bei denen ein Benutzer kurzzeitig Dienstplaner 105 (a) Vollzugri (b) Eingeschränkter Zugri Abbildung 7.3: Dienstplaner: Kontextmenü (Teil-)Aufgaben eines anderen Benutzers erledigen muss. Ein weiterer Grund für die direkte Anbindung ist, dass in diesem Anwendungskontext die Anzahl der Benutzer überschaubar und jeder Benutzer persönlich bekannt ist. Welche Plug-Ins ein Benutzer letztendlich verwenden darf, wird in einer zentralen Datenbank auf dem Server in Form der gewährten Plug-In-Ids festgehalten. Die einfache und exible Unterstützung der Rechtevergabe ist durch die Bildung von Rechtemustern und Benutzergruppen gegeben. Rechtemuster dienen als vorgefertigte Schablonen für die Rechtevergabe und können in Anlehnung an RBAC auch als Rollen verstanden werden. Ihre Verwendung ist vorteilhaft für das Anlegen mehrerer (Einzel-)Benutzer, die ähnliche Berechtigungen benötigen, oder für den einfachen Wechsel von Rollen unter den Mitarbeitern des Heimes. Rechtemuster enthalten eine Menge von gewährten Plug-Ins und können individuell erstellt und unter einem Namen abgespeichert werden. Bei der Zuweisung von Rechten an einen Benutzer können diese Muster aufgerufen werden, so dass der Benutzer nur die Rechte aus dem Muster zugewiesen bekommt. Anschlieÿend können die Rechte des Benutzers unabhängig von dem verwendeten Muster jederzeit erweitert oder eingeschränkt werden. Dies erleichtert dem Administrator die Arbeit, denn er muss sich nicht merken, welche Rechte ein Mitarbeiter in einer Rolle erhalten muss und braucht ihm nicht die Berechtigung für jedes Plug-In einzeln zu geben. Die Auswahl des betreenden Musters reicht aus. Darüber hinaus vergisst der Administrator nicht, einem Benutzer den Zugri auf Plug-Ins Teil 3 - Praxis 106 Abbildung 7.4: Rechtevergabe im Dienstplaner zu entziehen, wenn er dessen Berechtigungen mit Hilfe von Rechtemustern an eine andere Rolle anpasst. In Abbildung 7.4 ist für den Benutzer Donald Duck das Rechtemuster Pegepersonal mit den entsprechenden Berechtigungen ausgewählt. Neben Einzelbenutzern unterstützt das System auch Benutzergruppen. So können mehrere Benutzer gleichzeitig unter einem Gruppenbezeichner angemeldet sein. Zwar geht dadurch die genaue Information verloren, welcher Benutzer aus dieser Gruppe ein Dokument bearbeitet hat, aber da es sich hier nur um kleine Gruppen handelt und das jeweilige Bearbeitungsdatum mit Uhrzeit im Dokument gespeichert wird, lässt sich der Bearbeiter anhand seiner Dienstzeiten in den meisten Fällen zurückverfolgen. Dies reicht Dienstplaner 107 innerhalb dieses Projektes aus. Am sinnvollsten ist der Einsatz von Benutzergruppen für Benutzer, die keine Bearbeitungsrechte besitzen. Der Vorteil von Benutzergruppen ist, dass der Administrator nicht jeden Benutzer einzeln verwalten muss. Für jedes Gruppenmitglied gelten die selben Berechtigungen. Wie bei allen rollenspezischen Funktionalitäten ist auch die Benutzerverwaltung in eigene Plug-Ins aufgeteilt. So hat nur ein Administrator, bzw. ein Benutzer, der autorisiert ist, Berechtigungen zu vergeben, Zugri auf diese Plug-Ins. Dieses Zugrisrecht kann ein Administrator auch an andere Benutzer weitergeben oder von ihnen entziehen. Dabei ist sichergestellt, dass mindestens ein Benutzer den Zugri auf diese Plug-Ins besitzt und Rechte vergeben kann. bzgl. Innerhalb dieses Projektes ist die Frage aus Abschnitt 1.7 der Vorgehensweise beim Entzug von weitergereichten Rechten auf- grund der überschaubaren Anzahl von Benutzern so beantwortet worden, dass die weitergereichten Rechte bestehen bleiben. D.h. wenn Administrator A Benutzer B das Zugrisrecht auf das Rechtevergabe-Plug-In erteilt und B daraufhin anderen Benutzern weitere Rechte gibt, dann bleiben diese Berechtigungen bestehen, auch wenn A das Recht der Rechtevergabe von B wieder entzieht. Damit der Administrator stets den Überblick über alle verfügbaren PlugIns besitzt und er selbst nicht für alle Plug-Ins autorisiert sein muss, arbeiten die Plug-Ins für die Rechte- und Rechtemusterverwaltung auf der Update-Site für das System. Von dort werden die einzelnen Features und deren enthaltenen Plug-Ins ausgelesen und auf der Benutzungsoberäche in Form einer Baumstruktur dargestellt. Die sinnvolle Einteilung der Plug-Ins in einzelne Features sorgt also für einen besseren Überblick und unterstützt den Administrator bei der Benutzerautorisierung. So kann er z.B. ohne Bedenken allen Benutzern alle Plug-Ins aus dem Kern-Feature erlauben. Veränderungen an den Berechtigungen eines eingeloggten Benutzers werden zur Laufzeit des Clients nicht berücksichtigt. So kann der Benutzer seine begonnene Arbeit zu Ende führen und bekommt erst nach erneuter Anmeldung die neuen Berechtigungen zugewiesen. Nachdem der Administrator die Berechtigungen eines Benutzers an neue Gegebenheiten angepasst hat, ist er jedoch in der Lage, einzelne oder alle aktiven Clientanwendungen zu benachrichtigen und ggf. herunterzufahren. Dadurch erzwingt er eine sofortige Aktualisierung der Plug-Ins und Berechtigungen auf Clientseite. Somit kann der Administrator verhindern, dass Benutzer mit Plug-Ins arbeiten, zu denen sie keine Berechtigung mehr besitzen. Teil 3 - Praxis 108 7.2 Fazit Torsten Witte Die vorgestellte Architektur nutzt das vorhandene Plug-In-Konzept dazu, die Anforderungen an die Benutzerautorisierung exibel zu erfüllen. Dadurch kann jeder Benutzer nur die ihm zugeteilten Plug-Ins an jedem Rechner in + seiner Arbeitsumgebung (siehe [Z 98, S.86 ]) verwenden, denn auf jedem Clientrechner sind immer alle Plug-Ins installiert, die auf der Update-Site verfügbar sind. Ein Administrator ist in der Lage, die Zugrisrechte sowohl für bereits vorhandene als auch für neu verfügbare Plug-Ins zu vergeben und anzupassen. Da die RCP-Anwendung oen für Erweiterungen ist, muss sichergestellt sein, dass keine unerwünschten Fremd-Plug-Ins in die Anwendung gelangen. Durch die Umsetzung der Erlaubnisregel ist grundsätzlich die Verwendung aller (Fremd-)Plug-Ins verboten. Nutzer können zwar auf ihren Arbeitsrechnern neue Plug-Ins in die Anwendung integrieren, z.B. durch Hineinkopieren in das plugins -Verzeichnis. Diese werden jedoch während des Autorisierungsvorgangs wieder aus der Anwendung entfernt. Ein Administrator muss explizit die Erlaubnis für die Nutzung der Plug-Ins erteilen und sie auf der Update-Site bereitstellen. Durch die nötigen Neustarts der Clientanwendung beim Benutzerwechsel und dem Zusammenspiel zwischen der Benutzerautorisierung und der Update-Site bleibt stets eine aktuelle Autorisierung auf den Clients gewährleistet. Theoretisch ist ein Umgehen des Autorisierungsmechanismus zwar möglich, nämlich durch Austauschen eines bereits gewährten Plug-Ins durch eines mit gleicher Id. Dies kann jedoch durch Signieren der einzelnen Plug-Ins verhindert werden. Wenn sichergestellt wird, dass in der Clientanwendung nur Plug-Ins gestartet werden, die von bestimmten Personen oder Instanzen signiert sind, können keine Fremd-Plug-Ins unter falscher Id ausgeführt werden. Auch das Einbinden von Plug-Ins nach dem Autorisierungsvorgang, z.B. über die OSGi-Konsole, muss überwacht und verhindert werden. Die Intergration eines einzelnen Plug-Ins des Dienstplaners in eine andere RCP-Anwendung wird durch die starke Abhängigkeit zu dem DienstplanRCP- Plug-In erschwert. Die Information, welcher Benutzer welches Plug-In ausführen darf, kann zusätzlich auf Clientseite in einer signierten, verschlüsselten und durch eine Prüfsumme gesicherten Datei festgehalten werden. So ist ein Start der Anwendung ausschlieÿlich mit den gewährten Plug-Ins auch ohne Serververbindung möglich. Diese Datei muss bei erneuter bestehender Serververbindung stets aktualisiert werden. Da Eclipse standardmäÿig die letzte Konguration der Clientanwendung vor deren Beendigung speichert, um sie beim erneuten Start wieder herzustel- Dienstplaner 109 len, tauchen bei einem Rollenwechsel ggf. Probleme auf. Grundsätzlich ist aus gebrauchstauglicher Sicht der Software nichts gegen die Wiederherstellung der zuletzt verwendeten Ansicht, d.h. der zuletzt aktiven Perspektive mit allen zuletzt geöneten Views und Editoren, einzuwenden. So ndet der Benutzer die Anwendung stets so vor, wie er sie verlassen hat. Doch da hier mehrere Benutzer die selbe Anwendung nutzen und es nun vorkommen kann, dass ein Plug-In, das genau diese Perspektive, eine der Views oder den Editor bereitstellt, für die neu angemeldete Benutzerrolle nicht verfügbar ist, kann Eclipse die Konguration nicht reproduzieren. So erscheint ein Hinweisfenster mit der Meldung, dass das zuletzt verwendete Layout der Workbench nicht wieder hergestellt werden konnte. Um dies zu umgehen, gibt es die einfache Möglichkeit, die letzte Konguration stets zu löschen und immer mit der Willkommensseite oder einer Standard-Perspektive zu starten. Aus gebrauchstauglicher Sicht ist die Variante, die zuletzt verwendete Konguration benutzerabhängig zu speichern und wieder herzustellen allerdings die bessere Wahl. Wenn Benutzergruppen eingesetzt und deren Berechtigungen nur sehr selten verändert werden, wird die Anzahl der wechselnden Log-ins und der damit verbundenen Neustarts des Clients gering gehalten. So kann z.B. im Stationszimmer den ganzen Tag lang ein Benutzer unter der Benutzergruppe Pege eingeloggt sein und das gesamte Pegepersonal darunter arbeiten. Die Entwicklung neuer Plug-Ins für den Dienstplaner ist technisch gesehen unabhängig von dem hier verwendeten Autorisierungsmechanismus. Es müssen bei der Entwicklung der Plug-Ins keine speziellen Java-Klassen oder Erweiterungspunkte verwendet werden. Wichtig ist lediglich die Abbildung der einzelnen Arbeitsaufgaben und -abläufe auf Plug-Ins. Die Erlaubnis für den Einsatz der Plug-Ins kann später aus der Anwendung heraus individuell vergeben werden, wenn die Plug-Ins auf der Update-Site aufgeboten werden. Die beschriebene Plug-In-Struktur verhindert darüber hinaus die Duplizierung von Code. Zur weiteren Unterstützung des Administrators fehlt zum Erstellungszeitpunkt dieser Arbeit eine automatische Ermittlung bzw. Überprüfung der jeweils benötigten Plug-Ins bei der Rechtevergabe, wie sie aus der Startkonguration oder dem Update-Manager in der Eclipse-IDE bekannt ist (siehe Anhang B.2.1). Darüber wäre der Administrator in der Lage, bereits bei der Vergabe von Rechten die Konguration der Plug-Ins zu überprüfen und herauszunden, ob der Benutzer für alle benötigten Plug-Ins eines gewährten Plug-Ins ebenfalls autorisiert ist. Teil 3 - Praxis 110 7.3 Zusammenfassung Torsten Witte Mit Hilfe der von der Eclipse RCP gelieferten Möglichkeiten wie dynamische (De-)Aktivierung von Plug-Ins, automatischen Updates bereits installierter Plug-Ins und Installation neuer Plug-Ins sowie Verwendung einer UpdateSite, gelingt es, Benutzerautorisierung sinnvoll zu realisieren. Der hier umgesetzte Ansatz greift zuvor diskutierte Aspekte von Berthold Daum und Neil Bartlett auf, vereint sie miteinander und nutzt deren Eigenschaften und Vorteile. Damit wurde folgendes Ergebnis erreicht: Kriterium Eigenschaft Autorisierungs-Ebene Plug-Ins Filterregel Erlaubnisregel GUI-Anpassung verstecken, über Plug-In-Mechanismus Rollen-/Rechtezuordnung exibel, durch Anwender kongurierbar Anpassung an veränderte Rechte erst nach Neustart des Clients, Update notwendig; Neustart des Clients kann erzwungen werden Da die gesamte Dienstplaner-Anwendung sehr umfangreich ist, haben die Autoren darauf verzichtet, das Projekt auf der beiliegenden CD zur Verfügung zu stellen. Kapitel 8 Taschenrechner Der in diesem Kapitel beschriebene Taschenrechner dient als Beispielim- plementierung des in Abschnitt 5.2 vorgestellten Konzepts zur Benutzerautorisierung (Security-Facade). Er wurde auch als funktioneller Prototyp (siehe + [Z 98, 637 ]) bei der Entwicklung des DESY -Projektes Control System Studio (CSS) verwendet. Das Programm wurde auf Grundlage der Eclipse RCP erstellt, doch ist die Implementierung des Konzeptes unabhängig von Eclipse. Somit ist die reine Java-Implementierung auch auÿerhalb der Eclipse RCP verwendbar. Für die im Taschenrechner umgesetzte Benutzerautorisierung lässt sich folgender Einsatzkontext zugrunde legen: Die Schüler einer Schule dürfen einen Taschenrechner für die in ihrer Klassenstufe (Klasse 1-4) bereits behandelten Rechenarten benutzen. Die Lehrer dürfen alle Operationen durchführen, unabhängig von der von ihnen betreuten Klassen. Der Administrator des Taschenrechners ist darüber hinaus in der Lage, Rechte zu vergeben bzw. zu entziehen. Der Taschenrechner bietet diverse mathematische Funktionen an. Diese Funktionen dürfen allerdings nur ausgeführt werden, wenn der aktuelle Benutzer die geforderten Rechte besitzt. Meldet sich ein Benutzer an, werden die Schaltächen für die Rechenoperationen seinen Berechtigungen entsprechend freigegeben. Zudem kann der Taschenrechner auftretende Ereignisse in einer eigenen View anzeigen. Zu diesen Ereignissen gehören Benutzerwechsel oder die Ausführung einer geschützten Funktion. Der Funktionsumfang des Taschenrechners ist erweiterbar, so können PlugIns von Drittanbietern zusätzliche mathematische Operationen hinzufügen. 111 Kai Meyer Teil 3 - Praxis 112 8.1 Konzept Kai Meyer Die im Konzept der Security-Facade (Abschnitt 5.2) beschriebenen Komponenten und deren Zusammenspiel werden im Taschenrechner 1:1 umgesetzt. Der Taschenrechner an sich benutzt diese Klassen, deniert allerdings ein eigenes, domänenspezisches Executable (OperationExecutable), das das AbstractTypedExecutable erweitert. Die angebotenen matheOperationExecutables realisiert und von SecurityFacade geschützt. allgemeine matischen Operationen werden als der Wie in Abbildung 8.1(a) zu erkennen ist, erscheinen auf der Benutzungso- (a) vor Log-In (b) nach Log-In Abbildung 8.1: Benutzungsoberäche des Taschenrechners beräche links die Schaltächen für die Ziern, das Komma und eine Schaltäche, um die letzte Stelle der Eingabe zu löschen. Rechts bendet sich das Feld für die Rechenoperationen. Sofern kein Benutzer angemeldet ist, sind die Operationen nicht ausführbar und somit auch die Schaltächen für diese Operationen gesperrt. Benutzerwechsel sind über bereitgestellte Menüein- träge ohne Neustart der Anwendung möglich. Wird ein Benutzer mit Hilfe UserManagements durch Eingabe seines Benutzernamens und Passwortes authentiziert, benachrichtigt es das ActivationManagement. Wie im Konzept beschrieben, konguriert das ActivationManagement bei einem Benutdes zerwechsel alle registrierten Objekte gemäÿ den Rechten des Benutzers. Zu den angemeldeten Objekten gehören auch die Schaltächen der Operationen. Auf diese Weise werden die aktuellen Berechtigungen auf der Benutzungsoberäche dargestellt (Abbildung 8.1(b)). Die Abbildung 8.1 zeigt, dass im Taschenrechner die Strategie Sperren von Interaktionsobjekten (Abschnitt 3.1.4) realisiert ist. Dies kann für andere Taschenrechner 113 Projekte leicht durch den Austausch des verwendeten IActivationAdapters verändert werden. Die Sperrung der Interaktionsobjekte dient hier nur dem besseren Überblick des Benutzers, damit er auf einen Blick erkennt, welche Rechenarten er durchführen darf und welche der Taschenrechner noch unterstützt. Ob die hinter den freigegebenen Schaltächen liegenden Executables wirklich ausgeführt werden dürfen (oder nicht), wird zur Sicherheit jedesmal beim Aufrufen der Funktion entschieden. Die im Taschenrechner verwendeten Rechte werden durch den Namen einer Gruppe und eine Rolle repräsentiert. Ein Benutzer mit dem Bezeichner User ist z.B. in den Gruppen Class1 und Class3 in der Rolle Teacher tätig. In Class4 übernimmt er die Rolle des Administrator s. So entsteht für einen Benutzer eine Rechtematrix, wie sie in Abbildung 8.2 dargestellt ist. Die einzelnen Paare von Gruppen und Rollen werden auf Rights abgebildet, die zusammen mit dem Namen des Benutzers oder dem Bezeichner eines Executables ein RightSet ergeben. Abbildung 8.2: Rechtematrix für einen Benutzer im Taschenrechner 8.2 Realisierung Bei der Implementierung der Security-Facade wurde darauf geachtet, dass die Kern-Klassen (SecurityFacade, RightsManagement, UserManagement, ActivationManagement, ActivationAdapter, AbstractExecutable und AbstractTypedExecutable) allgemein bleiben und so mit nur wenigen Änderungen auch in anderen Projekten verwendet werden können. Aus die- sem Grund sind die Plug-Ins des Taschenrechner-Projektes gemäÿ der Abbildung 8.3 strukturiert. Die Aufgaben der einzelnen Plug-Ins sind dabei: • Das Anwendungs-Plug-In (RCP) enthält sämtliche Klassen, die für den Autorisierungsmechanismus zuständig sind. Somit ist die Security- Facade getrennt vom eigentlichen Taschenrechner. Kai Meyer Teil 3 - Praxis 114 Abbildung 8.3: Plug-In-Struktur des Taschenrechners • Das Calculator-Plug-In baut direkt auf dem RCP-Plug-In auf und ent- hält die Kernfunktionalität des Taschenrechners. Zu diesen Funktionen gehört die Bereitstellung der View, der Logik für die Auswertung der Operationen sowie des rechenarten. OperationExecutables und der vier Grund- Zudem bietet es einen Erweiterungspunkt an, der die Anbindung weiterer mathematischer Operationen regelt. • Über den vom Calculator-Plug-In angebotenen Extension-Point in- tegrieren Extending-Plug-Ins weitere konkrete Implementierungen des OperationExecutables, um Rechenoperationen zu dem Taschenrech- ner beizutragen. • Admin-Plug-In regelt die Administration und Überwachung der SecurityFacade. Dafür stellt es eine Message- und eine Rights-View zur Verfügung. Die Message-View stellt die von der SecurityFacade, vom RightsManagement und vom UserManagement verschickten Nachrichten dar. Die Rights-View erlaubt die Editierung der benötigten Das Rechte für die einzelnen Bezeichner und die Editierung der gewährten Rechte der Benutzer. Dies allerdings nur, wenn der aktuelle Benutzer dazu berechtigt ist. Die Abbildung 8.4 zeigt die verwendeten Klassen im Überblick. Die hellgrau hinterlegten Klassen realisieren die Security-Facade und benden sich somit im RCP-Plug-In. Dabei bilden die Klassen im schwarzen Rahmen die Kern-Klassen der Security-Facade. grund sind im Calculator Die Klassen mit dunkelgrauem Hinter- oder einem Extending-Plug-In enthalten. SecurityFacade arbeitet auf den Schnittstellen IRightsManagement IUserManagement. Dies dient dem leichteren Austausch der konkreten Die und Implementierung. Werden andere oder speziellere Implementierungen als die im Taschenrechner angebotenen benötigt, brauchen nur die Klassen bzw. deren Objekte ausgetauscht werden. Um die Arbeit des Administrators zu erleichtern, legen das hier verwendete Taschenrechner 115 Abbildung 8.4: Klassenübersicht des Taschenerechners Rights- und UserManagement neue RightSets im persistenten Speicher an, sobald die Rechte zu einem bisher unbekannten Bezeichner erfragt werden. Dadurch muss der Administrator die verwendeten Bezeichner nicht genau kennen und für jeden einzelnen ein tor über die neu erstellten RightSet anlegen. Um den Administra- RightSets zu informieren, verschicken das Rights- UserManagement Nachrichten. RightSets enthalten allerdings keine Rechte. Was leere RightSets für die Benutzerautorisierung bedeuten, hängt von der verwendeten IEvaluationStrategy (Strategie-Muster, siehe [GHJV95, S.373 ]) ab. In der IEvaluationStrategy wird aufgrund der zum Benutzer und zum Bezeichner gehörenden RightSets die Entscheidung getroen, ob der Beund das Die so entstandenen nutzer die Erlaubnis für den angeforderten Bezeichner besitzt. krete IEvaluationStrategy-Exemplar ten und dort verwendet. Mit Hilfe der Das kon- SecurityFacade gehalIEvaluationStrategy können, wie wird in der bei XACML (Abschnitt 4.4) oder JAAS (Abschnitt 4.3), nicht nur die Rechte, sondern auch Daten des Benutzers oder des Systems in die Auswertung einbezogen werden. So lässt sich auch der in XACML spezizierte Policy Decision Point realisieren. Die im Taschenrechner verwendete IEvaluationStrategy erlaubt den Zu- gri, wenn der Benutzer mindestens ein Recht besitzt, welches von dem betreenden Bezeichner erwartet wird. Es ist aber ebenso vorstellbar, dass der Benutzer alle benötigten Rechte haben muss. In beiden Fällen würden leere RightSets dazu führen, dass keine Übereinstimmung gefunden wer- den kann. Dadurch wird die Erlaubnisregel (siehe Abschnitt 1.8) umgesetzt. Ist dies nicht erwünscht, muss eine Unterscheidung gemacht werden. Ent- Teil 3 - Praxis 116 hält das RightSet zu einer Id, z.B. eines Executables, keine Rechte, kann dieser Bezeichner für jeden Benutzer freigegeben werden. Ist allerdings das RightSet zu einem Benutzer leer, muss entschieden werden, ob er damit al- les ausführen darf oder ob er keine Rechte hat, wie es eigentlich angegeben ist. Für die Persistierung der gewährten bzw. der geforderten Rechte sorgt RightSetIO. Sowohl das Rights- als auch das UserManagement verwenden das RightSetIO, wenn RightSets gelesen oder geschrieben wer- die Klasse den sollen. Der Einfachheit halber werden hier die Daten lediglich in unverschlüsselter Form in Textdateien auf der lokalen Festplatte gespeichert. Dies oenbart Sicherheitslücken, die hier aber nicht weiter berücksichtigt werden sollen, da der Fokus auf der Benutzerautorisierung liegt. Da Editierungen der Textdateien durchgeführt werden können, ohne dass es der Taschenrechner bemerkt, kann es passieren, dass die Benutzungsoberäche nicht mehr zu 100% den tatsächlichen Berechtigungen entspricht. Die Ausführung der Executables ist davon allerdings unbetroen, da die benötigten und gewährten Rechte bei Anfragen stets neu ausgelesen werden. Die Executables AbstractExecutable und AbstractTypedExecutable können zum Schutz von Code-Blöcken eingesetzt werden. Beide implemen- IExecutable, wobei das AbstractExecutable im Gegensatz zum AbstractTypedExecutable keinerlei Eingabe- oder Ausgabewerte hat und z.B. in der SecurityFacade bei der Persistierung der Rechte tieren das Interface verwendet wird. public static void saveRights(nal RightSet[] rightSets ) { if (_rightsManagement != null) {new AbstractExecutable() { protected void doWork() { } _rightsManagement.saveRights(rightSets); public String getExecutableId() { return SAVE_RIGHTS_EXEC_ID; } } } }.execute(); Wie in dem Beispiel zu erkennen ist, entspricht die Erstellung eines Executa- Runnable. Die Ausführung SecurityFacade erfolgen. bles dem aus Java bekannten kann direkt oder über die des Executables Für die Fälle, wo Eingabe- und Ausgabewerte benötigt werden, wurde das AbstractTypedExecutable erstellt, von der auch das OperationExecutable erbt. Diese Executables werden auf die gleiche Weise angesprochen, nur müssen, sofern vorhanden, beim Aufruf von execute() auch die Eingabewerte Taschenrechner 117 übergeben werden. Der Ausgabewert mit dem im angegebenen Typ wird direkt von execute() AbstractTypedExecutable geliefert. AbstractTypedExecutable<Float, Float> additionExec = new AbstractTypedExecutable<Float, Float>() { protected Float doWork(Float... args) { return args[0].oatValue() + args [1]. oatValue (); } public String getExecutableId() { return "Calculator.ADDITION"; } }; Float result = additionExec.execute(5.0F, 6.0F); Die Schaltächen der OperationExecutables werden während des Auf- baus der View für den eigentlichen Taschenrechner auf folgende Weise bei dem ActivationManagement angemeldet: ActivationManagement.getInstance() .registerStandardActivationAdapter(Button.class, ActivationManagement.ENABLE_CONTROL_ADAPTER); for (OperationExecutable operationExec : operations) { Button button = this.createButton(parentComposite, operationExec); ActivationManagement.getInstance() . register (operationExec.getExecutableId(), button); } Der vom ActivationManagement zur Verfügung gestellte ENABLE_CON- TROL_ADAPTER wird für alle Objekte des Typs Button registriert und übernimmt das Sperren der Schaltächen. Wird hier z.B. der ebenfalls bereitgestellte VISIBLE_CONTROL_ADAPTER verwendet, würde die Sichtbarkeit der Schaltächen angepasst. Da es sich in diesem Fall um normale SWT-Buttons handelt, sind die Adapter recht einfach aufgebaut. fen an dem Button lediglich ActivationManagement setEnabled bzw. setVisible Sie ru- auf. Damit das korrekt arbeiten kann, ist es wichtig, dass nach der Registrierung die im Adapter verwendete Methode nicht von anderern Stellen aus aufgerufen wird. Die Verwendung der Standard-ActivationAdapter ist nicht zwingend erforderlich. Es gibt ebenso die Möglichkeit, die Objekte zusammen mit einem eigenen IActivationAdapter anzumelden, der dann statt dem Standard- Adapter verwendet wird. So lässt sich die (De-)Aktivierung gezielt für einzelne Objekte steuern. Menü- und Toolbareinträge werden in vielen Programmen nicht nur abhängig von den Benutzerberechtigungen gesperrt, sondern auch, wenn deren Ausführung im momentanen Systemzustand keinen Sinn macht (z.B. Sortierung einer Liste mit nur einem Eintrag). Daher wurde für die aus Eclipse stam- Teil 3 - Praxis 118 mende Action eine neue Unterklasse (AbstractUserDependentAction) er- stellt, die speziell für die Verwendung in der Security-Facade ausgelegt ist. Mit ihrer Hilfe können Menü- und Toolbareinträge erstellt werden, die vom Kontext abhängen können, aber nur dann verfügbar werden, wenn der Be- AbstractUserDependentAction wird im Taschenrechner z.B. innerhalb der Rights-View eingesetzt. Mit ihr werden Aktionen realisiert, die dem selektierten RightSet ein Recht hinzufügen, entfernen oder alle RightSets speichern. Daher hängen die Actions nicht nur von den Rechten ab, sondern auch davon, ob ein RightSet in der nutzer die geforderten Rechte besitzt. Die Liste selektiert ist (siehe Abbildung 8.5). Diese Aktionen fügen dem selek- (a) ohne Selektion (b) mit Selektion Abbildung 8.5: Verhalten einer gewährten RightSet RightSets. tierten AbstractUserDependentAction ein Recht hinzu, entfernen ein Recht oder speichern alle 8.3 Zusammenfassung Kai Meyer Über die Security-Facade ist eine exible und individuell kongurierbare Benutzerautorisierung mit Anbindung an die Benutzungsoberäche möglich. Durch die Activation-Adapter und den Auswertungsstrategien können viele verschiedene Rahmenbedingungen umgesetzt werden. Aus Sicherheitsgründen sollte allerdings verhindert werden, dass zur Laufzeit oder durch ein Plug-In eines Drittanbieters die IEvaluationStrategy beliebig verändert werden kann. Ansonsten kann die korrekte Strategie durch eine ersetzt werden, die jedem Benutzer vollen Zugri gewährt. Ein Schwachpunkt bei der Realisierung des Taschenrechners sind die Bezeichner der Executables. Gerade bei groÿen Anwendungen mit vielen zu schützenden Code-Blöcken kann die Administration mangels Überblick schwierig sein. Dies ist allgemein ein Problem bei einer feinen Struktur der Rechte. Um dem entgegen zu wirken, bestehen die Bezeichner im Taschenrechner aus dem Plug-In-Namen und dem Namen der dazugehörigen Operation (z.B. Calculator.ADDITION). So wird auch gewährleistet, dass ein Bezeichner aus Taschenrechner 119 einem Plug-In nicht mit einem Bezeichner aus einem anderen Plug-In verwechselt wird. In dieser Beispielanwendung taucht eine bisher unberücksichtigte Schwierigkeit bei der Rechtevergabe auf: Es gibt (mathematische) Funktionen, die durch andere ausgedrückt werden können. So gilt für alle x, y ∈ R: x + y = x − (−y) = x − ((−1) · y) und x : y = x· y1 . Ein Benutzer braucht also nicht unbedingt das Recht Addition oder Division zu besitzen, sofern er berechtigt ist, zu subtrahieren und negative Zahlen zu bilden bzw. zu multiplizieren und den Kehrwert einer Zahl zu bilden. Je mehr Rechenoperationen zu dem Taschenrechner hinzu kommen, desto schwieriger wird die Verwaltung der Berechtigungen, um solche Hintertüren zu vermeiden. Dies kann in groÿen Anwendungen ebenso ein Problem werden. Mit Hilfe der Security-Facade kann nicht verhindert werden, dass in Menüs sichtbar sind. Actions Dies kann aber durch den Einsatz der in Ab- schnitt 6.3 beschriebenen Capabilities behoben werden. Die Aktionen werden als AbstractUserDependentAction realisiert, über die SecurityFacade geschützt und mit Hilfe der Capabilities versteckt. Deren Trigger Points ActivationManagement zusammen mit dem Bezeichner der AbstractUserDependentAction registriert werden. Auf diese Weise wären die Actions nur sichtbar, wenn der Benutzer sie ausführen darf. Selbst wenn können bei dem durch andere Instanzen, z.B. durch die im Abschnitt 6.3 vorgestellte Preference Page, die Capabilities aktiviert werden, können die sichtbar gewordenen Aktionen nicht ausgeführt werden, da sie weiterhin durch die Security-Facade geschützt sind. Mit der konkreten Implementierung der Security-Facade im Taschenrechner wurden folgende Eigenschaften erzielt: Kriterium Eigenschaft Autorisierungs-Ebene Code-Blöcke Filterregel exibel (hier: Erlaubnisregel) GUI-Anpassung exibel (hier: sperren) Rollen-/Rechtezuordnung exibel, durch Anwender kongurierbar Anpassung an veränderte Rechte unmittelbar Das komplette Taschenrechner-Projekt bendet sich auf der beiliegenden CD. Dazu sei auch auf den Abschnitt C.6 im Anhang verwiesen. Kapitel 9 Control System Studio Kai Meyer Ebenso wie der Taschenrechner (Kapitel 8) wird auch im Projekt System Studio (CSS) [CSS] die Security-Facade eingesetzt. Control Das CSS- Projekt wird gemeinsam vom Deutsches Elektronen-Synchrotron (DESY ), der C1-WPS und der Universität Hamburg entwickelt. Es schat eine generische Infrastruktur für verschiedene Kontrollsysteme zur Überwachung und Steuerung der unterschiedlichen Anlagen und Geräte von Teilchenbeschleunigern. Das CSS setzt auf der Eclipse RCP auf und bietet eine Plattform für verschiedene Programme an, zu denen auch das play Studio (SDS) gehört. Synoptic Dis- Das SDS ist für die Erstellung und Verwaltung von synoptischen Displays verantwortlich und wird im Rahmen des CoEUD-Projektes (Componentbased End User Development) [CoE] entwickelt. Unter synoptischen Dis- plays werden Anlagenschaubilder verstanden, die dazu dienen, Anlagen bzw. Prozesse zu überwachen. Die dargestellten Instrumente zeigen Messdaten von bestimmten Geräten an und geben somit einen Überblick über den aktuellen Zustand der betrachteten Anlage bzw. des betrachteten Prozesses. Die Abbildung 9.1 zeigt so ein synoptisches Display. Über die verschiedenen Schieberegler, Schaltächen und Eingabefelder können Einstellungen an den realen Geräten vorgenommen werden. Die Koordinatensysteme im oberen Bereich und die diversen Textfelder zeigen die aktuellen Messdaten dieser Geräte an. Für eine genauere Beschreibung des CSS-Projektes lohnt sich ein Blick in [HWWZ07]. Die Operateure der einzelnen Bereiche vom DESY überwachen mit Hilfe der erstellten Displays die technischen Anlagen. Dabei ist es nicht zwingend erforderlich, dass sie alle Bereiche sehen bzw. Eingabewerte verändern dürfen. Sollte dies doch erforderlich sein, können sich andere Benutzer mit mehr 120 Control System Studio 121 Abbildung 9.1: SDS-Display Rechten kurzfristig im System anmelden, die Einstellungen vornehmen und sich anschlieÿend wieder abmelden. Da das CSS rund um die Uhr in Betrieb ist, kann kein Neustart für den Benutzerwechsel durchgeführt werden. Die Geräte vom DESY werden bereits durch eine zusätzlich Hardware-Schicht vor unzulässigen Einstellungen geschützt. Auf diese Wiese werden fehlerhafte Eingaben verhindert. Daher liegt der Fokus bei der Verwendung eines Autorisierungsmechanismus im CSS/SDS auf der Anpassung der Benutzungsoberäche. So beziehen sich die Rechte der Benutzer auf einzelne Widgets in den synoptischen Displays oder auf die Ausführung einzelner Aktionen. D.h. den Benutzern sollen nur die Widgets in einem Display zur Verfügung stehen, die sie auch benötigen. Da die für das DESY erstellten Programme auch bei anderen Teilchenbeschleunigern eingesetzt werden sollen, ist das CSS und ebenso das SDS gegenüber Anpassungen und Erweiterungen oen. Auf diese Weise können Entwickler beim DESY oder anderen Teilchenbeschleunigern eigene SDS-Widgets oder (Teil-)Programme in das CSS/SDS integrieren. Somit muss der Autorisierungsmechanismus sehr exibel und für die Entwickler einfach zu benutzen sein. Alle diese Anforderungen werden von der Security-Facade erfüllt. Während der Erstellung dieser Arbeit befand sich das CSS/SDS in der Entwicklung. Somit waren einige Fragen, die die Sicherheit betreen, noch nicht vollständig geklärt. Weil die im CSS implementierte Security-Facade auf den für den Taschenrechner (Kapitel 8) erstellten Klassen aufbaut, wird hier die Security-Facade nur in Auszügen behandelt. Teil 3 - Praxis 122 9.1 Konzept Kai Meyer Im CSS wird für die Authentizierung JAAS (Abschnitt 4.3) verwendet. Die Autorisierung erfolgt allerdings ausschlieÿlich über die Security-Facade. Die Elemente in einem synoptischen Display sind keine SWT-Widgets, sondern eigens erstellte Interaktionsobjekte, die für diese Anwendung ausgerichtet sind. Diese Interaktionsobjekte setzen auf dem Graphical Editing Framework (GEF) auf. Somit bestehen die SDS-Widgets gemäÿ dem Model- View-Controller-Ansatz (siehe [SM02] oder [LR06] ab Kapitel 8) aus drei Komponenten: • Das Model hält die Attribute des Widgets, speichert die Werte und überwacht Veränderungen dieser Werte. • • View ist für die grasche Repräsentation verantwortlich Der Controller übernimmt die Vermittlung zwischen dem Model und Die der View Allerdings wurde der allgemeine MVC-Ansatz für den Einsatz im SDS angepasst. Wie in Abbildung 9.2(b) zu erkennen ist, haben das Model und die grasche Repräsentation im Gegensatz zum reinen MVC-Ansatz keinerlei Bezug zueinander. Dafür beobachtet der Controller ebenfalls das Model und leitet vom Model versendete Ereignisse an die View weiter. Diese Modikation des MVC-Ansatzes schat klarere Aufgabenbereiche der einzelnen Komponenten. (a) Standard-MVC [SM02] (b) SDS-MVC Abbildung 9.2: Model-View-Controller Die Displays benden sich entweder im Edit - oder im Run -Modus. Im Edit -Modus werden Displays erstellt und konguriert. Dazu können Widgets Control System Studio 123 in das Display integriert bzw. aus ihm entfernt werden oder sämtliche Attribute der Widgets konguriert werden. Zu diesen Attributen gehören z.B. die Position, Breite, Höhe aber auch die Permission ID. Diese Id wird für die Registrierung beim Activation-Management verwendet. Wird ein Display in den Run -Modus versetzt, werden die Widgets bei dem Activation-Management mit ihrer Permission ID angemeldet und gemäÿ ihrer Konguration, mit den realen Geräten verbunden. So können die Daten der Geräte angezeigt bzw. Einstellungen an ihnen vorgenommen werden, sofern die Operateure die entsprechenden Rechte besitzen. Die Rechte innerhalb der CSS-Anwendung werden, wie beim Taschenrechner im Abschnitt 8.1 beschrieben, durch eine Rechtematrix realisiert. Die ge- währten Rechte der Benutzer werden in einem LDAP-Verzeichnis (siehe Abschnitt 4.2) gespeichert. Für die geforderten Rechte wird derzeit noch eine ungeschützte Textdatei verwendet. Dies soll jedoch ebenso in eine LDAP- Struktur umgesetzt werden. 9.2 Realisierung Die Funktion des User-Managements wurde im CSS stark abgewandelt. Es gibt nicht ein Exemplar, das den aktuellen Benutzer hält, sondern meh- LoginContexte, die zu einem Benutzer noch weitere Informationen und Funktionen bereitstellen. Dieser LoginContext ist nicht der in JAAS verwendete, sondern wird nur innerhalb der SecurityFacade benutzt und verwaltet. Unter anderem können so Executables unter einem anderen LoginContext rere ausgeführt werden. Auf diese Weise wird die geforderte kurzfristige Anmeldung eines Benutzers realisiert. Das Rights-Management wird im CSS durch den RightsManagementService umgesetzt. Aufgrund der Umstellungen des User-Managements liest im CSS RightsManagementService die Rechte eines Benutzers aus. Da der RightsManagementService sowohl die benötigten als auch die gewährten das Rechte kennt, trit der Service direkt die Entscheidung, ob der Benutzer den Zugri auf die hinter einem Bezeichner stehenden Objekte erhält. Eine IEvaluationStrategy wurde bisher nicht umgesetzt. Die aktuelle Implementierung des RightsManagementServices setzt die Verbotsregel (siehe Abschnitt 1.8) um, da sie bei einem leeren RightSet jedem Benutzer den Zugri erlaubt, auch wenn er selbst keine Rechte besitzt. Das Activation-Management wird im CSS durch den realisiert. Bei der Registrierung von Objekten bei dem ActivationService ActivationService werden die Adapter nicht übergeben, sondern über den aus Eclipse stammen- Kai Meyer Teil 3 - Praxis 124 AdapterManager ermittelt. Falls das übergebene Objekt das Interface IAdaptable implementiert, kann auch darüber der IActivationAdapter bezogen werden. Der Quellcode 9.1 zeigt, wie der ActivationService den IActivationAdapter für das registrierte Objekt ermittelt. den ActivationService private IActivationAdapter getActivationAdapter(nal Object object) { IActivationAdapter adapter = null; if (object instanceof IAdaptable) { Quellcode 9.1: Auszug aus dem } adapter = (IActivationAdapter) ((IAdaptable)object).getAdapter(IActivationAdapter.class); if (adapter==null) { } } adapter = (IActivationAdapter) Platform.getAdapterManager() .getAdapter(object, IActivationAdapter.class); Für die SDS-Widgets wird ein ActivationAdapter bei dem AdapterManager über einen Extension-Point registriert. Dieser verändert am Model des SDSWidgets den Enabled -Wert, was vom betreenden Controller an die grasche Repräsentation des Widgets gemeldet wird. Daraufhin wird das Er- scheinungsbild des Widgets angepasst. Was genau passiert, ist von der Implementierung der View und des Controllers abhängig. Theoretisch können sämtliche Attribute des Widgets manipuliert werden. Praktisch wird es aber meist beim Sperren oder bei der Veränderungen der Sichtbarkeit bleiben. Die Executables und deren Verwendung entspricht der Beschreibung im Taschenrechner (Kapitel 8). Ebenso werden bisher die Rechte des Benutzers und die geforderten Rechte zu dem Bezeichner des Executables bei jeder Anfrage neu ausgelesen. Dadurch wird stets auf Grundlage der aktuellen Daten gearbeitet, kann aber zu erheblichem Netzwerkverkehr führen. Bisher wurde beim DESY noch nicht ermittelt, ob der entstehende Netzwerkverkehr vertretbar ist, oder ob die Rechte-Matrizen in einem lokalen Speicher gehalten werden sollen. 9.3 Oene Probleme und Zusammenfassung Kai Meyer Im CSS gibt es noch groÿe Unstimmigkeiten über den Aufbau und die Handhabung der Permission ID s. Ein Display kann für mehrere verschiedene aber identisch aufgebaute Bereiche der Anlagen verwendet werden. Über die Angabe einer Prozessvariablen können die auszulesenden Datenströme bestimmt werden. Nun kann es vorkommen, dass Operateure aus unter- schiedlichen Bereichen verschiedene Instanzen des gleichen Displays verwen- Control System Studio 125 den, um einen Teil ihrer Anlagen zu überwachen. Das Display wird über spezische Prozessvariablen auf die Bereiche eingestellt. Ob ein bestimmtes Widget aus dem Display einem Operateur zur Verfügung steht, hängt jetzt nicht mehr nur von der Permission ID und den dazu hinterlegten Rechten, sondern ebenso von der verwendeten Prozessvariablen ab. Zudem wird im laufenden System durch die hohe Anzahl an Displays, die teilweise hunderte Widgets enthalten können, die Administration sehr schwer. Die Security-Facade bietet eine einfach zu verwendende Möglichkeit, die Benutzungsoberäche entsprechend der Berechtigungen des Benutzers anzupassen. Dies ist gerade für die Entwickler beim DESY interessant. Executables ähnlich wie die Runnables Da die verwendet werden, bedarf es bei den Entwicklern nur einer kleinen Umstellung. Entsprechendes gilt auch für die AbstractUserDependentAction, die anstelle der Actions Verwendung n- det. Zurzeit werden im CSS/SDS allerdings nur die Interaktionsobjekte vor unberechtigtem Zugri geschützt. Die eigentlichen Aktion (sowohl das Auslesen als auch Verändern von Werten der Geräte) werden nicht geschützt. Dies verdeutlicht, dass die eigentlichen Aktionen unbedingt serverseitig geschützt werden müssen, was beim DESY zumindest zum Teil durch die zusätzliche Hardware-Schicht gegeben ist. Mit der bisherigen Implementierung wurden folgende Merkmale erzielt: Kriterium Eigenschaft Autorisierungs-Ebene Code-Blöcke, Widgets Filterregel exibel (hier: Verbotsregel) GUI-Anpassung exibel Rollen-/Rechtezuordnung exibel, durch Anwender kongurierbar Anpassung an veränderte Rechte unmittelbar Aufgrund von Lizenzbedingungen und der Komplexität des Control System Studios wurde davon abgesehen, eine CSS-Version auf der beiliegenden CD anzubieten. [BRZ07, S.131 ], [CW07] Kapitel 10 Zusammenfassung und Ausblick Kai Meyer und Im Rahmen dieser Arbeit wurde untersucht, ob und wie die Brücke zwischen Torsten Witte Zugriskontrolle und Benutzungsoberäche unter Berücksichtigung der benutzergerechten Softwaregestaltung geschlagen werden kann. Dabei sind die Autoren zunächst in der Diskussion um die korrekte Verwendung von Interaktionsobjekten bei Benutzerautorisierung (Abschnitt 3.1) zu dem Ergebnis gekommen, dass das Verstecken der betreenden Interaktionsobjekte die Gebrauchstauglichkeit der Software am stärksten fördert. Allerdings fehlen zu diesem Thema allgemeine Standards, die auch eingehalten werden. Mit diesen Standards wäre eine weitere Grundlage für anwendungsübergreifend konsistente Benutzungsoberächen geschaen. Die in Kapitel 4 untersuchten Autorisierungs-Konzepte legen ihren Fokus auf Sicherheit, nehmen aber kaum Bezug zu der Benutzungsoberäche des umfassenden Softwaresystems. Im Gegensatz dazu wird im Eclipse-Umfeld die Wichtigkeit der Anbindung der Benutzungsoberäche an die Autorisierung berücksichtigt. Die geführten Diskussionen und entstandenen Ansätze zeigen, dass diese Anbindung möglich ist. Dabei wird ausschlieÿlich das Verstecken von Interaktionsobjekten für nicht-gewährten Funktionen angewendet. Allerdings besitzen die hier vorgestellten Realisierungen noch ei- nige Schwachpunkte bzgl. der Sicherheit und der Rechtevergabe im realen Einsatz. Der von den Autoren erstellte Dienstplaner, der diese Ansätze aufgreift und weiterentwickelt, demonstriert, dass mit dem zugrunde liegenden Konzept der Plug-In-(De-)Aktivierung ein exibler, sicherer und einfach zu handhabender Weg für die Anbindung existiert. Da die Plug-In-(De-)Aktivierung allerdings für manche Einsatzkontexte eine zu grobe Granularität der zu vergebenden Berechtigungen mit sich bringt oder das alleinige Verstecken von Interaktionsobjekten nicht ausreicht, entwickelten die Autoren die Security-Facade. Damit bewegen sich die einzelnen Berechtigungen nicht auf Plug-In-Ebene, sondern auf Ebene von Code- 126 Zusammenfassung und Ausblick Blöcken. 127 Zudem können gezielt einzelne Interaktionsobjekte entsprechend den Berechtigungen des Benutzers angepasst werden. Dabei kommen das Verstecken, das Sperren und andere Vorgehensweisen oder Kombinationen in Betracht. Die Security-Facade wurde anhand eines Prototypen erprobt und wird in dem Projekt Control System Studio erfolgreich eingesetzt. Die Anforderungen an das zu realisierende System wirken sich natürlich auf die gewählte Methode aus. Generell ist zu sagen, dass Sicherheit auf allen Systemebenen gewährleistet sein muss. Somit sollte die Rechteverwaltung von Beginn der Entwicklung an mit in die Architektur der Anwendung einbezogen werden. Die Authentizierungs- und Autorisierungsdaten sollten immer in verschlüsselter, signierter und durch Prüfsummen gesicherten Form vorliegen (sowohl auf dem Server als auch auf dem Client, falls nötig). Die Oenheit der Eclipse RCP für Erweiterungen bildet in Bezug auf Benutzerautorisierung eine Sicherheitslücke, die beachtet werden muss. Wenn der eingesetzte Autorisierungsmechanismus über das Erweiterungsregister kongurierbar ist und keine weiteren Sicherheitsmechanismen (z.B. signierte Plug-Ins) verwendet werden, bendet sich voraussichtlich eine Hintertür in dem System. Daher muss das Einbinden von (Fremd-)Plug-Ins nach dem Anwendungsstart, bzw. nachdem die Authentizierung und Autorisierung vollzogen wurde, überwacht und ggf. verhindert werden. An dieser Stelle besteht noch Entwicklungsbedarf, auch im Eclipse RCP-Umfeld. 128 Teil IV Anhang 129 Anhang A Verweise A.1 Eclipse-Newsgroups Torsten Witte Einstiegspunkte in die Diskussionen zu den Themen Sicherheit, Rollen-Konzept, benutzer-/rollenabhängige Benutzungsoberäche in der Eclipse Rich-ClientPlatform: • security concerns (11.06.2003) http://dev.eclipse.org/newslists/news.eclipse.technology. equinox/msg00438.html • Hide/show wizards based on developer roles? (09.09.2003) http://dev.eclipse.org/newslists/news.eclipse.platform/ msg06453.html • Security (23.12.2003) http://dev.eclipse.org/newslists/news.eclipse.technology. equinox/msg00568.html • Role Concept? (16.01.2004) http://dev.eclipse.org/newslists/news.eclipse.platform/ msg12572.html • Hiding functionality using platform-dened actions? (09.04.2004) http://dev.eclipse.org/mhonarc/lists/platform-ui-dev/ msg01778.html • RCP and user roles (or how to make non-ui plugin to provide a selection?) (30.06.2004) http://dev.eclipse.org/newslists/news.eclipse.platform/ msg24036.html 130 Eclipse-Newsgroups • 131 Hook for action set for applying user level access control (12.08.2004) https://bugs.eclipse.org/bugs/show_bug.cgi?id=71857 • How Implement a role based system (05.10.2004) http://dev.eclipse.org/newslists/news.eclipse.platform/ msg30366.html • Action enablement based on security policy (21.12.2004) http://dev.eclipse.org/newslists/news.eclipse.platform. rcp/msg02180.html • User/role management (enabling/disabling menu/sub-menu/items based on events) (29.01.2005) http://dev.eclipse.org/newslists/news.eclipse.platform. rcp/msg02801.html • Role Based Updates (19.02.2005) http://dev.eclipse.org/mhonarc/lists/platform-update-dev/ msg00585.html • Changing perspective views based on user authorization (01.06.2005) http://dev.eclipse.org/newslists/news.eclipse.platform. rcp/msg05071.html • RCP App and role based, dynamic policy (03.06.2005) http://dev.eclipse.org/newslists/news.eclipse.technology. equinox/msg01097.html • Eclipse-JAAS: RCP security framework kind-of available (01.09.2005) http://dev.eclipse.org/newslists/news.eclipse.technology. equinox/msg01132.html • Perspective ltering via acitvities (show all problem) (29.11.2005) http://dev.eclipse.org/newslists/news.eclipse.platform/ msg48240.html • how to add management on rcp (13.01.2006) http://dev.eclipse.org/newslists/news.eclipse.platform. rcp/msg09927.html • Questions on rbac (role based access control) in an RCP (26.07.2006) http://dev.eclipse.org/newslists/news.eclipse.technology. equinox/msg01995.html • Limiting Access to Plugins (11.01.2007) http://dev.eclipse.org/newslists/news.eclipse.technology. equinox/msg02590.html Anhang B Eingesetzte Werkzeuge B.1 Java Torsten Witte Die Programmiersprache Java wurde 1995 von Sun Microsystems (http: //java.sun.com/) freigegeben. Die objektorientierte Sprache wurde ur- sprünglich für den Einsatz im World Wide Web optimiert. Daher lautet die Java-Philosophie Write Once, Run Anywhere. Java-Programme werden in Bytecode übersetzt und auf einer virtuellen Maschine, der JVM (Java Virtual Machine), ausgeführt, indem der Bytecode interpretiert wird. Deswegen sind Java-Programme plattformunabhängig. Das zur Ausführung von JavaProgrammen benötigte Java Runtime Environment ist heute für nahezu alle Plattformen kostenlos erhältlich. Zur Entwicklung von Java-Programmen bietet Sun u.a. das J2SDK und das J2EE an. B.2 Eclipse Torsten Witte Während in Kapitel 2 Eclipse als Grundlage für RCP-Anwendungen vorgestellt wurde, soll hier Eclipse als Entwicklungswerkzeug genauer betrachtet werden. Die Eclipse-IDE bietet viele nützliche Funktionen zur Unterstützung des Programmierers von Java-Anwendungen. Dazu zählen z.B. Vervollständigungsund Refactoring-Funktionen, mit denen Code schnell und fehlerfrei von starken Gerüchen befreit werden kann (siehe [Fow00]). Ein komfortabler De- bugger ist ebenfalls vorhanden, der sogar Codeänderungen im laufenden Programm zulässt. Da die Eclipse-IDE selbst auf der Eclipse RCP aufsetzt, ist die Entwicklungsumgebung über Plug-Ins erweiterbar. Die Entwicklung von Plug-Ins wird u.a. durch das Plug-In Development Environment (PDE) unterstützt. 132 Startkongurationen für RCP-Anwendungen 133 Auf diese Weise kann jeder seine eigenen Funktionalitäten für die Eclipse-IDE entwickeln und nahtlos einbinden. So sind in der Community auch Plug-Ins für die Entwicklung in anderen Programmiersprachen entstanden. Eclipse ist also keineswegs an Java gebunden. Die ozielle Plug-In-Website Eclipse Plugin Central (www.eclipseplugincentral.com) bietet mittlerweile fast 1000 verschiedene Eclipse-Plug-Ins an. B.2.1 Startkongurationen für RCP-Anwendungen Der Screenshot in Abbildung B.1 zeigt, wie in der Eclipse-IDE ausgewählt werden kann, mit welchen Plug-Ins eine (zu testende) RCP-Anwendung aus- Calculator Zusätzlich wird das Admin-Plug- geführt werden soll. In diesem Beispiel wird der Taschenrechner auf dem Anwendungs-Plug-In RCP gestartet. In eingebunden. Im Eclipse-Workspace bendet sich noch das ErweiterungsPlug-In CalculatorExtension, rechner hinzufügt. das weitere Rechenarten zu dem Taschen- Dieses ist allerdings nicht ausgewählt, so dass die hier ausgeführte Anwendung nur die Grundrechenarten beinhaltet. Alle weiteren benötigten Plug-Ins lassen sich leicht über einen Klick auf Required Plug-ins hinzufügen. Add Dazu gehören z.B. einige Kern-Plug-Ins der Eclipse RCP, die sich auf der Zielplattform benden. Ebenso kann über Validate Plug-ins geprüft werden, ob alle Plug-In-Abhängigkeiten erfüllt sind. B.2.2 OSGi-Konsole Ein nützliches Werkzeug zur Überwachung und Steuerung einer Eclipse RichClient-Platform zur Laufzeit ist die OSGi-Konsole. kann mit dem Kommandozeilenparameter aufhin erscheint in der Konsole das Jede RCP-Anwendung -console osgi>-Prompt, gestartet werden. Dar- über das Befehle an die OSGi-Plattform gegeben werden können. Am dienlichsten ist hier das Kommando ss für Short Status. Darüber werden alle in der RCP vorhandenen Plug-Ins inklusive ihrer zugewiesenen Bundle-Id und ihrem aktuellen Zustand aufgelistet. Abbildung B.2 zeigt dies am Beispiel des Dienstplaners. Zu erkennen sind auch die Bundle-Ids der Fragmente, die zu einem Plug-In gehören (z.B. Fragments = 25) und umgekehrt (z.B. Master = 26). Weitere, im Kontext dieser Arbeit wichtige Kommandos sind start, stop und update. install, uninstall, Diese Kommandos erwarten als Parameter eine URL oder die Id des in der Plattform eingebundenen Bundles. Alle übrigen zulässigen Kommandos werden über die Eingabe von help angezeigt. [ML06, S.455] Anhang 134 Abbildung B.1: Eclipse Startkonguration von RCP-Anwendungen Abbildung B.2: OSGi-Konsole Java Policy-Tool 135 B.3 Java Policy-Tool Mit dem Java Policy-Tool lassen sich Richtlinien-Dateien für den Java Authentication and Authorization Service erstellen und bearbeiten. Das Tool ist standardmäÿig in der Installation des Java Development Kits und des Java Runtime Environments im folgenden Verzeichnis enthalten: <JDK- oder JRE-Verzeichnis>\bin\policytool.exe Torsten Witte Anhang C CD-Inhalt C.1 Java Torsten Witte Das Java -Verzeichnis enthält das JRE und das J2SDK in Version 6 (Update 1) für Windows. Die jeweils aktuellste Version, auch für andere Plattformen, ist unter http://www.java.com/de/ bzw. http://java.sun.com/ erhältlich. C.2 Eclipse Torsten Witte Im Eclipse -Verzeichnis der CD ist Eclipse in der Version 3.2.2 zu nden. Die jeweils aktuellste Version steht unter www.eclipse.org zum Download bereit. C.3 Ausführbare Beispiele zu JAAS Torsten Witte Die CD enthält ein Verzeichnis JAAS-Examples. Dabei handelt es sich um ein Eclipse-Projekt, das in den Eclipse-Workspace importiert werden kann. Das Projekt umfasst zwei Beispiele. Eines, das lediglich einen Benutzer authentiziert, und eines, das nach einer erfolgreichen Authentizierung benutzerabhängige Aktionen durchführt. Um die beiden Beispiele auszuführen, braucht lediglich die MainClass aus dem jew. Paket (authenticationExample oder authorizationExample) als Java-Application gestartet werden. Anschlieÿend werden in der Konsole die Log-in-Daten abgefragt. Zulässige Benut- zernamen sind bob, joe, foo und bar, jeweils mit gleichnamigen Passwort. 136 Ausführbares Beispiel zu Eclipse-JAAS 137 C.4 Ausführbares Beispiel zu Eclipse-JAAS Im Verzeichnis EclipseJAAS-Example benden sich die beiden Kern-Plug-Ins net.sourceforge.eclipsejaas und net.sourceforge.eclipsejaas.util des Eclipse-JAAS-Frameworks von Neil Bartlett [Eclc]. Zusätzlich ist eine Beispiel-Anwendung vorhanden, die aus den Plug-Ins • net.sourceforge.eclipsejaas.sample, • net.sourceforge.eclipsejaas.samplelogin, • net.sourceforge.eclipsejaas.sampleauth1 und • net.sourceforge.eclipsejaas.sampleauth2 sample-Plug-In ist das RCP-Plug-In und deniert das fertige Produkt, während das samplelogin-Plug-In das JAAS LoginModule hinzufügt und die Benutzerautorisierung übernimmt. Die beiden sampleauthXPlug-Ins deklarieren lediglich jeweils eine View, Test View 1 und Test View 2. Zu beachten ist dabei, dass Test View 2 von Test View 1 erbt, also auch das sampleauth2-Plug-In von sampleauth1 abhängig ist. Beide Plugbesteht. Das Ins sind nur in einer bestimmten Rolle verfügbar. Um das Beispiel ausführen zu können, müssen alle sechs Plug-In-Projekte in den Eclipse-Workspace importiert werden. Anschlieÿend müssen die bei- net.sourceforge.eclipsejaas.sampleauthX-Plug-Ins über Export... → Deployable plug-ins and fragments in ein separates Verzeichnis, z.B. C:\EclipseJAAS-Test, exportiert werden. Nach dem Export liegt in dem den angegebenen Verzeichnis ein weiteres Unterverzeichnis plugins, welches wiederum die beiden Dateien • net.sourceforge.eclipsejaas.sampleauth1_1.0.0.jar und • net.sourceforge.eclipsejaas.sampleauth2_1.0.0.jar enthält. Nun muss in Eclipse noch eine Startkonguration (siehe Anhang B.2.1) für net.sourceforge.eclipsejaas.sample angelegt werden. Wichtig ist dabei, dass auf dem Reiter Main unter Program to run die Option Run a product mit dem Wert net.sourceforge.eclipsejaas.sample.sampleProduct ausgewählt ist. Bei den VM Arguments auf dem Reiter Arguments muss der Pfad zu den das Produkt aus beiden exportierten Plug-Ins (als URL und mit abschlieÿendem Slash) angegeben sein: -Declipsejaas.util.pluginLocation=le:/C:/EclipseJAAS-Test/plugins/ In der Startliste auf dem Reiter Plug-ins dürfen nur die Plug-Ins Torsten Witte Anhang 138 • net.sourceforge.eclipsejaas, • net.sourceforge.eclipsejaas.util, • net.sourceforge.eclipsejaas.sample und • net.sourceforge.eclipsejaas.samplelogin sowie alle dafür benötigten Plug-Ins vorhanden sein. Die beiden forge.eclipsejaas.sampleauthX-Plug-Ins net.source- werden ggf. zur Laufzeit nach- geladen. Zuletzt muss noch auf dem Configuration-Reiter die Option clear the configuration area before launching angewählt sein. Ansonsten behält Eclipse einige Registereinträge im Zwischenspeicher, die nur für bestimmte Benutzer sichtbar sein sollen. Beim Starten der Anwendung erscheint ein einfacher Log-in-Dialog, der lediglich einen Benutzernamen abfragt. Hier kann grundsätzlich alles eingegeben werden. Namen, die mit Evil beginnen, erhalten keinen Zugang in das System. Namen, die als Teilwort Bob enthalten, verfügen über beide sampleauthX-Plug-Ins und somit auch über beide Views. Alle wei- teren Namen haben Zugang in die Anwendung, verfügen aber nicht über die sampleauthX-Plug-Ins. Darüber hinaus bendet sich in dem selben CD-Verzeichnis das vom Autor dieses Abschnittes entwickelte eclipsejaas.evil.authorization-Plug- In. Wird die Beispielanwendung zusätzlich mit diesem Plug-In ausgeführt, erhält jeder authentizierte Benutzer Zugri auf die beiden sampleauthX- Plug-Ins. Eine weitere Variante, die Benutzerautorisierung zu umgehen, bietet die OSGi-Konsole (siehe Anhang B.2.2). Kommandozeilenparameter Dazu muss die Anwendung mit dem -console ausgeführt werden. Nach dem Einlog- gen mit einem beliebigen Namen, braucht in der Konsole nur das Kommando install file:/C:/EclipseJAAS-Test/plugins/net.sourceforge.eclipsejaas.sampleauth1_1.0.0.jar angegeben werden. Daraufhin erscheint eine Bundle-Id, unter der das Plug-In in der OSGi-Plattform erreichbar ist. start <Bundle-Id> mit dieser Bundle-Id ist das PlugAnwendung aktiv und die Test View 1 kann geönet wer- Nach der Eingabe von In innerhalb der den. Dieser Ablauf ist für jedes weitere Plug-In analog. Ausführbares Beispiel zu Capabilities 139 C.5 Ausführbares Beispiel zu Capabilities Das Verzeichnis Kim Horne Activity Demo auf der CD enthält das Eclip- Torsten Witte seCon2005.KCH.AuthDemo -Projekt, das Kimberly Horne auf der Eclipse- Con 2005 zur Demonstration von Benutzerautorisierung über Capabilities vorgestellt hat. Dieses Projekt braucht lediglich in den Eclipse-Workspace importiert und kann anschlieÿend als RCP-Anwendung ausgeführt werden. Das Einloggen als Manager ist mit dem Benutzernamen khorne und gleich lautendem Passwort möglich. Für die Rolle als Employee kann der Benutzername und das Passwort you gewählt werden. Weitere Log-in-Daten benden sich in der authtable-Datei des Projektes. Zusätzlich bendet sich in dem selben Verzeichnis das Projekt EvilPlugin. Wird die Demo-Anwendung von Kimberly Horne mit diesem Plug-In gestartet, bendet sich in der Menüleiste ein weiteres Menü, mit dem es möglich ist, die Authentizierung und Autorisierung zu umgehen. C.6 Taschenrechner Auf der CD bendet sich im Verzeichnis Taschenrechner der in Kapitel 8 beschriebene Taschenrechner. können, müssen die Plug-Ins Admin Um die vollständige Anwendung starten zu RCP, Calculator, CalculatorExtension in den Eclipse-Workspace importiert werden. und In der Startkongu- RCP-Plug-In und Calculator CalculatorExtension und Admin sind optional. CalculatorExtension fügt dem Taschenrechner weitere Rechenoperationen hinzu, während das Admin-Plug-In die Überwa- ration des Taschenrechners muss mindestens ausgewählt sein (siehe Anhang B.2.1). Die Plug-Ins chung der Security-Facade und die Editierung von Rechten ermöglicht. Die Dateien user.txt, roles.txt und rights.txt enthalten die Daten für die Authentizierung und Autorisierung. Sie benden sich im RCP-Plug-In unter les. Direkt nach dem Start der Anwendung ist kein Benutzer angemeldet und daher auch keine Operation verfügbar. Für die An- bzw. Abmeldung eines Benutzers existieren im Menü in der user.txt File die Einträge Log-In und Log-Out. Wie festgehalten, können sich die Benutzer Tick, Trick, Track, Daisy und Donald anmelden. Das Passwort entspricht dabei dem Namen des jeweiligen Benutzers. Donald und Daisy gehören der Teacher -Rolle an, wobei Daisy zusätzlich als Admin tätig ist. Tick, Trick und Track sind in der Pupil Rolle. Je nach angemeldetem Benutzer werden verschiedene Operationen verfügbar. Kai Meyer 140 Abbildungsverzeichnis 2.1 Erweiterbare Anwendung vs. Plattform [ME05, S.4] . . . . . . 24 2.2 Eclipse-Plattform [Dau05a, S.347] . . . . . . . . . . . . . . . . 25 2.3 Lebenszyklus von Bundles [ML06, S.460] . . . . . . . . . . . . 28 2.4 Plug-In-Abhängigkeiten . . . . . . . . . . . . . . . . . . . . . 30 2.5 Erweiterungen [ML06, S.21] 3.1 Interaktionsobjekte (Windows XP) 3.2 Interaktionsobjekte (Mac OSX) . . . . . . . . . . . . . . . . . . . 39 . . . . . . . . . . . . . . . 51 . . . . . . . . . . . . . . . . . 51 4.1 Core RBAC Elemente [Ame03, S.8] . . . . . . . . . . . . . . . 62 4.2 Hierarchical RBAC Elemente [Ame03, S.10] . . . . . . . . . . 62 4.3 SSD Elemente [Ame03, S.13] . . . . . . . . . . . . . . . . . . . 63 4.4 DSD Elemente [Ame03, S.14] . . . . . . . . . . . . . . . . . . 64 4.5 Authentizierung mit JAAS - Sequenzdiagramm . . . . . . . . 68 4.6 Autorisierung mit JAAS - Sequenzdiagramm . . . . . . . . . . 71 4.7 XACML-Datenuss [SNL06, S.419] . . . . . . . . . . . . . . . 75 5.1 Komponenten der Security-Facade . . . . . . . . . . . . . . . . 80 5.2 Security-Facade-Datenuss . . . . . . . . . . . . . . . . . . . . 82 5.3 Security-Facade-Datenuss mit Activation-Management . . . . 83 7.1 Dienstplaner: Plug-In-Struktur 7.2 Dienstplaner: Menüleiste . . . . . . . . . . . . . . . . . . . . . 104 7.3 Dienstplaner: Kontextmenü 7.4 Rechtevergabe im Dienstplaner 8.1 Benutzungsoberäche des Taschenrechners 8.2 Rechtematrix für einen Benutzer im Taschenrechner . . . . . . 113 8.3 Plug-In-Struktur des Taschenrechners . . . . . . . . . . . . . . 114 8.4 Klassenübersicht des Taschenerechners 8.5 Verhalten einer gewährten 9.1 SDS-Display . . . . . . . . . . . . . . . . . . . . . . . . . . . . 121 . . . . . . . . . . . . . . . . . 103 . . . . . . . . . . . . . . . . . . . 105 . . . . . . . . . . . . . . . . . 106 . . . . . . . . . . . 112 . . . . . . . . . . . . . 115 AbstractUserDependentAction 141 . . 118 Abbildungsverzeichnis 142 9.2 Model-View-Controller . . . . . . . . . . . . . . . . . . . . . . 122 B.1 Eclipse Startkonguration von RCP-Anwendungen . . . . . . . 134 B.2 OSGi-Konsole . . . . . . . . . . . . . . . . . . . . . . . . . . . 134 Literaturverzeichnis [Ame03] American National Standards Institute, Inc.: can National Based Standard Access for Control. rbac-std-ncits.pdf. Information Technology Ameri Role http://csrc.nist.gov/rbac/ Version: April 2003. Letzter Zu- gri: 24.09.2007 [Bar05] Bartlett, Neil: Eintrag in den Eclipse-Newsgroups http://dev.eclipse.org/newslists/ news.eclipse.technology.equinox/msg01132.html. am 01.09.2005. Version: September 2005. Letzter Zugri: 24.09.2007 [Bar07] Bartlett, Neil: Secure Desktop Applications with Eclipse http://www.eclipsecon.org/2007/index.php?page= sub/&id=3889. Version: März 2007. Letzter Zugri: RCP. 24.09.2007 What is a Rich Client? http://wbeaton. blogspot.com/2005/12/what-is-rich-client.html. [Bea05] Beaton, Wayne: Version: Dezember 2005. Letzter Zugri: 24.09.2007 [BG03] Birnthaler, Thomas ; Gottschalk, Hermann: OpenLDAP Lightweight Directory Access Protocol. LDAP-12.pdf. http://www.ostc.de/ Version: Juli 2003. Letzter Zugri: 24.09.2007 [Bol03] Bolour, Azad: Notes on the Eclipse Plug-in Architecture. http://www.eclipse. org/articles/Article-Plug-in-architecture/plugin_ architecture.html. Letzter Zugri: 24.09.2007 In: Eclipse Corner Article (2003), Juli. [Bru04] Brunnstein, Klaus (Hrsg.) ; Universität Hamburg, Fachbereich Informatik (Veranst.): Gestaltbarkeit und Beherrschbarkeit von Informatiksystemen (GBI). 2004 143 Literaturverzeichnis 144 [BRZ07] Bleek, Wolf-Gideon (Hrsg.) ; Raasch, Jörg (Hrsg.) ; Züllig- hoven, Heinz (Hrsg.): Software Engineering 2007 - Fachtagung des GI-Fachbereichs Softwaretechnik. Gesellschaft für Informatik, 2007 Ed: What is a Rich Client? http: //www.eclipsezone.com/eclipse/forums/t59350.html. [Bur05] Burnette, Version: Dezember 2005. Letzter Zugri: 24.09.2007 [CoE] Component based End User Development (CoEUD) - Homepage. http://www.coeud.org. [Cre04] Creasey, Letzter Zugri: 24.09.2007 Scaling Tod: Large Eclipse Applications www.eclipsecon.org/2004/EclipseCon_ 2004_TechnicalTrackPresentations/05_Creasey.pdf. Progressively. Version: Februar 2004. Letzter Zugri: 24.09.2007 [CSS] Control System Studio (CSS) - Homepage. de. http://css.desy. Letzter Zugri: 24.09.2007 [CW07] C1-WPS: Synoptic Display Studio Developers Guide. Juni 2007 [Dau] Berthold Daum - Homepage. http://www.bdaum.de. Letzter Zugri: 24.09.2007 [Dau05a] Daum, Berthold: Java-Entwicklung mit Eclipse 3.1 - Anwen- dungen, Plugins und Rich Clients. 3. dpunkt.verlag, 2005 [Dau05b] Daum, Berthold: Rich-Client-Entwicklung mit Eclipse 3.1 - Anwendungen entwickeln mit der Rich Client Platform. 1. dpunkt.verlag, 2005. (auch für Eclipse 3.2 erhältlich) [Dau06] Daum, Berthold: Das Eclipse-Codebuch - 182 Tipps, Tricks und Lösungen für Eclipse-spezische Probleme. 1. dpunkt.verlag, 2006 [Dud02] Dudenredaktion: Duden - Die deutsche Rechtschreibung. Weltbild Verlag GmbH, 2002 [ebX] ebXML auf Sourceforge. ebxmlrr/. [Ecla] Eclipse - Homepage. 24.09.2007 http://sourceforge.net/projects/ Letzter Zugri: 24.09.2007 www.eclipse.org. Letzter Zugri: Literaturverzeichnis 145 [Eclb] Eclipse-JAAS eclipse_jaas. [Eclc] Eclipse-JAAS - Homepage. http://www.integility.com/ Letzter Zugri: 02.07.2007 auf Sourceforge. projects/eclipse-jaas. [Ecld] EclipseCon - Homepage. http://sourceforge.net/ Letzter Zugri: 24.09.2007 http://www.eclipsecon.org. Letz- ter Zugri: 24.09.2007 http: //www.eclipse.org/articles/Whitepaper-Platform-3. 1/eclipse-platform-whitepaper.pdf. Version: 2006. [Ecl06] Eclipse: Eclipse-Platform-Whitepaper. Letzter Zugri: 24.09.2007 [Eng93] Engusser, Hermann: Duden Informatik - Ein Fachlexikon für Studium und Praxis. Duden Verlag, 1993 http://www.eclipse.org/equinox/. [Equ] Equinox - Homepage. Letzter Zugri: 24.09.2007 [ER05] Edgar, Nick ; Rapicault, Pascal: Developing for the http://www.eclipsecon.org/2005/ presentations/EclipseCon2005_Tutorial26Final.pdf. Rich Client Platform. Version: März 2005. IBM Rational Software Ottawa, EclipseCon 2005 [Eva] EvansData - Homepage. www.evansdata.com. Letzter Zugri: 24.09.2007 [FK92] Ferraiolo, David ; Kuhn, Richard: Role-Based Access Con- trol. http://csrc.nist.gov/rbac/ferraiolo-kuhn-92.pdf. Version: 1992. Letzter Zugri: 24.09.2007 [Fow00] Fowler, Martin: Refactoring - Oder: Wie Sie das Design vorhandener Software verbessern. 1. Addison-Wesley, 2000 [GHJV95] Gamma, Erich ; Helm, Richard ; Johnson, Ralph ; Vlis- sides, John: Entwurfsmuster - Elemente wiederverwendbarer objektorientierter Software. Addison-Wesley, 1995 [HM04] Horne, Kimberly ; McLaren, Chris: Activities Support in http://dev.eclipse.org/viewcvs/index.cgi/ platform-ui-home/activities/activities.html?view=co. Eclipse 3.0. Version: Mai 2004. Letzter Zugri: 24.09.2007 Literaturverzeichnis 146 [Hor05a] Horne, A Context, a Capability, and a Per- Kimberly: http://eclipse.pookzilla. net/2005/12/context-capability-and-perspective.php. spective Walk Into a Bar. Version: Dezember 2005. Letzter Zugri: 24.09.2007 [Hor05b] Horne, - Kimberly: What to Do When Addressing UI Scalability in Eclipse Your Application is Too Compli- http://www.eclipsecon.org/2005/presentations/ EclipseCon2005_7.1Scalability.pdf. Version: März 2005. cated. Letzter Zugri: 24.09.2007 [Hor06] Horne, Kimberly: A Context, a Capability, and a Perspective http://eclipse.pookzilla. net/2006/10/context-capability-and-perspective.php. Walk Into a Bar: Capabilities. Version: Oktober 2006. Letzter Zugri: 24.09.2007 [HWWZ07] Hofer, Stefan ; Wende, Sven ; Will, Alexander ; Zülligho- ven, Heinz: End User Development für Leitstand-Arbeitsplätze: Beschreibung einer Systemarchitektur. In: [BRZ07], S. 131143 [ISO] ISO - Homepage. [ISO94] ISO: www.iso.org. Letzter Zugri: 24.09.2007 Information technology - Open Systems Interconnec- http: //standards.iso.org/ittf/PubliclyAvailableStandards/ s020269_ISO_IEC_7498-1_1994(E).zip. Version: 2, Novemtion - Basic Reference Model: ber 1994. Reference Number: The Basic Model. ISO/IEC 7498-1:1994(E) - Letzter Zugri: 24.09.2007 Identikation. http://www.itwissen.info/ definition/lexikon//__identification_identifikation. html. Version: 2007. Letzter Zugri: 24.09.2007 [ITW07] ITWissen: JAAS Authentication Tutorial. http://java.sun. com/javase/6/docs/technotes/guides/security/jaas/ tutorials/GeneralAcnOnly.html. Version: Mai 2007. [Jav07a] JavaSun: Letzter Zugri: 24.09.2007 [Jav07b] JavaSun: JAAS Authorization Tutorial. //java.sun.com/javase/6/docs/technotes/guides/ security/jaas/tutorials/GeneralAcnAndAzn.html. Version: Mai 2007. Letzter Zugri: 24.09.2007 http: Literaturverzeichnis 147 JAAS Reference Documentation. http://java. sun.com/products/jaas/reference/docs/index.html. [Jav07c] JavaSun: Version: Mai 2007. Letzter Zugri: 24.09.2007 [Jav07d] JavaSun: Java Authentication and Authorization Ser- vice (JAAS) Reference Guide for the Java SE Development http://java.sun.com/javase/6/docs/technotes/ guides/security/jaas/JAASRefGuide.html. Version: Mai Kit 6. 2007. Letzter Zugri: 24.09.2007 [KB06] Klinkert, Thomas ; Bertschler, Mario: Client-Platform (RCP). com/mb/document.pdf. Die Eclipse Rich- http://www.saboracaferestaurant. Version: Mai 2006. Letzter Zugri: 24.09.2007 [Khe04] Khelifi, How Ines: to Use the Activities Edi- http://dev.eclipse.org/viewcvs/index.cgi/ platform-ui-home/activities/tools/activityTool.html? view=co. Version: Juni 2004. Letzter Zugri: 24.09.2007 tor. [LR06] Lahres, Bernhard ; Raýman, Gregor: Praxisbuch Objektori- entierung - Von den Grundlagen zur Umsetzung. 1. Galileo Second Annual Computing, 2006 [MA06] Moran, John ; Ackerman, Laura: Eclipse Global Enterprise Survey Points To Rapid Adoption Of Eclipse Rich Client Platform. In: EclipsePress (2006), http://www.eclipse.org/org/press-release/ 20060905rcp.php. Letzter Zugri: 24.09.2007 September. [McA05] McAffer, Eintrag Je: in den Eclipse-Newsgroups 11.09.2005. http://dev.eclipse.org/newslists/ news.eclipse.technology.equinox/msg01141.html. am Version: September 2005. Letzter Zugri: 24.09.2007 [ME05] Mätzel, Kai-Uwe ; Eicher, Tom: Contributing to Eclipse: http://www.eclipsecon. org/2005/presentations/EclipseCon2005_Tutorial1.pdf. Understanding and Writing Plug-ins. Version: März 2005. Letzter Zugri: 24.09.2007 [MG03] Melhem, Wassim ; Glozic, Dejan: PDE Does Plug- http: //www.eclipse.org/articles/Article-PDE-does-plugins/ PDE-intro.html. Letzter Zugri: 24.09.2007 ins. In: Eclipse Corner Article (2003), September. Literaturverzeichnis 148 [Mit] Mitlinx LDAP - Homepage. http://www.mitlinx.de/ldap/. Letzter Zugri: 24.09.2007 [ML06] McAffer, Je ; Lemieux, Jean-Michel: eclipse Rich Client Platform - Designing, Coding, and Packaging Java Applications. Addison-Wesley, 2006 [Mol01] Molander, Reducing Mark: the user interface. http://www-128.ibm.com/developerworks/web/library/ us-reduce/. Version: Juni 2001. Letzter Zugri: 24.09.2007 [Ope] OpenLDAP - Homepage. http://www.openldap.org. Letzter Zugri: 24.09.2007 www.osgi.org. [OSG] OSGi - Homepage. Letzter Zugri: 24.09.2007 [RF06] Rosenthal, Jay ; Flaherty, Matthew: plications and Enterprise Security. org/2006/Sub.do?id=451. Eclipse RCP Ap- http://www.eclipsecon. Version: März 2006. IBM Lotus, EclipseCon 2006 - Letzter Zugri: 24.09.2007 [Sch05] Schmidt, Rolf: BGB Allgemeiner Teil - Grundlagen des Zivil- rechts Aufbau des zivilrechtlichen Gutachtens. 2. Verlag Dr. Rolf Schmidt, 2005 [Sch06] Schneider, Wolfgang: Grundsätze der Dialoggestaltung DIN http://www.ergo-online.de/site.aspx? url=html/software/grundlagen_der_software_ergon/ grundsaetze_der_dialoggestalt.htm. Version: Oktober EN ISO 9241-110. 2006. Letzter Zugri: 24.09.2007 [Shn82] Shneiderman, Ben: The Future of Interactive Systems and the Emergence of Direct Manipulation. Behaviour and Information Technology. 1982 [Shn83] Shneiderman, Ben: Direct Manipulation: A Step beyond Programming Languages. In: IEEE Computer (1983), August [Shn87] Shneiderman, Ben: Designing the User Interface: Strategies for Eective Human-Computer Interaction. Addison-Wesley, 1987 http://www.networks. siemens.de/solutionprovider/_online_lexikon/5/ f009705.htm. Version: 2006. Letzter Zugri: 24.09.2007 [Sie06] Siemens, AG: Authentizierung. Literaturverzeichnis 149 [SM02] Sun Microsystems, Inc: Java BluePrints: Model-View- http://java.sun.com/blueprints/patterns/ MVC-detailed.html. Version: 2002. Letzter Zugri: Controller. 24.09.2007 [SNL06] Steel, Christopher ; Nagappan, Ramesh ; Lai, Ray: core Security Patterns - Best Practices and Strategies for J2EE, Web Services, and Identity Management. PRENTICE HALL PTR, 2006 [Sun] XACML Kit auf Sourceforge. net/. http://sunxacml.sourceforge. Letzter Zugri: 24.09.2007 [Ull06] Ullenboom, Christian: Java ist auch eine Insel - Program- mieren mit der Java Standard Edition Version 6. 6. Galileo Computing, 2006 [Unb06] Unbekannt: Eclipse RCP weiter auf dem Vormarsch. In: Ja- http://javamagazin.de/itr/ news/psecom,id,30709,nodeid,367.html. Letzter Zugri: vaMagazin (2006), September. 24.09.2007 [Uni03] University of California, Role Berkeley: Based http://groups.sims.berkeley.edu/ doc-eng/projects/ROLES/research/RBAC_review.doc. Access Control. Version: Januar 2003. Letzter Zugri: 24.09.2007 [WT99] Whitten, Alma ; Tygar, J. D.: Why Johnny Can't En- crypt: A Usability Evaluation of PGP 5.0. (1999). gaudior.net/alma/johnny.pdf. + [Z 98] Züllighoven, Heinz u. a.: http://www. Letzter Zugri: 24.09.2007 Das objektorientierte Konstruk- tionshandbuch nach dem Werkzeug & Material-Ansatz. 1. dpunkt.verlag, 1998 [ZI93] Ziegler, Jürgen ; Ilg, Rolf: Benutzergerechte Software- Gestaltung. R.Oldenbourg Verlag, 1993 150 Abkürzungsverzeichnis ACL Access Control List API Application Programming Interface ASCII American Standard Code for Information Interchange CoEUD Component-based End User Development CSS Control System Studio DAC Discretionary Access Control DAP Directory Access Protocol DESY Deutsches Elektronen-Synchrotron DSD Dynamic Seperation of Duty GEF Graphical Editing Framework GUI Graphical User Interface HAL Hardware Abstraction Layer HTML Hypertext Markup Language HTTP Hypertext Transfer Protocol IDE Integrated Development Environment INCITS InterNational Committee for Information Technology Standards IP Internet Protocol ISO International Organization for Standardization IT Information Technology ITU International Telecommunication Union J2EE Java 2 Enterprise Edition J2SDK Java 2 Standard Edition Development Kit J2SE Java 2 Standard Edition JAAS Java Authentication and Authorization Service JDK Java Development Kit JNDI Java Naming and Directory Interface JRE Java Runtime Environment JVM Java Virtual Machine LDAP Lightweight Directory Access Protocol MAC Mandatory Access Control MVC Model-View-Controller 151 Abkürzungsverzeichnis 152 OASIS Organization for the Advancement of Structured Information Standards OSGi Open Service Gateway Initiative OSI Open Systems Interconnection PAP Policy Administration Point PDE Plug-In Development Environment PDP Policy Decision Point PEP Policy Enforcement Point PIN Persönliche Identikationsnummer PIP Policy Information Point RBAC Role Based Access Control RCP Rich-Client-Platform SAML Security Assertion Markup Language SDS Synoptic Display Studio SSD Static Seperation of Duty SSO Single Sign-On SWT Standard Widget Toolkit TCP Transmission Control Protocol UI User Interface URL Uniform Resource Locator WAM Werkzeug- und Material-Ansatz XACML eXtensible Access Control Markup Language XML eXtensible Markup Language Index Dateien 113, 119, 121, 122, 125127, .exsd . . . . . . . . . . . . . . . . . . . . . . . . . . . 37 actionSets.exsd . . . . . . . . . . . . . . . 37 feature.xml . . . . . . . . . . . . . . . . . . . . 40 fragment.xml . . . . . . . . . . . . . . . 39, 40 manifest.mf . . . . . . . . . . . . . 32, 33, 37 plugin.xml 32, 33, 3739, 86, 87, 89 site.xml . . . . . . . . . . . . . . . . . . . . . . . . 41 139 B Bediener . . . . . . . . . . . . . . . . . . . . . . . . . . 9 Benutzer . . . . . . . . . . . . . . . . . . . . . . 9, 61 Benutzerauthentizierung . . . . . 1, 92 Benutzerautorisierung . . . . . . . i, 1, 3, A 5, 18, 46, 47, 51, 53, 54, 56, Access Control List . . . . . . siehe ACL 102, 107, 108, 110, 111, 115, ACL . . . . . . . . . . . . . . . . . . . . . . . . . 14, 65 116, 118, 126, 127, 137139 59, 64, 78, 85, 93, 9698, 100 Activation-Adapter . . . . . . 8183, 118 Benutzungsmodell . . . . . . . . . . . . . . . 10 Activation-Management . 8183, 123 Benutzungsoberäche . . . . . . . . . . . . 10 American Standard Code for Infor- Bundle-Activator . . . . . . . . . 27, 3234 mation Interchange . . . . siehe ASCII Anwender . . . . . . . . . . . . . . . . . . . . . . . . 9 Anwendungs-Plug-In . 26, 34, 86, 87, 89, 96, 102, 113, 133 API . . . . . . . . . . . . . . . . . . . . . . 20, 94, 98 Application Programming Interface C Capability . 4, 36, 55, 56, 9398, 119, 139 CoEUD . . . . . . . . . . . . . . . . . . . . . . . . 120 Component-based End User Development . . . . . . . . . . . . . . . . . . siehe siehe API ASCII . . . . . . . . . . . . . . . . . . . . . . . . . . . 67 Attribute . . . . . . . . . . . . . . . . . . . . . . . . 74 aufgabenangemessen . . . . . . . . . . . . . 12 Authentizierung . . . 2, 4, 13, 14, 54, 55, 57, 60, 6568, 72, 76, 80, 83, 91, 122, 127, 136, 139 Autorisierung . . . . . . . . . i, 24, 12, 14, CoEUD Condition . . . . . . . . . . . . . . . . . . . . . . . 74 Control System Studio . . . siehe CSS Core RBAC . . . . . . . . . . . . . . . . . . 61, 62 CSS . . . . . . 4, 100, 111, 120125, 127 D 18, 46, 47, 5458, 60, 61, 66, DAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16 67, 7074, 7680, 8385, 91 DAP . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65 93, 9698, 102, 104, 108110, DESY . . . . . . . 111, 120, 121, 124, 125 153 Index 154 Deutsches Elektronen-Synchrotron siehe DESY Extension-Point Schema . . . . . . . . . 37 Extension-Point . . . . . . 2830, 33, 34, Directory Access Protocol . . . . . siehe 3639, 56, 58, 86, 89, 91, 94, DAP 109, 114, 124 Discretionary Access Control . . siehe Extension-Registry . . . 2629, 37, 38, DAC 58, 78, 79, 85, 89, 127 DSD . . . . . . . . . . . . . . . . . . . . . . . . . 61, 64 Extension . 28, 29, 31, 3739, 57, 58, Dynamic Seperation of Duty . . siehe DSD 91, 92, 95, 127 F E Eclipse-IDE 23, 25, 56, 94, 109, 132, Fassade . . . . . . . . . . . . . . . . . . . . . . . . . . 31 Fat-Client . . . . . . . . . . . . . . . . . . . 19, 20 133 Eclipse-JAAS . . . . . . 4, 56, 58, 72, 79, 9193, 137 Feature . . . . . . . . . . . . . . . . . . . . . . 26, 40 Fragment . . . . . . . . . . . . . . . . . . . . 26, 39 Eclipse-Newsgroups . . 54, 58, 95, 130 EclipseCon . . . . . . . . . . 5456, 96, 139 G Eclipse RCP . . . . . . . . . . . . . . i, 24, 8, 18, 19, 2229, 38, 43, 46, 47, Gebrauchstauglichkeit 11, 12, 47, 48, 52, 53, 57, 126 5456, 58, 59, 72, 78, 79, 84, 85, 91, 92, 100, 102, 110, 111, GEF . . . . . . . . . . . . . . . . . . . . . . . . . . . 122 120, 127, 130, 132, 133 Genehmigung . . . . . . . . . . . . . . . . . . . . 62 Eclipse 35, 19, 2328, 3133, 3537, grasche Benutzungsschnittstellen 10 39, 40, 42, 5459, 66, 78, 85, Graphical Editing Framework . siehe GEF 91, 9395, 108, 109, 111, 117, 123, 126, 132134, 136139 Endbenutzer . . . . . . . . . . . . . . . . . . . . . . 9 Graphical User Interface . siehe GUI GUI 2, 10, 22, 52, 54, 60, 72, 76, 84, Equinox . . . . . . . . . . . . . . . . . . 23, 55, 58 Erlaubnisregel . . . . . . . . . . . . . . . . . . . 18 erwartungskonform . . . . . . . . . . . . . . 12 95 H Erweiterung . . . . . . . . siehe Extension Erweiterungspunkt . . . . . . . . . . . . siehe Hardware Abstraction Layer . . siehe Extension-Point Erweiterungsregister . . . . . . . . . . siehe Executable . . . . 8083, 112, 113, 116, Control Markup Language . . . . siehe XACML eXtensible Markup Language . siehe XML HTML . . . . . . . . . . . . . . . . . . . . . . . 19, 20 HTTP . . . . . . . . . . . . . . . . . . . . . . . . . . . 92 118, 123125 Access HAL Hierarchical RBAC . . . . . . . . . . . 6163 Extension-Registry eXtensible HAL . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20 Hypertext Markup Language . . siehe HTML Hypertext Transfer Protocol . . siehe HTTP Index 155 I Java Authentication and Authorization Service . . . . . . . . . . . siehe IDE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23 JAAS Identizierung . . . . . . . . . . . . . . . . 1214 Java Development Kit . . . siehe JDK Identity-Management . . . . . 12, 13, 76 Java Naming and Directory Interface INCITS . . . . . . . . . . . . . . . . . . . . . . . . . 61 individualisierbar . . . . . . . . . . . . . . . . 12 siehe JNDI Java Runtime Environment . . . siehe Information Technology . . . . siehe IT JRE Environ- Java Virtual Machine . . . siehe JVM ment . . . . . . . . . . . . . . . . . . siehe JDK . . . . . . . . . . . . . . . . . . . . . . . . . 2, 135 IDE JNDI . . . . . . . . . . . . . . . . . . . . . . . . 66, 67 Integrated Development Interaktionsobjekte . . . . . . . . . . . . . . 10 JRE . . . . . . . . . . . . . . . . . . 132, 135, 136 InterNational JVM . . . . . . . . . . . . . . . . . . . . . . . . . . . 132 Committee for In- formation Technology Standards . . . . . . . . . . . . . . . . . siehe INCITS International Organization for Standardization . . . . . . . . . . . . siehe L LDAP . . . . . 4, 60, 65, 66, 81, 84, 123 Lightweight Directory Access Protocol . . . . . . . . . . . . . . . . . . . . siehe ISO International Telecommunication Union . . . . . . . . . . . . siehe ITU Internet Protocol . . . . . . . . . . siehe IP IP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65 ISO . . . . . . . . . . . . . . . . . . . . . . . . . . 11, 65 LDAP Log-in . 1214, 48, 49, 55, 72, 84, 89, 91, 103, 109, 136, 138, 139 M IT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 MAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16 ITU . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65 Mandatory Access Control . . . . siehe J Model-View-Controller . . siehe MVC MAC MVC . . . . . . . . . . . . . . . . . . . . . . . . . . . 122 J2EE . . . . . . . . . . . . . . . . . . . . . . . 55, 132 J2SDK . . . . . . . . . . . . . . . . . 66, 132, 136 J2SE . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55 JAAS 2, 4, 55, 56, 58, 60, 6668, 71, 72, 84, 91, 92, 115, 122, 123, 135137 Java 2 Enterprise Edition . . . . . siehe J2EE Java 2 Standard Edition Nutzer . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 O OASIS . . . . . . . . . . . . . . . . . . . . . . . . 2, 73 Open siehe J2SE Java 2 Standard Edition Development Kit . . . . . . . . . . . . . . siehe J2SDK N Service Gateway Initiative siehe OSGi OpenSource . . . . . . . . . . . . . . . 4, 65, 76 Open Systems Interconnection OSI siehe Index 156 Operation . . . . . . . . . . . . . . . . . . . . . . . 62 R Organization for the Advancement of Structured Information Stan- RBAC . 2, 4, 13, 6064, 84, 104, 105 dards . . . . . . . . . . . . . . . . . siehe RCP-Anwendung . . . . . . . . . . . . . . . 26, 34, 36, 78, 79, 85, 9193, 96, OASIS 102, 103, 108, 132134, 139 OSGi . . 22, 23, 26, 27, 32, 34, 35, 40, RCP . . . . 24, 22, 23, 25, 55, 58, 133 58, 79, 133, 138 OSGi-Konsole . . 28, 79, 93, 108, 133, RCP-Plug-In . . . . . . . . . . . . 26, 93, 137 Rich-Client-Anwendung . i, 1, 2225, 134, 138 28, 31, 56 OSGi-Manifest . . . . . . . . . . . . . . . 32, 33 OSI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65 Rich-Client-Platform . . . . siehe RCP Rich-Client 13, 8, 1922, 46, 60, 64, P 66, 72, 76, 77, 83, 92 Right-Set . . . . . . . . . . . . . . . . . . . . . . . . 81 PAP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74 Rights-Management . . . . . 80, 81, 123 PDE . . . . . . . . . . . . . . . . . . . . 31, 42, 132 Role Based Access Control . . . . siehe RBAC PDP . . . . . . . . . . . . . . . . . 73, 7577, 115 PEP . . . . . . . . . . . . . . . . . . . . . . 73, 7577 Rolle . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61 Persönliche Rule . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74 Identikationsnummer siehe PIN PIN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 PIP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75 Plug-In Development Environment siehe PDE Plug-In . . . . . . . . . . . . . . . . . . . . . . . . . . 4, 2042, 5559, 78, 79, 8487, 89, 9198, 102105, 107111, 113, 114, 118, 119, 126, 127, 132, 133, 137139 Plug-In-(De-)Aktivierung . . . . . 4, 59, 7880, 84, 98, 100, 102, 103, 126 Plug-In-Klasse . . . . . . . . . . . . . . . . . . . 34 Plug-In-Manifest . . . . . . . . . . . . . 32, 33 Policy Administration Point . . . siehe PAP Policy Decision Point . . . . siehe PDP Policy Enforcement Point siehe PEP Policy Information Point . siehe PIP PolicySet . . . . . . . . . . . . . . . . . . . . . . . . 74 Preference Page . . . . . . . . . 9497, 119 S SAML . . . . . . . . . . . . . . . . . . . . . . . . . . . 76 SDS . . . . . . . . . 100, 120122, 124, 125 Security-Facade 78, 8084, 100, 111 114, 118122, 125127, 139 Security Assertion Markup Language siehe SAML Single Sign-On . . . . . . . . . . . siehe SSO Singleton . . . . . . . . . . . . . . . . . . . . . . . . 34 Sitzung . . . . . . . . . . . . . . . . . . . . . . . . . . 62 Sourceforge . . . . . . . . . . . . . . . . . . 56, 76 SSD . . . . . . . . . . . . . . . . . . . . . . 61, 63, 64 SSO . . . . . . . . . . . . . . 13, 18, 55, 67, 76 Standard Widget Toolkit siehe SWT Static Seperation of Duty siehe SSD SWT . . . . . . . . . . . 22, 23, 43, 117, 122 Synoptic Display Studio . siehe SDS T Target . . . . . . . . . . . . . . . . . . . . . . . . . . . 74 Index 157 Taschenrechner . . . . . . . . . . . . . . . . . 111 TCP . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65 Thin-Client . . . . . . . . . 1, 2, 19, 20, 83 Transmission Control Protocol siehe TCP Trigger Point . . . . . . . . . . . . 94, 95, 119 U UI . . . . . . . . . . . . . . . . 22, 30, 3739, 56 Uniform Resource Locator . . . . siehe URL Update-Site . . . . 4043, 103, 107110 URL . . . . . . . . . . . . . . . 41, 92, 133, 137 Usability . . . . . . . . . . . . . . . . . . . . . 11, 53 User-Management . . . . . . . 80, 81, 123 User Interface . . . . . . . . . . . . . siehe UI V Verbotsregel . . . . . . . . . . . . . . . . . . . . . 18 Verzeichnis . . . . . . . . . . . . . . . . . . . . . . 65 Verzeichnisdienst . . . . . . . . . . . . . . . . 65 W WAM . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 Werkzeug- und Material-Ansatz siehe WAM X X.500 . . . . . . . . . . . . . . . . . . . . . . . . . . . 65 XACML . . . . 2, 4, 60, 7376, 84, 115 XML . . . . . . 31, 33, 37, 73, 74, 81, 93 158 Erklärung Ich versichere, dass ich die vorstehende Arbeit selbstständig und ohne fremde Hilfe angefertigt und mich anderer als der im beigefügten Verzeichnis angegebenen Hilfsmittel nicht bedient habe. Alle Stellen, die wörtlich oder sinngemäÿ aus Veröentlichungen entnommen wurden, sind als solche kenntlich gemacht. Ich bin mit einer Einstellung in den Bestand der Bibliothek des Fachbereichs einverstanden. Hamburg, 25. September 2007 Unterschrift Erklärung Ich versichere, dass ich die vorstehende Arbeit selbstständig und ohne fremde Hilfe angefertigt und mich anderer als der im beigefügten Verzeichnis angegebenen Hilfsmittel nicht bedient habe. Alle Stellen, die wörtlich oder sinngemäÿ aus Veröentlichungen entnommen wurden, sind als solche kenntlich gemacht. Ich bin mit einer Einstellung in den Bestand der Bibliothek des Fachbereichs einverstanden. Hamburg, 25. September 2007 Unterschrift