Angepasstes serialisierbares Java-Objekt für die Weitergabe von Sicherheitsattributen weitergeben
Dieser Artikel beschreibt das Hinzufügen eines Objekts aus einem Anmeldemodul zum Subject sowie die erforderlichen Infrastrukturmaßnahmen zur Gewährleistung der Weitergabe des Java™-Objekts.
Vorbereitende Schritte
Informationen zu diesem Vorgang
Vorgehensweise
- Fügen Sie Ihr angepasstes Java-Objekt aus einem angepassten Anmeldemodul zum Subject hinzu. Für jedes JAAS-Anmeldemodul
ist dies ein Prozess, der aus zwei Schritten besteht. WebSphere Application Server
führt für jedes Anmeldemodul in der Konfiguration die folgenden Schritte aus:
- Anmeldemethode
- Mit diesem Schritt werden ggf. die Callbacks der Anmeldekonfiguration überprüft und neue Objekte oder Berechtigungsnachweise erstellt.
- Commit-Methode
- Mit diesem Schritt werden die während der Anmeldung erstellten Objekte oder Berechtigungsnachweise zum Subject hinzugefügt.
Ein zum Subject hinzugefügtes angepasstes Java-Objekt wird von WebSphere Application Server im sendenden Server serialisiert, im empfangenden Server entserialisiert und auf dem weiteren Verarbeitungsweg wieder zum Subject hinzugefügt. Dieser Prozess verläuft allerdings nur unter bestimmten Voraussetzungen fehlerfrei. Weitere Informationen zum JAAS-Programmiermodell finden Sie in den Informationen zu JAAS im Artikel "Sicherheit: Lernmaterial".Wichtig: Stellen Sie beim Integrieren eines angepassten Anmeldemoduls in die Anmeldeinfrastruktur von WebSphere Application Server sicher, dass der Code vertrauenswürdig ist. Wenn Sie die Klassen zu einer JAR-Datei zusammenstellen und die Datei zum Verzeichnis Stammverzeichnis_des_Anwendungsservers/lib/ext/ hinzufügen, hat das Anmeldemodul die Java 2-Sicherheitsberechtigung "AllPermissions". Sie sollten Ihre Anmeldemodule und andere Infrastrukturklassen zu einem privaten Verzeichnis hinzufügen. Sie müssen jedoch die Datei Profilstammverzeichnis/properties/server.policy so modifizieren, dass Ihr privates Verzeichnis und/oder Ihre JAR-Datei berechtigt sind, die vom Anmeldemodul aufgerufenen APIs auszuführen. Da es möglich ist, dass das Anmeldemodul im Aufruf-Stack nach dem Anwendungscode ausgeführt wird, sollten Sie doPrivileged-Code hinzufügen, damit Sie keine weiteren Eigenschaften zu Ihren Anwendungen hinzufügen müssen.
Wichtig: Stellen Sie beim Integrieren eines angepassten Anmeldemoduls in die Anmeldeinfrastruktur von WebSphere Application Server sicher, dass der Code vertrauenswürdig ist. Ein zum Verzeichnis Profilstammverzeichnis/classes hinzugefügtes Anmeldemodul hat die Java 2-Sicherheitsberechtigung "AllPermissions". Nähere Informationen finden Sie im Artikel Unterverzeichnis "classes" im Profil für angepasste Klassen erstellen. Da das Anmeldemodul jedoch nach dem Anwendungscode im Aufruf-Stack ausgeführt werden kann, können Sie doPrivileged-Code hinzufügen, so dass Sie Ihren Anwendungen keine zusätzlichen Eigenschaften hinzufügen müssen.
Das folgende Codebeispiel zeigt, wie doPrivileged-Code hinzugefügt wird. Weitere Informationen zu den während der Initialisierung, der Anmeldung und der Festschreibung ausführenden Aktionen finden Sie im Artikel Angepasste Anmeldemodule für eine Systemanmeldekonfiguration für JAAS entwickeln.public customLoginModule() { public void initialize(Subject subject, CallbackHandler callbackHandler, Map sharedState, Map options) { } public boolean login() throws LoginException { // Callback für den WSTokenHolderCallback konstruieren, // damit sich feststellen lässt, ob das // angepasstes Objekt weitergegeben wurde Callback callbacks[] = new Callback[1]; callbacks[0] = new WSTokenHolderCallback("Authz Token List: "); try { _callbackHandler.handle(callbacks); } catch (Exception e) { throw new LoginException (e.getLocalizedMessage()); } // Überprüft, ob an diese Anmeldung Informationen weitergegeben wurden List authzTokenList = ((WSTokenHolderCallback) callbacks[1]). getTokenHolderList(); if (authzTokenList != null) { for (int i=0; i<authzTokenList.size(); i++) { TokenHolder tokenHolder = (TokenHolder)authzTokenList.get(i); // Suchen Sie nach Ihrem angepassten Objekt. Verwenden // Sie für die Suche "startsWith", weil an den Namen Daten // angehängt werden, die das zugehörige Subject Set angeben. // Beispiel von getName(): "com.acme.CustomObject (1)". // Der Klassenname wird auf der sendenden Seite durch das // Aufrufen der Methode object.getClass().getName() generiert. // Falls dieses Objekt von WebSphere Application Server // entserialisiert wird, geben Sie es zurück. Sie müssen es // hier nicht hinzufügen. Andernfalls können Sie es // nachfolgend hinzufügen. // Anmerkung: Falls Ihre Klasse in dieser Liste erscheint // und keine angepasste Serialisierung (z. B. eine // Implementierung der im Propagation Token Framework // beschriebenen Tokenschnittstelle) angewendet wird, // entserialisiert WebSphere Application Server das Java-Objekt // automatisch. Wenn die Klasse in der Liste gefunden wird, // können Sie an diese Stelle zurückkehren. if (tokenHolder.getName().startsWith("com.acme.CustomObject")) return true; } } // Wenn Sie an diesen Punkt gelangen, wurde Ihr angepasstes Objekt nicht weitergegeben. myCustomObject = new com.acme.CustomObject(); myCustomObject.put("mykey", "mydata"); } public boolean commit() throws LoginException { try { // Ordnet einer nicht veränderbaren Variablen eine Referenz zu, so dass die // Variable im doPrivileged-Block verwendet werden kann final com.acme.CustomObject myCustomObjectFinal = myCustomObject; // Verhindert, dass Ihre Anwendungen eine JAAS-Berechtigung // getPrivateCredential benötigen java.security.AccessController.doPrivileged(new java.security. PrivilegedExceptionAction() { public Object run() throws java.lang.Exception { // Versuchen Sie, kein Nullobjekt oder bereits vorhandenes // Objekt hinzuzufügen. if (myCustomObjectFinal != null && !subject.getPrivateCredentials(). contains(myCustomObjectFinal)) { // Dieser Aufruf erfordert eine spezielle Java 2-Sicherheitsberechtigung, // siehe JAAS-API-Dokumentation. subject.getPrivateCredentials().add(myCustomObjectFinal); } return null; } }); } catch (java.security.PrivilegedActionException e) { // Bettet die Ausnahme in eine WSLoginFailedException ein java.lang.Throwable myException = e.getException(); throw new WSLoginFailedException (myException.getMessage(), myException); } } // Variablen für das Anmeldemodul definieren com.acme.CustomObject myCustomObject = null; }
- Prüfen Sie, ob Ihre angepasste Java-Klasse die Schnittstelle "java.io.Serializable"
implementiert. Ein Objekt, das dem Subject hinzugefügt wird, muss serialisiert werden, wenn das Objekt weitergegeben werden soll.
Das Objekt muss beispielsweise
die Schnittstelle "java.io.Serializable" implementieren.
Wenn das Objekt nicht serialisiert wird, schlägt die Anforderung zwar nicht fehl, aber das Objekt wird nicht weitergegeben.
Stellen Sie sicher, dass ein zum Subject hinzugefügtes Objekt weitergegeben wird, indem Sie
eine der in Weitergabe von Sicherheitsattributen definierten Tokenschnittstellen implementieren oder
zu einer der folgenden Standardtokenimplementierungen Attribute hinzufügen:
- AuthorizationToken
- Fügen Sie benutzerspezifische Attribute hinzu. Weitere Informationen finden Sie unter Standardberechtigungstoken für die Weitergabe von Sicherheitsattributen verwenden.
- PropagationToken
- Fügen Sie Attribute hinzu, die für einen Aufruf spezifisch sind. Weitere Informationen finden Sie unter Standardweitergabetoken für die Weitergabe von Sicherheitsattributen verwenden.
Wenn Sie beim Hinzufügen angepasster Objekte sorgfältig vorgehen und sicherstellen, dass WebSphere Application Server das Objekt bei jedem Hop serialisieren und entserialisieren kann, reicht die Anwendung angepasster Java-Objekte aus.
- Prüfen Sie, ob Ihre angepasste Java-Klasse auf allen Systemen, die die Anforderung empfangen könnten,
vorhanden ist.
Wenn Sie ein angepasstes Objekt zum Subject hinzufügen und erwarten, dass WebSphere Application Server das Objekt weitergibt, stellen Sie die Klassendefinitionen zu einer JAR-Datei zusammen und fügen Sie die Datei auf allen Knoten, auf denen eine Serialisierung oder Entserialisierung stattfinden kann, zum Verzeichnis Stammverzeichnis_des_Anwendungsservers/lib/ext/ hinzu. Vergewissern Sie sich außerdem, dass die Java-Klassenversionen übereinstimmen.
Wenn Sie ein angepasstes Objekt zum Subject hinzufügen und erwarten, dass WebSphere Application Server das Objekt weitergibt, stellen Sie sicher, dass die Klassendefinition für das Objekt im Verzeichnis Profilstammverzeichnis/classes und auf allen Knoten, auf denen eine Serialisierung oder Entserialisierung stattfinden kann, enthalten ist. Vergewissern Sie sich außerdem, dass die Java-Klassenversionen übereinstimmen.
- Prüfen Sie, ob Ihre angepassten Anmeldemodule in allen Anmeldekonfigurationen definiert sind, die in der Umgebung verwendet werden, in der Sie Ihr angepasstes Objekt bei einer Anmeldung hinzufügen möchten. Jede mit WebSphere Application Server interagierende Anmeldekonfiguration generiert ein Subject, das für eine EJB-Anforderung nach außen weitergegeben werden kann. Falls WebSphere Application Server ein angepasstes Objekt in allen Fällen weitergeben soll, stellen Sie sicher, dass das angepasste Anmeldemodul zu jeder in der Umgebung verwendeten Anmeldekonfiguration hinzugefügt wurde. Weitere Informationen finden Sie im Artikel Angepasste Anmeldemodule für eine Systemanmeldekonfiguration für JAAS entwickeln.
- Prüfen Sie, ob die Weitergabe von Sicherheitsattributen auf allen nachgeschalteten Servern, die die weitergegebenen Informationen empfangen, aktiviert ist. Wenn eine EJB-Anforderung an einen nachgeschalteten Server gesendet wird und auf diesem Server die Weitergabe von Sicherheitsattributen inaktiviert ist, wird aus Gründen der Abwärtskompatibilität nur das Authentifizierungstoken gesendet. Überprüfen Sie daher in der Konfiguration, ob in allen Zellen, die Anforderungen empfangen könnten, die Weitergabe aktiviert ist. Es gibt mehrere Stellen in der Administrationskonsole, die zu überprüfen sind, um zu gewährleisten, dass die Weitergabe vollständig aktiviert ist. Weitere Informationen finden Sie unter Sicherheitsattribute an Anwendungsserver weitergeben.
- Fügen Sie alle angepassten Objekte, die nicht weitergegeben werden sollen, zur
Ausschlussliste hinzu. Sie können eine Eigenschaft konfigurieren, das Objekte mit bestimmten Klassennamen und/oder Paketnamen
von der Weitergabe ausschließt. Ihr eigenes Objekt könnte beispielsweise zu einem bestimmten Prozess gehören. Wenn das Objekt weitergegeben wird, enthält es keine
gültigen Informationen.
Sie müssen WebSphere Application Server anweisen, dieses Objekt nicht weiterzugeben. Gehen Sie wie folgt vor,
um das Objekt in der Administrationskonsole zur Ausschlussliste hinzuzufügen:
- Klicken Sie auf Sicherheit > Globale Sicherheit > Angepasste Eigenschaften > Neu.
- Fügen Sie zum Feld Name den Namen com.ibm.ws.security.propagationExcludeList hinzu.
- Fügen Sie zum Feld Wert den Namen des angepassten Objekts hinzu. In die Ausschlussliste können Sie mehrere angepasste Objekte aufnehmen. Geben Sie diese, getrennt durch einen Doppelpunkt (:),
an. Sie können beispielsweise com.acme.CustomLocalObject:com.acme.private.* eingeben.
Sie können auch einen Klassennamen wie com.acme.CustomLocalObject oder
einen Paketnamen wie com.acme.private.* eingeben. In diesem Beispiel gibt WebSphere Application Server keine Klassen weiter, die mit
com.acme.CustomLocalObject übereinstimmen oder mit com.acme.private beginnen.
Das Hinzufügen von angepassten Objekten zur Ausschlussliste hat einen Nebeneffekt. WebSphere Application Server speichert das nicht transparente Token oder den Inhalt des serialisierten Subject für die Lebensdauer des SSO-Token in einem lokalen Cache. Die Lebensdauer des SSO-Token, die standardmäßig bei zwei Stunden liegt, wird in der Administrationskonsole in den SSO-Eigenschaften konfiguriert. Die zum nicht transparenten Token hinzugefügten Informationen enthalten nur die Objekte, die nicht in der Ausschlussliste enthalten sind.
Vergewissern Sie sich, dass der Zeitlimitwert für das SSO-Token größer ist als der Zeitlimitwert für den Authentifizierungscache. Weitere Informationen zum Ändern des Authentifizierungscache finden Sie im Artikel zu den Einstellungen des Authentifizierungscache.
Ergebnisse


http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=tsec_propcustjavaser
Dateiname:tsec_propcustjavaser.html