Integration von Microsoft .NET Passport in den infoAsset Broker - Jürgen Huber - Technische Universität München
←
→
Transkription von Seiteninhalten
Wenn Ihr Browser die Seite nicht korrekt rendert, bitte, lesen Sie den Inhalt der Seite unten
Integration von Microsoft .NET Passport in den infoAsset Broker Jürgen Huber Software Engineering betrieblicher Informationssysteme (sebis) (Professor Matthes) Technische Universität München Betreuung Dipl. -Ing. Kathrin Lehmann 21. Juli 2004
Gliederung 1. Einleitung......................................................................................................................... 3 1.1. Was ist „Single Sign On”? ...................................................................................... 3 1.2. Der infoAsset Broker ............................................................................................... 4 2. Passport – die Theorie ................................................................................................. 5 2.1. Microsoft .NET Passport......................................................................................... 5 2.2. Funktionsweise ........................................................................................................ 5 2.3. Kids Passport ........................................................................................................... 6 2.4. Passport SDK und Passport Manager ................................................................. 6 2.5. Umsetzung und Implementierung ........................................................................ 7 3. Hindernisse bei der Umsetzung ................................................................................ 9 3.1. Konflikt Java – ASP................................................................................................. 9 3.2. Environments ......................................................................................................... 10 3.3. Die LogoTag() – Methode .................................................................................... 11 4. Die Umsetzung – Integration in den Broker ......................................................... 13 4.1. Problemstellung und Lösungsüberblick ............................................................. 13 4.2. Use Cases .............................................................................................................. 15 4.3. Login ........................................................................................................................ 17 4.4. DefaultHandler ....................................................................................................... 18 4.5. Logout...................................................................................................................... 19 4.6. LogoutSubmitHandler ........................................................................................... 19 4.7. Templates ............................................................................................................... 21 4.8. ASP–Seiten............................................................................................................. 22 4.9. Lösungsalternativen .............................................................................................. 23 5. Passport aus Unternehmenssicht .......................................................................... 25 5.1. Warum „Single Sign On”? .................................................................................... 25 5.2. Möglichkeiten ......................................................................................................... 26 5.3. Schwachstellen ...................................................................................................... 27 5.4. Fazit ......................................................................................................................... 28 6. Literatur.......................................................................................................................... 29 7. Anhang ........................................................................................................................... 31 2
Kapitel 1 1. Einleitung 1.1. Was ist „Single Sign On”? „Single Sign In“ (SSI) und „Single Sign On“ (SSO) sind Begriffe, die in den letzten Jahren einiges an Aufmerksamkeit erregt haben. Trotzdem sind die Bedeutungen dieser Begriffe oft unklar. Mit steigender Informationsflut und dem Anstieg von Bezahldiensten und eCommerce im Internet ist auch die Anzahl an Seiten und Diensten gewachsen für die sich ein Benutzer registrieren muss. Er muss für jede(n) Seite/Dienst die er nutzt erneut persönliche Angaben (wie beispielsweise Adresse und Bankverbindung) machen und sich ein neues Login – Passwortpaar generieren und merken. Um das Problem der wachsenden Anzahl von Login und Passwortpaaren zu lösen wurden verschiedene SSI – Ansätze ins Leben gerufen. Das Grundprinzip dahinter ist, dass ein Benutzer einmal ein Login und ein zugehöriges Passwort auf seinen Namen registriert, und sich mit diesem dann bei allen anderen Seiten und Diensten die dasselbe Authentifizierungssystem nutzen anmelden kann. Allerdings muss der Benutzer bei diesem Verfahren immer noch bei jeder Seite seine persönlichen Angaben hinterlegen. Es wird ihm nur die Authentifizierung erleichtert. Eine Erweiterung dieses Prinzips1 stellt deshalb SSO dar, das prinzipiell eine Art „Information-sharing“ darstellt. Der Benutzer hinterlegt zusätzlich zu seinem Login an einer zentralen Stelle seine persönlichen Angaben auf die die Dienste dann bei Bedarf zugreifen können. Außerdem bedeutet die Anmeldung bei einem Dienst die gleichzeitige Anmeldung bei allen anderen Diensten. 1 [PSGK] 3
Es gibt viele Anbieter für SSO – Lösungen, aber die wichtigsten sind derzeit Microsoft mit seinem .NET Passport Dienst und in direkter Konkurrenz dazu das Liberty Alliance Project2. Im Rahmen dieses Systementwicklungsprojektes war Microsoft .NET Passport zu Authentifizierungszwecken in den infoAsset Broker3 zu integrieren. 1.2. Der infoAsset Broker Der infoAsset Broker (für dieses Projekt wurde eine Erweiterung für Weblogs, der Weblogbroker 1.0 verwendet) ist eine Softwarelösung für das Wissensmanagement. Die Software wird serverseitig installiert. Zur Benutzung ist auf der Clientseite nur ein Webbrowser notwendig. Es müssen keinerlei zusätzliche Software oder Plug-ins installiert werden. In erster Linie kann der infoAsset Broker für Dokumentenmanagement, -bewertung und -veröffentlichung, zur Verwaltung von Benutzer- und Nutzungsprofilen und zur Zugriffskontrolle verwendet werden. Vorhandenes Wissen wird dabei klassifiziert, versioniert, bewertet und strukturiert und damit eine Wissenslandkarte geschaffen. Benutzer können in Gruppen zusammengefasst werden mit gruppenspezifischen Zugriffsrechten. Die Benutzung des Brokers kann für jeden personalisiert werden. Es stehen Sammelmappen zur Verfügung in denen jeder Benutzer Dokumente nach seinen eigenen Interessen und Vorlieben zusammenstellen und bewerten kann. Durch die Bewertungen entstehen Benutzerprofile mit deren Hilfe die im Broker vorhandenen Dokumente effektiver durchsucht werden können. 2 http://www.projectliberty.org/ 3 http://www.infoasset.de/ 4
Kapitel 2 2. Passport – die Theorie 2.1. Microsoft .NET Passport Microsoft .NET Passport ist das SSO System von Microsoft, das ein Benutzer von Hotmail, dem E-Maildienst von Microsoft, oder von MSN, Microsofts Webportal das vor allem auf Nachrichten und eCommerce spezialisiert ist, automatisch mitbenutzen kann. Dabei wird der Passportdienst nur für die Benutzerauthentifizierung verwendet. Die Erweiterung MSN Wallet wird benutzt um persönliche Daten für eCommerce, also beispielsweise Adresse und Bankverbindung, zu speichern. Für Webseitenbetreiber die den Passportdienst nutzen wollen hält Microsoft ein SDK und Verwaltungstools bereit um die Integration von Passport in die Seite des Betreibers zu vereinfachen aber auch zu standardisieren. 2.2. Funktionsweise Wenn .NET Passport zu Authentifizierungszwecken genutzt wird, ist der prinzipielle Ablauf folgender: Der Benutzer surft mit seinem Webbrowser auf eine Webseite, die die Passportfunktionalität anbietet um einen Benutzer zu identifizieren. Die Seite erkennt, dass der Benutzer sich noch nicht bei Passport angemeldet hat. Sie zeigt ihm deshalb einen Passport Sign-in Button an. Wenn der Benutzer auf diesen klickt wird er an die Passportserver von Microsoft weitergeleitet. Hier wird ihm eine Webseite angezeigt, auf der er seinen Benutzernamen und sein Passport eingeben muss. Das Login – Passwort Paar wird verifiziert und anschließend wird der Benutzer 5
an die ursprünglich aufgerufene Webseite zurückgeleitet. Dem Benutzer wird ein sogenanntes Ticket in Form eines verschlüsselten Cookies ausgestellt, das ihm die Authentizität seiner Angaben bescheinigt und das mit einer Gültigkeitsdauer versehen ist. Darüber hinaus enthält ein zweiter Cookie das persönliche Profil des Benutzers, also z.B. seine Adresse und seine Emailadresse, und eine „Passport unique ID“ (ein 16 Zeichen langer Hexadezimalwert) über den der Benutzer eindeutig identifiziert werden kann. Die ursprüngliche Webseite kann die Daten des Tickets auslesen und ihm danach die entsprechenden Zugriffsrechte gewähren. Durch das Verwenden eines Cookies können alle Webseiten, die später angesurft werden und ebenfalls die Passportfunktionalität nutzen, den Benutzer als bereits angemeldet erkennen. Das Logout wird einfach durch Setzen der Cookieinhalts auf „null“ und durch Setzen der Gültigkeitsdauer auf eine vergangene Zeit realisiert. 2.3. Kids Passport Darüber hinaus gibt es noch den Kids Passport Service, bei dem die persönlichen Angaben über die Kinder von den Eltern gemacht werden können und bei dem die Eltern auch einstellen können welche Daten Webseiten über ihre Kinder sammeln dürfen und welche nicht. Außerdem können Einschränkungen gesetzt werden welchen Inhalt Kinder sehen dürfen. 2.4. Passport SDK und Passport Manager Um Microsoft .NET Passport auf einer Webseite zu integrieren müssen das Passport Software Development Kit (SDK)4 und der darin enthaltene Passport Manager installiert werden. Danach ist es erforderlich die eigene Webseite bei den Passportservern anzumelden. Hier muss zumindest die URL unter der die Webseite zu erreichen ist, eine URL zu der der Benutzer nach erfolgter Anmeldung zurückgeleitet wird und die URL unter der das Sign-out implementiert ist, angegeben werden. Nach erfolgter Anmeldung erhält man eine Site-ID und eine Datei die einen 4 http://msdn.microsoft.com/library/default.asp?url=/downloads/list/websrvpass.asp 6
zur Site-ID passenden Schlüssel enthält. Mit dem Schlüssel kann der Inhalt der Cookies entschlüsselt werden und mit den Passportservern über einen sicheren Kanal kommuniziert werden. Die erhaltene Site-ID wird anschließend im Passport Manager, einem grafischen Tool zur Wartung der Passporteinstellungen, eingetragen. Hier hat man dann noch die Möglichkeit zwischen verschiedenen Environments zu wählen. Während der Test- und Implementierungsphase sollte man das sogenannte „Preproduction- Environment“ (PREP) einstellen. Microsoft hat einen Klon der Passportserver unter der URL http://passporttest.net aufgesetzt. Solange sich die Webseite im PREP- Environment befindet kann für Testzwecke mit diesem Klon kommuniziert werden. Allerdings besteht hier nur die Möglichkeit Passportaccounts zu erkennen die auch im PREP-Environment erstellt wurden. Echte Passport Benutzer können sich hier nicht einloggen. Wenn die Implementierung beendet ist muss ein „Compliance Review“ angefordert werden, bei dem sich Microsoft vergewissert, dass die Seite den Passportstandards entspricht. Bei bestandenem Test kann die Seite dann in das „Production-Environment“ wechseln, also live gehen. Die Compliance Reviews werden in regelmäßigen Abständen wiederholt und kosten jedes Mal eine Gebühr von 1.500$. Darüber hinaus wird eine jährliche Gebühr von 10.000$ pro Unternehmen5 fällig. 2.5. Umsetzung und Implementierung6 7 Hat man diese Vorarbeiten einmal erledigt kann Passport in die eigene Webseite integriert werden. Hierzu wird einfach ein PassportIdentity Objekt instanziiert, das aller erforderlichen Methoden bereitstellt um einen Benutzer zu authentifizieren. PassportIdentitiy GetIsAuthenticated(TimeW indow : Integer, ForceLogin : Boolean, UseSecureAuth : Boolean) : Boolean GetFromNetworkServer() : Boolean GetProfileObject(ProfileName : String) : Object LogoTag2(ReturnURL : String, TimeWindow : Integer, ForceLogin : Boolean, UseSecureAuth : Boolean) : String Abb.1 : PassportIdentity-Klasse 5 http://download.microsoft.com/download/a/f/4/af49b391-086e-4aa2-a84b- ef6d916b2f08/passport_reviewguide.doc 6 [PSGK], vollständige Dokumentation zum Passport SDK 7 [OC04] 7
Zusätzlich dazu muss in der Datei Web.config die Zeile auf gesetzt werden. Damit wird sichergestellt, dass ein Benutzer nicht über seinen Windows – Account sondern über seinen Passport – Account authentifiziert wird. Zur Implementierung werden für eine Grundfunktionalität nur drei Methoden benötigt. Mit der Methode „GetIsAuthenticated()“ kann überprüft werden, ob der Benutzer einen gültigen und nicht abgelaufenen Ticketcookie besitzt. Die Gültigkeitsdauer für das Ticket kann in der Methode bestimmt werden. So kann man zum Beispiel festlegen, dass sich ein Benutzer innerhalb der letzten Stunde angemeldet haben muss. Die Methode liefert den Wert „true“, wenn der Cookie den Anforderungen entspricht. Die zweite wichtige Methode ist „GetProfileObject()“. Mit ihr können die Attribute der verschlüsselten Cookies ausgelesen werden. So kann man beispielsweise Name oder Emailadresse auslesen. Die Attribute „MemberIDHigh“ und „MemberIDLow“ aneinandergehängt ergeben die „Passport unique ID“. Als letztes ist noch die „LogoTag()“ Methode zu nennen. Diese überladene Methode erkennt selbstständig, ob der Benutzer über ein gültiges Ticket verfügt, oder nicht, und zeigt dementsprechend den Sign-in oder den Sign-out Button an (s. Abb.2). Es gibt auch noch die „LogoTag2()“ – Methode, die zusätzlich die Möglichkeit bereithält, dass ein WindowsXP – Benutzer die in WindowsXP integrierten Passportauthentifizierungsmöglichkeiten nutzt. Die URL die angesprochen wird, wenn man auf den Sign-in Button klickt wird vom PassportIdentitiy Objekt automatisch generiert. Sie hat folgende Syntax: http://current-login.passporttest.com/login.srf?lc=1033&id=44559 Dabei stellt „lc“ die Sprache dar in der der Benutzer zur Eingabe seines Logins und Passworts aufgefordert wird und „id“ die eigene Site-ID. (In diesem Fall also Englisch, 1031 für Deutsch, und die Site ID die dieses Projekt zugewiesen bekam). Abb.2 : Login- und Logout-Button 8
Kapitel 3 3. Hindernisse bei der Umsetzung 3.1. Konflikt Java – ASP Bei der Integration von Microsoft .NET Passport in den infoAsset Broker gab es einige Hindernisse, die eine reguläre Umsetzung verhindert haben. Der augenscheinlichste Punkt ist, dass Passport eine .NET – Anwendung ist. Um sie zu implementieren und auszuführen wird eine .NET – Umgebung samt zugehörigen Internet–Information–Diensten (IIS) auf dem Server erwartet. Für gewöhnlich wird Passport auf Active Server Pages (ASP) implementiert und diese dann unter IIS ausgeführt. Das hat zur Folge, dass die Webseite die Passportfunktionalität anbieten will auch als ASP – Seite implementiert sein muss. Da oben genanntes PassportIdentity – Objekt für die gesamte Kommunikation mit den Passportservern und die Entschlüsselung und Auswertung des Ticketcookies übernimmt, ist auch die Tatsache nicht zu umgehen, dass das PassportIdentity Objekt nur in .NET Umgebungen instanziierbar ist. Der infoAsset Broker seinerseits ist aber in Java implementiert. Der Broker arbeitet mit verschiedenen Handlern, die je nach Situation (Benutzer, Rolle, angeforderte Seite uvm.) vorgegebene Templates mit Inhalt befüllen und daraus dann HTML Seiten generieren. Diese werden dann dem Benutzer im Webbrowser angezeigt. Da der Broker unverändert als Javaanwendung bestehen bleiben soll, muss folglich eine Kommunikation mit den entsprechenden ASP Seiten stattfinden. Zunächst wurde der Port des Brokers von 80 (der Standardport für http Verkehr) auf 88 (Kerberos war auf dem Server nicht installiert) gesetzt, damit die IIS, die ebenfalls auf dem Port 80 laufen, nebenher laufen können. Da auf der Startseite des Brokers der Sign-in Button für Passport angezeigt werden soll, wurde das Bild des Buttons als 9
Link auf die Startseite gesetzt der auf den Loginserver von Passport verweist, da ohne ein PassportIdentity – Objekt auch nicht die „LogoTag()“ – Methode benutzt werden kann, die ansonsten für die Anzeige des Buttons zuständig wäre. Als ReturnURL von den Passportservern wird dann eine ASP – Seite angegeben, die ein PassportIdentity Objekt instanziiert und das Ticket ausliest. Anschließend wird automatisch auf die Brokerseite zurückverwiesen. Die Umleitung über die ASP Seite vollzieht sich vom Benutzer unbemerkt und über einen verschlüsselten Kanal (SSL)8, da hier seine PuID an den Broker übertragen wird. Eine Hauptfunktionalität von SSO ist, dass ein Benutzer, wenn er sich bei einer anderen Seite schon einmal angemeldet hat, sich nicht erneut anmelden muss. Diese Funktionalität kann mit dieser Art Implementierung niemals verwirklicht werden wenn die Startseite die Seite des Brokers ist. Wenn die Startseite des Brokers eine ASP – Seite wäre, könnte über eine Methode des PassportIdentitiy – Objektes festgestellt werden ob der Benutzer ein gültiges Ticket besitzt. Andersherum, also wenn ein Benutzer sich am Broker mittels Passport anmeldet und dann auf eine andere Passport Webseite surft, funktioniert SSO natürlich schon, da andere Seiten das Ticketcookie des Benutzers wie gewohnt auslesen können. Beim Logout wird zuerst dem Broker das Logout mitgeteilt und der Benutzer anschließend ebenfalls unbemerkt an eine ASP – Seite geleitet, die die Passportcookies invalidiert. 3.2. Environments Ein weiteres Problem sind die Environments unter denen man entwickelt. Da man sich solange im PREP-Environment befindet, bis man ein Compliance Review absolviert hat, kann leider nicht festgestellt werden, ob die Kommunikation auch mit den echten Passportservern funktioniert und ob echte Passportuser authentifiziert werden können. Auch andersherum können Webseiten die Passport unterstützen niemanden authentifizieren der einen Account für das PREP-Environment besitzt. Des Weiteren hat Microsoft seine PREP-Environment-Server von http://passport- test.net auf http://www.passport-ppe.com umgestellt. Leider unterstützen diese nicht mehr die oben erwähnte Syntax für den Anmeldevorgang. Hier muss abgewartet 8 Anleitung für selbstsignierte Zertifikate für den IIS 5: [DB03] 10
werden bis Microsoft sein SDK oder zumindest die zugehörige Dokumentation erneuert. Um dennoch die Funktionalität demonstrieren zu können verweist der Sign-In Button nicht auf die Loginserver, sondern auf eine Seite von der aus eine ausgedachte PuID an den Broker übertragen wird die im Broker registriert wurde. Außerdem generiert die Seite die Passportcookies, allerdings ohne Inhalt. Um die SSO Funktionalität zu zeigen überprüft ein kleines Script ob diese Cookies vorhanden sind und zeigt dementsprechend eine Login- oder eine Welcomeseite an. 3.3. Die LogoTag() – Methode Wie erwähnt wurde die „LogoTag()“– Methode nicht verwendet, sondern der Sign-In Button als Link angezeigt. Falls die „LogoTag()“– Methode doch einmal verwendet werden soll ergibt sich das Problem, dass der Link zu den Loginservern von dieser Methode automatisch generiert wird. Es gibt keine Möglichkeit den generierten Link zu überschreiben. Die Methode verweist im aktuellen SDK noch auf die alte Internetadresse der Loginserver, so dass sie im aktuellen Zustand unbrauchbar ist. Deshalb ist zu vermuten, dass Microsoft demnächst ein neues SDK veröffentlicht. 11
12
Kapitel 4 4. Die Umsetzung – Integration in den Broker 4.1. Problemstellung und Lösungsüberblick Die Problemstellung die es zu lösen galt, lässt sich folgendermaßen beschreiben: Um Microsoft .NET Passport zu implementieren wird das PassportIdentity-Objekt samt seiner zugehörigen Methoden zwingend benötigt, da nur so das Passportticket das der Benutzer nach erfolgreichem Authentifizieren bei den Passport Login- Servern ausgestellt bekommt entschlüsselt und verifiziert werden kann. Dieses Objekt lässt sich allerdings nur in einer .NET Umgebung instanziien. Da der infoAsset Broker aber eine Java-Anwendung ist muss in die Kommunikation zwischen Broker und Login-Server eine ASP-Seite zwischengeschaltet werden, so dass dann mit Hilfe des PassportIdentity-Objektes das ausgestellte Ticket überprüft werden kann. Gelöst wurde dieses Problem indem der Benutzer zuerst an die Passport Login-Server geleitet wird um sich zu authentifizieren und anschließend unbemerkt über eine ASP- Seite zurückgeleitet wird auf der das Ticket überprüft wird. Auf der ASP Seite wird bei gültigem Ticket die PassportID9 ausgelesen und an den Broker über einen sicheren Kanal übermittelt. Dadurch erfährt der Broker, dass es sich um einen korrekt authentifizierten Benutzer handelt. Die Zuordnung zwischen PassportID und Benutzer geschieht in der Datenbank des Brokers. 9 Genaueres s. Kap. 4.3 13
Abb.3 : Deployment Diagramm 14
4.2. Use Cases Bevor die Integration in den Broker beschrieben wird, sollen kurz die Use Cases analysiert werden die die Fälle widerspiegeln die bei der Integration berücksichtigt wurden. Erster Fall: Benutzer meldet sich am Broker an. Benutze r Am Brok er a nme lde n Anmelden mit Passp ort Anmelden ohne Passport > Sta tus "angemelde t" auf true se tze n Status "mit Passport PuID überprüfen angemeldet" auf true setzen User übe rprüfen Abb.4 : Use Case „Anmleden“ 15
Zweiter Fall: Benutzer meldet sich vom Broker ab. Benutzer Vom Bro ker ab melden Abmelden mit Passport Abmeld en ohne Passport Sta tus "ang eme ld et" auf false setzen Pass po rt Ti cke t lö schen Status "Mit Passport angemeldet" auf false setzen Abb.5 : Use Case „Abmleden“ Der Broker bietet zwei Grundfunktionalitäten für den Anmeldevorgang. Die erste ist ein Anmeldevorgang, der wie bisher vonstatten geht. Der Benutzer meldet sich mit seinem Benutzernamen und Passwort an, die er für den Broker registriert hat. Er benutzt nicht den Passport–Login–Button. Folglich soll ihm auch nach erfolgreichem Anmelden weder der Passport–Login noch der Logout–Button angezeigt werden. Um sich abzumelden wird wie gewohnt der Logoutlink des Brokers benutzt. Zweitens kann sich der Benutzer via Passport am Broker anmelden. Hierzu wird der Passport–Login–Button benutzt. Nach der Anmeldung wird auf den Webseiten des Brokers ein Passport–Logout–Button zusätzlich zum Logoutlink des Brokers angezeigt. Der Benutzer kann beides benutzen um sich vom Broker abzumelden. In beiden Fällen wird der Benutzer auch vom Passportdienst abgemeldet um Missbrauchspotential zu verhindern (genaueres Kapitel 5.3). 16
4.3. Login Beim Login muss also dem Broker mitgeteilt werden, dass sich der Benutzer angemeldet hat und wie er das gemacht hat. Deshalb wurde die abstrakte Klasse „de.infoasset.broker.session.AbstractSession.java“ um die Variable „loggedInWithPassport“ erweitert. Sie wird mit „false“ initialisiert und auf „true“ gesetzt wenn der Benutzer beim Anmelden Passport benutzt hat. Die entsprechenden Methoden um diese Variable zu setzen („setPassportLoggedIn()“) oder auszulesen („isPassportLoggedIn()“) sind ebenfalls in dieser Klasse implementiert. AbstractSession loggedInW it hP assport : Bo olean loggedIn : Boolean setLoggedIn(lo ggedIn : Boolean) isLogged In() : B oolean setPassportLo ggedIn(loggedInW it hP assport : Bo olean) isPassportLoggedIn() : Boolean Abb.6 : Klasse AbstractSession.java Die Definition der beiden Methoden findet sich in der Schnittstelle „Session“, die diese Klasse benutzt. Diese Variable dient nur dazu festzuhalten wie sich der Benutzer angemeldet hat. Deshalb muss zusätzlich die Variable „isLoggedIn“ auf true gesetzt werden, da nur diese den Anmeldestatus repräsentiert. Dieses Szenario setzt voraus, dass der Anmeldevorgang mit Passport erfolgreich war. Allerdings sind noch ein paar Schritte auszuführen bis ein Benutzer erfolgreich angemeldet ist. Der Klick auf den Passport–Button leitet den Benutzer an die Passport Authentifizierungsserver weiter, bei denen er seinen Benutzernamen und sein Passwort eingibt. Danach wird er an eine Webseite weitergeleitet, die auf einem Server des Brokerbetreibers unter IIS läuft. Hier wird die Passport unique ID ermittelt (siehe Kapitel 4.7) und anschließend über einen sicheren Kanal (SSL) an den Broker übertragen. Dazu wird die Startseite des Brokers aufgerufen und an die URL folgende Zeichensequenz angehängt: ?PID=PuID Hierbei stellt PuID die Passport unique ID dar, die ein 16–Zeichen langer Hexadezimalwert ist. 17
4.4. DefaultHandler Jeder Webseite des Brokers ist ein sogenannter Handler zugeordnet. Handler nehmen Anfragen von Clients entgegen und verarbeiten sie im aktuellen Kontext des Benutzers. Die Ausgabe wird an ein Template weitergereicht das eine Webseite erzeugt. Der „de.infoasset.broker.weblogHandler.home.DefaultHandler.java“ ist der Startseite des Brokers zugeordnet. Damit für einen Benutzer, der sich mit Passport angemeldet hat, wie gewohnt nach dem Anmeldevorgang die Startseite für eingeloggte Benutzer erscheint, musste zuerst der „DefaultHandler“ um die Funktion des Anmeldens erweitert werden, die zuvor nur im „LoginHandler“ präsent war. Diese Funktion läuft automatisch ab wenn die Startseite wie oben beschrieben mit angehängter PuID aufgerufen wird. Der Handler liest die PuID aus und überprüft, ob ein Benutzer mit dieser ID bekannt ist. Hierzu wurde die Klasse „IMPPersons“ die die Attribute, die einer Person zugeordnet werden, festlegt um das Attribut „PassportID“ erweitert. Diese ist standardmäßig auf „null“ gesetzt, außer wenn ein Benutzer Passport benutzt. Dann ist hier seine PuID gespeichert. Die dauerhafte Speicherung der Attribute findet in der Datei „content.txt“ statt. Die zugehörigen Methoden „getPassportID()“ und „setPassportID()“ zum Schreiben bzw. Lesen des Attributs wurden in der Schnittstelle „Person“ festgelegt und in der Klasse „AbstractPerson“ implementiert. Damit der „DefaultHandler“ die Datei „context.txt“ nach der entsprechenden PassportID durchsuchen kann wurde eine weitere Methode „getPersonByPassportID()“ in der Schnittstelle „Persons“ definiert und in der Klasse „IMPPersons“ implementiert. IMPPersons getPersonByPassportID(PassportID : String) : Person Persons AbstractPerson getPassportID() : String setPassportID(PassportID : String) Person Abb.7 : Erweiterte Klassen 18
Der Handler überprüft also nach dem Auslesen der PuID aus der URL, ob ein Benutzer mit dieser PassportID bekannt ist. Falls ja wird der Status dieses Benutzers auf angemeldet gesetzt. Gleichzeitig wird „loggedInWithPassport“ auf „true“ gesetzt. Falls kein Benutzer unter dieser PassportID gefunden wird, wird die Startseite angezeigt die auch nicht angemeldete Benutzer sehen können. 4.5. Logout Da sich der Broker auf diese Weise für jeden Benutzer der angemeldet ist merken kann, wie sich der Benutzer angemeldet hat, kann auch das Abmeldeverfahren entsprechend darauf eingehen. Ein Benutzer der sich ohne Passport am Broker angemeldet hat, bekommt im angemeldeten Zustand nur den klassischen Logoutlink des Brokers zu Gesicht. Der Passport–Logout–Button wird ihm nicht angezeigt. Entsprechend verläuft auch der Abmeldevorgang wie bisher. Nach erfolgreichem Logout wird dem Benutzer die Startseite des Brokers für nicht angemeldete Benutzer angezeigt. Wenn der Benutzer sich mit Passport angemeldet hat, wird er unbemerkt nach dem Abmeldevorgang am Broker auf die ASP Seite geleitet, die die Inhalte der Passport Cookies auf „null“ und die Gültigkeitsdauer auf ein vergangenes Datum setzt (Refernzvorgehen von Microsoft). Anschließend wird der Benutzer ebenfalls auf die Startseite des Brokers für nicht angemeldete Benutzer weitergeleitet. 4.6. LogoutSubmitHandler Der Passport–Logout–Button ist mit der Logout Seite des Brokers verlinkt auf die man auch geleitet wird, wenn man auf den normalen Logoutlink klickt. Dieser Seite ist der so genannte „de.infoasset.broker.weblogHandler.home.LogoutSubmitHandler“ zugeordnet, der beim Laden dieser Webseite aktiv wird und der den Status des Brokers ändert. Damit unterschieden werden kann ob der Benutzer sich mit Passport oder klassisch angemeldet hat, wird als erstes mit der Methode „isPassportLoggedIn()“ die Variable „loggedInWithPassport“ überprüft. Ist das Ergebnis negativ hat der Benutzer nicht Passport zum Anmelden verwendet und es 19
wird nur die Variable „loggedIn“ auf „false“ gesetzt. Ein vom Broker eventuell gesetzter Cookie wird abschließend auf „null“ gesetzt. Ist das Ergebnis positiv, es wurde also Passport benutzt, wird die Variable „loggedInWithPassport“ zusätzlich zu „loggedIn“ auf „false“ gesetzt. Abb.8 : Sequenzdiagramm, LogoutSubmitHandler Darüber hinaus wird jetzt die Weiterleitung an die ASP–Seite aktiv. Dazu wird eine unsichtbare Shell geöffnet und die Seite über den Standardbrowser aufgerufen. Da der Aufruf der Shell je nach Betriebssystem unterschiedlich ist, wird zuerst mit der Methode „System.getProperty()“ der Name des Betriebssystems ausgelesen und dann eine Fallunterscheidung gemacht. Es wird nach Windows9x, NT, 2000, XP und UNIX unterschieden. Der Umweg über die Shell wurde deshalb gewählt, weil der Broker es nicht zulässt von den Handlern aus auf externe Webseiten 10 weiterzuleiten . 10 Codeausschnitt siehe Anhang 20
4.7. Templates Templates sind HTML–Seiten, die so genannte Platzhalter beinhalten. Die Platzhalter werden von den Handlern, die dem jeweiligen Template zugeordnet sind, mit Inhalten befüllt. Auf diese Weise werden also Webseiten mit variablen Inhalten erzeugt und trotzdem ein einheitliches Erscheinungsbild gewahrt. Damit eine Änderung des Layouts nicht in allen Templates einzeln vorgenommen werden muss, sind alle Templates einem Mastertemplate unterstellt. Eine Änderung in diesem Master pflanzt sich in alle unterstellten Templates fort. Um einen Platzhalter zu definieren wird ein Attributname gewählt und in „$“– Zeichen eingeschlossen. Dem Attributnamen wird dann in der Datenbank die Ersetzung zugeordnet. Normalerweise ist dies ein Text in irgendeiner Form der dann mit der Methode „template.put()“ in die Webseite geschrieben wird. Für den Passport–Login–Button wurde in das Mastertemplate ein Link eingebaut, dessen Ziel über einen Platzhalter definiert wird. Da das Ziel in der Datenbank („properties.txt“) verzeichnet ist kann also sehr leicht durch den Administrator des Brokers die Ziel–URL abgeändert werden. Das ist insofern wichtig, da Microsoft die URL der Loginserver erneut ändern könnte. Dem Link ist einfach das Bild des Passport Logout Buttons zugeordnet. Die Syntax ist folgendermaßen: Beim Passport–Logout–Button musste leider ein anderes Vorgehen gewählt werden, da der Button erstens nur den Benutzern angezeigt werden soll die auch Passport zum Anmelden verwendet haben, und zweitens auch ein Abmelden vom Broker damit verbunden sein soll. Das Abmelden vom Broker kann aber nicht von einer externen Seite geschehen auf die man hätte verlinken können. Also wird dem Button der Link auf die Webseite „home/logoutSubmit“ des Brokers zugewiesen, der der „LogoutSubmitHandler“ zugeordnet ist, und das Abmelden vom Broker und die anschließende Weiterleitung auf die ASP–Seite um den Benutzer von Passport abzumelden in diesem Handler wie oben beschrieben implementiert. Damit der Button auch nur den Passportbenutzern angezeigt wird, wurde hier ein bedingter Platzhalter für das Template verwendet. Bedingte Platzhalter haben folgende Syntax: $[platzhalterName$ Bedingter Inhalt $platzhalterName]$ Der bedingte Inhalt, also der Button, wird in diesem Fall nur angezeigt, wenn der Platzhaltername (hier „ifPassportLoggedIn“) zu „true“ ausgewertet wird. 21
4.8. ASP–Seiten Zuerst wird kurz die Referenzimplementierung11 der ASP – Loginseite erklärt und anschließend die abgeänderte Fassung, die für die Demonstration verwendet wird. Abschließend wird noch kurz auf die Logoutseite eingegangen. Der erste Schritt auf der Loginseite ist die Istanziierung des PassportIdentitiy Objektes. Dieses Objekt bietet dann alle weiteren benötigten Methoden an, um die Authentifizierung eines Passport–Benutzers abzuwickeln. Wenn das Objekt instanziiert wurde, wird als erstes mittels der Methode „GetFromNetworkServer()“ überprüft, ob der Benutzer die Webseite zum ersten Mal ansurft, oder ob er von den Loginservern auf diese Seite zurückgeschickt wurde. Im letzteren Fall befindet sich eine lange Zeichenkette am Ende der URL im Browser des Benutzers. Sie enthält verschlüsselte Informationen für den Ticketcookie, der beim User angelegt wurde. Damit der Benutzer nicht die ganze Zeit mit der Zeichenkette im Anhang surfen muss, wird sie durch erneutes Laden der aktuellen Seite entfernt. Anschließen wird mit der Methode „GetIsAuthenticated()“ überprüft, ob der Benutzer über ein gültiges Ticket verfügt. Darüber hinaus kann auch eine Gültigkeitsdauer für ein vorhandenes Ticket angegeben werden, die besagt, wie lange eine Ausstellung des Tickets maximal her sein darf. Wenn der Benutzer nicht über ein gültiges Ticket verfügt wird er an die Loginserver zurückverwiesen. Wenn er über ein gültiges Ticket verfügt wird die PuID ausgelesen. Dies ist ein sechzehn– Zeichen langer Hexadezimalwert der in eine hohe ID, die ersten acht Zeichen, und eine niedrige ID, die letzten acht Zeichen, unterteilt ist. Beide werden getrennt ausgelesen und dann aneinandergehängt um die vollständige ID zu erzeugen. Anschließend kann eine boolsche Variable auf „true“ gesetzt werden mit deren Hilfe später entschieden wird, ob Webseiten für angemeldete Benutzer oder für nicht angemeldete Benutzer angezeigt werden. Da wie in Kapitel 3.2 schon erwähnt, die Syntax für die neuen Loginserver abgeändert wurde und das Anmelden bei Passport im jetzigen Zustand nicht funktioniert, wurde eine abgeänderte Seite zu Demonstrationszwecken erstellt. Sie überprüft nicht, ob ein Benutzer über ein gültiges Ticket verfügt, da der Benutzer ansonsten an die Loginserver zurückverwiesen werden würde. Da der User auch nicht über ein gültiges Ticket verfügt muss eine künstliche PuID verwendet werden. 11 [PSGK] 22
Das Prinzip ist dennoch unverändert geblieben und der Broker überprüft weiterhin die ID, nur dass sie eben nicht von Passport erzeugt wurde, sondern von der ASP Seite. Die Logoutseite ist eine einfache Visual Basic Script-Seite, die die vier von Passport erzeugten Cookies auf „null“ und das Ablaufdatum auf ein vergangenes Datum setzt. Die Namen der vier Cookies sind: • „MSPAuth“ – Das Ticket • „MSPSecAuth“ – Das Ticket wenn SSL–Seiten verwendet werden • „MSPProf“ – Das Profil des Benutzers • „MSPConsent“ – Die Daten, die der Benutzer den Passportseiten zur Verfügung stellt 4.9. Lösungsalternativen Zu der eben beschriebenen Lösung sind einige Lösungsalternativen denkbar. Die erste wäre eine Modifizierung des Übertragungsweges der PuID. Die PuID ist im bisherigen Verfahren die Schwachstelle, da ein Benutzer der seine PuID oder die eines anderen Benutzers kennt, sich beim Broker einfach durch Anhängen der PuID an die URL anmelden kann. Die PuID ist immer unverändert gültig und es wird auch nicht überprüft, ob diese von der ASP Seite ausgelesen und angehängt wurde. Als Ausweg könnte der Broker eine so genannte Nonce generieren. Noncen sind Zufallswerte um genau diese „Wiederholungsangriffe“ wirkungslos zu machen. Am besten generiert man ein Nonce durch eine Zufallszahl, ein Datum oder eine Kombination aus Beidem. Wie die Nonce eingesetzt wird hängt im Wesentlichen davon ab, ob der Broker und die IIS auf demselben Rechner laufen, oder nicht. Laufen beide auf demselben Rechner generiert der Broker eine Nonce und legt diese in einem geschützten Speicherbereich beliebiger Art ab auf den nur der Broker sowie die IIS Zugriff haben. Die Nonce wird generiert, wenn ein Benutzer sich mit Passport anmelden möchte. Er wird anschließend nach bisherigem Verfahren an die Passport Login-Server weitergeleitet. Wenn er dann über die ASP-Seiten zurückgeleitet und dort die PuID ausgelesen wird, holt sich die ASP Seite die Nonce aus dem Speicher und verwendet sie um die PuID zu verschlüsseln und das Chiffre dann an die URL des Brokers anzuhängen. Der Broker seinerseits benutzt dieselbe Nonce um aus 23
dem Chiffre wieder die PuID im Klartext zu gewinnen. So ist gewährleistet, dass die angehängte PuID niemals dieselbe ist. Auf diese Weise ist es nicht einmal mehr notwendig, dass die Kommunikation zwischen Broker und IIS verschlüsselt abläuft. Laufen allerdings Broker und IIS auf verschiedenen Rechnern, so muss die Nonce über einen sicheren Kanal übertragen werden. Bei verteilten Rechnern sollten auch Zeitsynchronisation und Timeouts in geeigneter Weise verwendet werden. Bei der zweiten Lösungsalternative werden die ASP-Seiten als Web-Service verwendet, der für das Entschlüsseln der Passportcookies und das Verifizieren des Passporttickets zuständig ist. Da in einer Brokersession zumindest die Namen der Passportcookies gelesen werden können, kann der Broker ein Benutzer direkt an die Passport Login-Server schicken und dieser dann auch direkt an den Broker zurückgeschickt werden. Der Broker überprüft bei jedem Request ob eines oder mehrere der Passportcookies vorhanden sind und leitet den Benutzer im positiven Fall an die ASP Seite weiter die dann überprüft, ob das gefundene Ticket gültig ist. Die Antwort an den Broker kann beispielsweise über einen zweiten Kanal zwischen Broker und IIS realisiert werden. Die Antwort könnte beispielsweise an XML angelehnt werden und im Fehlerfall als oder im Erfolgsfall als personinfo ausfallen. Bei komplexeren Nachrichten bietet sich eventuell auch SOAP an. 24
Kapitel 5 5. Passport aus Unternehmenssicht 5.1. Warum „Single Sign On”? Nach der ersten Euphorie über die neue Technik in der sich viele einen riesigen Markt erhofften, wurde es sehr still um SSO. Nur in letzter Zeit waren vereinzelt Kritiken zu hören, dass mit dieser Technik ein Markt bedient wird für den gar kein großer Bedarf herrscht, oder dass zumindest die Technik noch sehr unausgereift sei und die Preise für die Softwarelösungen überteuert seien. Einige Analysten raten sogar dazu sich aus dem Markt ganz zurückzuziehen12. Dennoch bietet diese Technologie viele Vorteile die in diesem Abschnitt kurz den Nachteilen gegenüber gestellt werden sollen. Die Nachteile die am häufigsten genannt werden sind, dass persönliche Daten und Zahlungsinformationen bei einer zentralen Instanz abgelegt werden, der der Benutzer vertrauen muss. Außerdem muss der Benutzer nach wie vor bei Seiten die SSO nicht unterstützen (die Mehrheit) seine Daten eingeben und sich Passwörter merken. Dadurch, dass es mehrere Anbieter von Softwarelösungen auf dem Markt gibt, bindet sich ein Teilnehmer fest an die Lösung eines Unternehmens. Speziell bei Microsoft Passport werden auch oft Sicherheitsbedenken angemeldet bei deren Lösung man auf Microsoft angewiesen ist, da Passport ein proprietäres Format ist. Demgegenüber stehen aber viele Vorteile. Daten müssen (im Idealfall) nur einmal eingegeben werden und man muss sich nur ein Login – Passwort Paar merken. Das Internet kann personalisierter gestaltet werden. Auch sind spezielle Schutzmöglichkeiten für Kinder (->Kids Passport, s.u.) umsetzbar. Für Unternehmen ergeben sich mehr Möglichkeiten gezielt auf die Kunden einzuwirken, da sie Zugriff 12 Essays und Literatur zum Thema [GH03], [PS01] 25
auf viele persönliche Daten haben und den Internetauftritt benutzerfreundlicher gestalten können. 5.2. Möglichkeiten Abschließend soll erörtert werden welche Möglichkeiten bestehen, wenn beispielsweise ein Unternehmen Microsoft .NET Passport einsetzen möchte, um die Authentifizierung der Mitarbeiter und deren Zugriffsrechte zu regeln. Zuerst muss erwähnt werden, dass es nicht möglich ist die Zugriffsrechte der einzelnen Personen bei den zentralen Passportservern von Microsoft und damit auch in den Cookies festzulegen. Hier ist man auf das beschränkt, was von Microsoft vorgegeben wird. Microsoft selbst schreibt eine Art „Consent Database“ vor, in der verzeichnet wird welche Angaben vom Benutzer an die entsprechende Seite weitergeleitet werden dürfen und welche nicht. Zusätzlich können dann hier auch Zugriffsrechte abgelegt werden. Das heißt, dass es dem Unternehmen selbst überlassen bleibt die Zugriffsrechte zu verwalten und zu speichern. Abgesehen von der Authentifizierung bringt Passport auf diesem Gebiet keine Vorteile. Es sind mehrere Szenarios als Einsatzgebiete für eine SSO Lösung denkbar. Das erste Szenario wäre ein Unternehmen, das nur die Authentifizierung der Mitarbeiter in einer Intranetumgebung realisieren möchte. Falls Zugriffsrechte keine Rolle spielen kann auf eine Rechtedatenbank verzichtet werden und beispielsweise ein System wie Kerberos verwendet werden, das von einer zentralen Stelle im Unternehmen betrieben und gewartet werden kann. Falls auch Zugriffsrechte eine Rolle spielen, muss zusätzlich eine Rechtedatenbank aufgesetzt werden, die dann entweder bei jeder Transaktion abgefragt wird, oder die die Rechte in einem Ticket festhält (nicht im Passportticket). Hier kommt dann allerdings ein weiteres Szenario ins Spiel, falls das Unternehmen aus Untereinheiten besteht, die ihre Inhalte und die entsprechenden Rechte selbst verwalten. Hier kann es unter Umständen problematisch sein Authentifizierung und Rechteverwaltung zentral zu halten. Wenn jede Untereinheit die Rechteverwaltung selbst realisiert, was zu einer erhöhten Ausfallsicherheit, einem schnelleren, unbürokratischeren Rechtemanagement und einer einfacheren Wartung führt, kann ein System wie Passport durchaus von Vorteil sein, da die Authentifizierung extern vorgenommen wird und der Benutzer dann 26
seine Rechte durch die Untereinheiten direkt zugewiesen bekommt. Eine zentrale Stelle für die Authentifizierung innerhalb des Unternehmens einzurichten ist zumindest mit einer erhöhten Bürokratie und einem höheren Kommunikationsaufwand verbunden, nicht zuletzt wenn die Untereinheiten der Firma auch geografisch verteilt sind. 5.3. Schwachstellen13 Microsoft .NET Passport machte über die Jahre immer wieder Schlagzeilen mit gravierenden Sicherheitsmängeln. Daraufhin haben sich einige Forscher mit der Analyse der Schwachstellen in Passport befasst, deren Ergebnisse hier kurz vorgestellt werden. Es werden nur grundsätzliche Fehler, also Fehler im Design des Dienstes erwähnt. Spezifische Angriffe auf den Dienst werden ausgelassen, da diese von Microsoft meist behoben werden. Als erstes ist hier das Interface des Dienstes zu nennen. Meist wird der Passport Dienst zusätzlich zu einem normalen Authentifikationsdienst angeboten. Beim Ausloggen entfernt Passport nur seine eigenen Rechte (Ticket, Cookie) der normale Dienst ebenfalls nur von ihm angelegte Rechte. Wenn sich ein Benutzer also mit Passport anmeldet, aber nicht den Signout-Button von Passport benutzt, so wird er nur aus der aktuellen Seite ausgeloggt. Er bleibt aber bei Passport weiter angemeldet. Der unbedarfte Nutzer denkt er sei abgemeldet und der nächste Nutzer hat vollen Zugriff auf alle Seiten die den Passportdienst unterstützen unter dem Profil des vorherigen Nutzers. Als Beispiel sei hier Hotmail, der populärste Passportdienst von Microsoft genannt, bei dem genau das geschehen ist. Noch eine Stufe gravierender ist die Kompatibilität von Passport mit dem Netscape Browser. Wenn hier die Option gewählt wird, dass Anfragen für Cookies nur beantwortet werden, wenn sie von dem Server kommen, der sie auch geschrieben hat, dann funktioniert das Logout überhaupt nicht mehr. Ein zweiter Punkt ist das Verschlüsselungsverfahren. Hier verwendet Microsoft TripleDES14 um die Benutzerdaten zu verschlüsseln. Alle Daten werden mit dem selben Schlüssel verschlüsselt anstatt die Daten verschiedener Benutzer mit verschiedenen Schlüsseln zu verschlüsseln. Wenn dieser Schlüssel kompromittiert 13 [KR00] 14 [MSPA] 27
wird liegen alle Passportdaten offen. (Anm.: TripleDES generiert oft schwache Schlüssel wenn schlechte Zufallszahlen verwendet werden). Als letztes sei noch ein Problem genannt das alle SSO Dienste plagt. Dadurch, dass das gesamte System von einer zentralen Instanz abhängt die die Daten verwaltet, wird das System anfällig für Ausfälle. Hinzu kommt, dass in dieser Instanz auch die Daten aller Benutzer gespeichert sind, was den Dienst zu einem attraktiven Ziel für Angriffe macht. Wenn der Dienst ausfällt kann sich auch niemand mehr auf Seiten authentifizieren, die auf den Passportdienst angewiesen sind. Für skrupellose Konkurrenten wären also die Passportserver ein lohnendes Ziel für Denial-of-Service Angriffe. Dies kann aber auch ungewollt eintreten einfach dadurch, dass mit steigender Benutzerzahl, von der SSO ja lebt, auch die Last auf die Server steigt. Es gibt keine Informationen dazu, ob Passport mit replizierten Servern betrieben werden kann um dieses Risiko zu minimieren. Durch die Replizierung würde das Risiko eines Serverausfalls sinken, andererseits steigt dafür die Gefahr, dass ein Schlüssel kompromittiert wird, weil dann Kopien auf jedem der Server vorhanden sein müssen. 5.4. Fazit Um ein Fazit zu ziehen sind die Sicherheitsrisiken von Microsoft .NET Passport gegen etwaige Vorteile abzuwägen. Die Vorteile die entstehen, wenn auf ein bestehendes System zurückgegriffen wird, relativieren sich unter anderem dadurch, dass Passport kein kostenloser Service ist. Gerade bei großen Firmen sind die Ressourcen die benötigt werden um ein eigenes System zu realisieren (Server, Personal) meist sowieso vorhanden. Hinzu kommt, dass das Rechtemanagement selbst zu implementieren ist. Warum sollte also ein zusätzlicher, kostenpflichtiger Dienst in Anspruch genommen werden? Im Hinblick auf die Sicherheitsrisiken, die bei Passport bestehen scheint eine eigene Realisierung eines Authentifizierungssystems überlegen. 28
6. Literatur [DB03] Dylan Beattie, January 2003, Creating a Self-Signed Certificate using OpenSSL for use with Microsoft Internet Information Services (IIS) 5, http://www.dylanbeattie.net/docs/openssl_iis_ssl_howto.html [GH03] George V. Hulme, InformationWeek, 17. Mai 2003, Gartner Advises Pulling The Plug On Microsoft Passport, http://www.internetweek.com/shared/printableArticle.jhtml?articleID=10000198 [KR00] David P. Kormann and Aviel D. Rubin, AT&T Labs – Research, Risks of the Passport Single Signon Protocol, Computer Networks, Elsevier Science Press, volume 33, pages 51-58, 2000. [MSPA] Passport Authentication Provider http://msdn.microsoft.com/library/default.asp?url=/library/en- us/cpguide/html/cpconThePassportAuthenticationProvider.asp [PSGK] 27. Februar 2003, .NET Passport Service Guide Kit, Version 2.5, http://msdn.microsoft.com/library/default.asp?url=/downloads/list/websrvpass.asp [PS01] John Pescatore, Information Security Strategies, David Smith, Internet Strategies, and Avivah Litan, Financial Services Payment Strategies, 24. September 2001, Privacy and Security Still Challenge Microsoft Passport, http://www3.gartner.com/DisplayDocument?doc_cd=101160 29
[OC04] Olli Cornes, 23. Januar 2004, Passport mit .NET implementieren http://www.microsoft.com/germany/ms/msdnbiblio/show_all.asp?siteid=546749 30
7. Anhang String passportlogoutsite = session.getServices().getProperties().getProperty("passportlogoutsite"); String execution = "start " + passportlogoutsite; try { Process p = null; Runtime r = Runtime.getRuntime(); String OS = System.getProperty("os.name").toLowerCase(); if (OS.indexOf("windows 9") > -1) { // Windows p = r.exec( "command.com /c " + execution ); } else if ( (OS.indexOf("nt") > -1) || (OS.indexOf("windows 2000") > -1 || (OS.indexOf("windows xp") > -1) ) ){ p = r.exec( "cmd.exe /c " + execution ); } else { // Unix: Is there an IIS implementation for Unix? p = r.exec( "env" + execution); } } catch (Exception e) { e.printStackTrace(); } 31
Sie können auch lesen