Einen angepassten Interceptor für Trust-Associations entwickeln
Sie können die Interceptor-Klassenmethode definieren, die Sie verwenden möchten. WebSphere Application Server unterstützt zwei Trust-Association-Interceptor-Schnittstellen: com.ibm.wsspi.security.TrustAssociationInterceptor und com.ibm.wsspi.security.tai.TrustAssociationInterceptor.
Vorbereitende Schritte
Vorgehensweise
- Definieren Sie die Interceptor-Klassenmethode. WebSphere Application Server stellt die Interceptor-Java-Schnittstelle "com.ibm.wsspi.security.TrustAssociationInterceptor" bereit, das die folgenden Methoden definiert:
- public boolean isTargetInterceptor(HttpServletRequest req) creates WebTrustAssociationException;.
Mit der Methode isTargetInterceptor wird ermittelt, ob die Anforderung von dem mit dem Interceptor verbundenen Proxy-Server stammt. Der Implementierungscode muss das eingehende Anforderungsobjekt analysieren und feststellen, ob der Proxy-Server, von dem die Anforderung weitergeleitet wurde, für diesen Interceptor gültig ist. Das Ergebnis dieser Methode bestimmt, ob der Interceptor die Anforderung verarbeitet.
- public void validateEstablishedTrust (HttpServletRequest req) creates WebTrustAssociationException;.
Die Methode "validateEstablishedTrust" bestimmt, ob der Proxy-Server, von dem die Anforderung stammt, vertrauenswürdig ist. Diese Methode wird nach der Methode "isTargetInterceptor" aufgerufen. Der Implementierungscode muss den Proxy-Server authentifizieren. Das Authentifizierungsverfahren ist abhängig vom Proxy-Server. In der Produktimplementierung des WebSEAL-Servers ruft diese Methode beispielsweise die grundlegenden Authentifizierungsinformationen aus dem HTTP-Header ab und wertet diese Informationen anhand der von WebSphere Application Server verwendeten Benutzerregistry aus. Ist der Berechtigungsnachweis ungültig, löst der Code eine Ausnahme des Typs "WebTrustAssociationException" aus. Diese gibt an, dass der Proxy-Server nicht vertrauenswürdig ist und die Anforderung abgelehnt werden muss.
- public String getAuthenticatedUsername(HttpServletRequest req) creates WebTrustAssociationException;.
Die Methode "getAuthenticatedUsername" wird aufgerufen, wenn das Vertrauen zwischen dem Proxy-Server und WebSphere Application Server hergestellt wurde. Das Produkt hat die Proxy-Server-Authentifizierung der Anforderung akzeptiert und muss die Anforderung jetzt autorisieren. Zum Autorisieren der Anforderung muss der Name des ursprünglichen Anfordernden mithilfe einer Berechtigungsrichtlinie geprüft werden, um festzustellen, ob der Anfordernde die erforderlichen Berechtigungen besitzt. Der Implementierungscode für diese Methode muss den Benutzernamen aus dem Header der HTTP-Anforderung extrahieren und feststellen, ob dieser Benutzer berechtigt ist, auf die angeforderte Ressource zuzugreifen. In der Produktimplementierung für den WebSEAL-Server sucht die Methode beispielsweise nach einem Attribut iv-user im Header der HTTP-Anforderung und extrahiert die Benutzer-ID, die diesem Attribut zugeordnet, für die Berechtigung.
- public boolean isTargetInterceptor(HttpServletRequest req) creates WebTrustAssociationException;.
- Konfigurieren Sie den Interceptor. Damit ein Interceptor konfiguriert werden kann, muss der
Interceptor die Klasse "com.ibm.wsspi.security.WebSphereBaseTrustAssociationInterceptor" erweitern.
Implementieren Sie die folgenden Methoden:
- public int init (java.util.Properties props);
- Die Methode "init(Properties)" akzeptiert ein Objekt java.util.Properties, das die Gruppe von Eigenschaften enthält,
die für die Initialisierung des Interceptor erforderlich sind.
Alle für einen Interceptor (über den Link Angepasste Eigenschaften oder mit Scripting) definierten Attribute
werden an diese Methode gesendet.
Der Interceptor kann sich dann mit diesen
Eigenschaften selbst initialisieren. In der Produktimplementierung des
WebSEAL-Servers liest diese Methode beispielsweise die Hosts und Ports, so dass überprüft werden kann, ob eine eingehende Anforderung
von anerkannten Hosts und Ports stammt. Der Rückgabewert
0 impliziert, dass der Interceptor fehlerfrei initialisiert wurde. Alle anderen Werte bedeuten,
dass die Initialisierung nicht fehlerfrei verlaufen ist und dass der Interceptor ignoriert wird.
Anwendbarkeit der folgenden Liste
Gibt eine frühere Implementierung des Trust Association Interceptor einen anderen Fehlerstatus zurück, können Sie Ihre Implementierung an die Erwartungen anpassen oder eine der folgenden Änderungen vornehmen:- Fügen Sie die Eigenschaft com.ibm.wsspi.security.trustassociation.initStatus den angepassten Eigenschaften des Trust Association Interceptor hinzu. Setzen Sie die Eigenschaft auf den Wert, der die korrekte Initialisierung des Interceptors angibt. Alle anderen Werte deuten auf einen Fehler hin. Beim Auftreten eines Fehlers wird der entsprechende Trust Association Interceptor nicht verwendet.
- Fügen Sie die Eigenschaft com.ibm.wsspi.security.trustassociation.ignoreInitStatus den angepassten Eigenschaften des Trust Association Interceptor hinzu. Setzen Sie diese Eigenschaft auf true, um WebSphere Application Server anzuweisen, den Status dieser Methode zu ignorieren. Wenn Sie diese Eigenschaft den angepassten Eigenschaften hinzufügen, überprüft WebSphere Application Server nicht den zurückgegebenen Status. Dieses Verhalten ist mit dem früherer Versionen von WebSphere Application Server vergleichbar.
- public void cleanup ();
- Diese Methode wird aufgerufen, wenn der Anwendungsserver gestoppt wird. Sie wird verwendet, um die Beendigung des Interceptor vorzubereiten.
- public void setVersion (String s);
- Diese Methode ist optional. Sie wird verwendet, um die Version zu setzen, und ist nur zu Informationszwecken bestimmt. Der Standardwert ist Unspecified.
Sie müssen die folgenden Methoden konfigurieren, die von der angepassten Interceptor-Implementierung implementiert werden. Diese Liste zeigt nur die Methoden und keine Implementierungen.******************************************************************** import java.util.*; import javax.servlet.http.HttpServletRequest; import com.ibm.websphere.security.*; public class myTAIImpl extends WebSphereBaseTrustAssociationInterceptor implements TrustAssociationInterceptor { public myTAIImpl () { } public boolean isTargetInterceptor (HttpServletRequest req) throws WebTrustAssociationException { // true zurückgeben, wenn dies der Ziel-Interceptor ist, andernfalls false zurückgeben } public TAIResult negotiateValidateandEstablishTrust (HttpServletRequest req, HttpServletResponse res) throws WebTrustAssociationFailedException { // Anforderung validieren und Vertrauensstellung definieren. // TAIResult erstellen und zurückgeben public int initialize (Properties props) { // Implementierung initialisieren. Bei Erfolg 0 zurückgeben, // bei Misserfolg 1 zurückgeben. } public String getVersion() { //Version zurückgeben } public String getType() { //Typ zurückgeben } public void cleanup () { // Code bereinigen. } }
Anmerkung: Wenn die Methode "init(Properties)" wie zuvor beschrieben im angepassten Interceptor implementiert wird, gilt diese Anmerkung nicht für Ihre Implementierung, und Sie können mit dem nächsten Schritt fortfahren. Frühere Versionen von "com.ibm.wsspi.security.WebSphereBaseTrustAssociationInterceptor" enthalten die Methode "public int init (String propsfile)". Diese Methode ist nicht mehr erforderlich, weil die Interceptor-Eigenschaften nicht aus einer Datei gelesen werden. Die Eigenschaften werden jetzt über den Link Angepasste Eigenschaften für den Interceptor in der Administrationskonsole oder über Scripts angegeben. Anschließend werden die Eigenschaften Ihrer Implementierung in der Methode "init(Properties)" zur Verfügung gestellt. Für die Abwärtskompatibilität wird die Methode "init(String)" jedoch weiter unterstützt. Die Methode "init(String)" wird von der Standardimplementierung von "init(Properties)", wie im folgenden Beispiel gezeigt, aufgerufen.// Standardimplementierung der Methode init(Properties props). Sie sollte // mit einer angepassten Implementierung überschrieben werden. public int init (java.util.Properties props) { String type = props.getProperty("com.ibm.wsspi.security.trustassociation.types"); String classfile= props.getProperty("com.ibm.wsspi.security.trustassociation." +type+".config"); if (classfile != null && classfile.length() > 0 ) { return init(classfile); } else { return -1; } }
Ändern Sie Ihre Implementierung, und implementieren Sie die Methode "init(Properties)", anstatt die Methode "init(String propsfile)" zu verwenden. Wie im vorherigen Beispiel gezeigt, liest die Standardimplementierung die Eigenschaften, um die Eigenschaftendatei zu laden. Die Eigenschaft "com.ibm.wsspi.security.trustassociation.types" ruft die Datei ab, die die Eigenschaften enthält, indem .config an den Wert angefügt wird.
Anmerkung: Die Methode "init(String)" kann nach wie vor an Stelle der Implementierung der Methode "init(Properties)" verwendet werden. Sie müssen lediglich den Namen der Ihrer Datei mit den Trust-Association-Eigenschaften in der Administrationskonsole über den Link Angepasste Eigenschaften für den Interceptor oder per Script eingeben. Sie können die Eigenschaft auf eine der folgenden Arten hinzufügen. Die erste Methode wird für die Abwärtskompatibilität mit früheren Versionen von WebSphere Application Server verwendet.- Methode 1:
- Zum Abrufen des Dateinamens werden dieselben Eigenschaftsnamen wie
im vorherigen Release verwendet. Der Dateiname wird durch die Verknüpfung von .config mit dem Wert
der Eigenschaft "com.ibm.wsspi.security.trustassociation.types" erstellt.
Wenn die Datei den Namen myTAI.properties hat und im Verzeichnis Stammverzeichnis_des_Anwendungsservers/properties gespeichert ist, setzen Sie die folgenden Eigenschaften:
- com.ibm.wsspi.security.trustassociation.types = myTAItype
- com.ibm.wsspi.security.trustassociation.myTAItype.config = Stammverzeichnis_des_Anwendungsservers/properties/myTAI.properties
Wenn die Datei den Namen myTAI.properties hat und im Verzeichnis /properties gespeichert ist, setzen Sie die folgenden Eigenschaften:
- com.ibm.wsspi.security.trustassociation.types = myTAItype
- com.ibm.wsspi.security.trustassociation.myTAItype.config = Stammverzeichnis_des_Anwendungsservers/myTAI.properties
- Methode 2:
- Sie können die Eigenschaft com.ibm.wsspi.security.trustassociation.initPropsFile in den angepassten
Eigenschaften des Trust Association Interceptor auf die Position der Datei setzen. Beispiel:
com.ibm.wsspi.security.trustassociation.initPropsFile= Stammverzeichnis_des_Anwendungsservers/properties/myTAI.properties
com.ibm.wsspi.security.trustassociation.initPropsFile= Stammverzeichnis_des_Anwendungsservers/myTAI.properties
Geben Sie den vorherigen Code in einer zusammenhängenden Zeile ein.
Die Position der Eigenschaftendatei ist vollständig qualifiziert (z. B. Stammverzeichnis_des_Anwendungsservers/properties/myTAI.properties). Da die Position in einer Umgebung von WebSphere Application Server Network Deployment anders sein können, müssen Sie Variablen wie ${USER_INSTALL_ROOT} verwenden, um auf das Installationsverzeichnis von WebSphere Application Server zu verweisen. Wenn die Datei beispielsweise den Namen myTAI.properties hat und sich im Verzeichnis Stammverzeichnis_des_Anwendungsservers/properties befindet, setzen Sie die folgenden Eigenschaften:
Die Position der Eigenschaftendatei ist vollständig qualifiziert (z. B. Stammverzeichnis_des_Anwendungsservers/myTAI.properties). Da die Position in einer Umgebung von WebSphere Application Server Network Deployment anders sein können, müssen Sie Variablen wie ${USER_INSTALL_ROOT} verwenden, um auf das Installationsverzeichnis von WebSphere Application Server zu verweisen. Wenn die Datei beispielsweise den Namen myTAI.properties hat und im Verzeichnis /properties gespeichert ist, setzen Sie die folgenden Eigenschaften:
- com.ibm.wsspi.security.trustassociation.types = myTAItype
com.ibm.wsspi.security.trustassociation.myTAItype.config = c:/WebSphere/AppServer/properties/myTAI.properties
com.ibm.wsspi.security.trustassociation.myTAItype.config = Stammverzeichnis_des_Anwendungsservers/myTAI.properties
- Kompilieren Sie die Implementierung. Beispiel: Stammverzeichnis_des_Anwendungsservers/java/bin/javac
-classpath Installationsstammverzeichnis/plugins/com.ibm.ws.runtime.jar;<Installationsstammverzeichnis>/dev/JavaEE/j2ee.jar
myTAIImpl.java
Geben Sie die TAI-Klassendatei (Trust-Association-Interceptor) an, die beim Neustart des Servers verwendet werden soll. Speichern Sie die Datei entweder im Verzeichnis Stammverzeichnis_des_Anwendungsservers/classes, oder verwenden Sie die JVM-Systemeigenschaft -Dws.ext.dirs, um die Position der Datei anzugeben.
Kopieren Sie die Klassendateien Ihres Trust Association Interceptor in ein Verzeichnis im Klassenpfad des Produkts. Kopieren Sie diese Klassendateien in das Verzeichnis Profilstammverzeichnis/classes.
Sie müssen diese Klassendatei in das Verzeichnis Profilstammverzeichnis/classes jedes Knotens und jeder Zelle kopieren.
- Starten Sie alle Server erneut.
- Löschen Sie den WebSEAL-Standard-Interceptor in der Administrationskonsole, und klicken Sie auf Neu, um Ihren eigenen Interceptor hinzuzufügen. Vergewissern Sie sich, dass im Klassennamen Punkte als Trennzeichen verwendet werden und dass der Name im Klassenpfad enthalten ist.
- Klicken Sie auf den Link Angepasste Eigenschaften, um weitere Eigenschaften hinzuzufügen, die für die Initialisierung Ihres Interceptors erforderlich sind. Die Eigenschaften werden an die Methode "init(Properties)" Ihrer Implementierung übergeben, wenn diese die Klasse "com.ibm.wsspi.security.WebSphereBaseTrustAssociationInterceptor", wie im vorherigen Schritt beschrieben, erweitert.
- Speichern und synchronisieren Sie (sofern möglich) die Konfiguration.
- Starten Sie die Server erneut, damit Ihr Interceptor aktiviert wird.
Beispiel
Unterartikel
Unterstützung des Trust Association Interceptor für die Subjekterstellung
Der Trust Association Interceptor (TAI) "com.ibm.wsspi.security.tai.TrustAssociationInterceptor" unterstützt mehrere Features, die sich von der bestehenden Schnittstelle "com.ibm.websphere.security.TrustAssociationInterceptor" unterscheiden.


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