Öffentliche Sicherheits-APIs

Die öffentlichen Sicherheits-APIs im Liberty-Profil ermöglichen die Erweiterung der Sicherheitsinfrastruktur.

Liberty Profile enthält öffentliche APIs, die Sie zum Implementieren der Sicherheitsfunktionen verwenden können. Die öffentlichen Sicherheits-APIs in Liberty Profile sind eine Untergruppe der öffentlichen Sicherheits-APIs von vollständiges Profil. Die Hauptklassen sind WSSecurityHelper, WSSubject und RegistryHelper. Diese Klassen enthalten eine Untergruppe der Methoden, die in den Full Profile-Versionen verfügbar sind. Außerdem gibt es eine neue Klasse mit dem Namen WebSecurityHelper.

Diese Hauptklassen sind in den folgenden Abschnitten beschrieben. Darüber hinaus gibt es noch weitere Klassen wie UserRegistry und WSCredential sowie weitere Ausnahmeklassen.

Alle vom Liberty-Profil unterstützten öffentlichen Sicherheits-APIs sind in der Java™-API-Dokumentation beschrieben. Ausführliche Informationen zur Java-API-Dokumentation für die einzelnen APIs von Liberty Profile finden Sie im Information Center im Abschnitt Programmierschnittstellen (APIs). Die Java-API-Dokumentation ist außerdem als eigenständige .zip-Datei in einem der Javadoc-Unterverzeichnisse des Verzeichnisses ${wlp.install.dir}/dev verfügbar.

WSSecurityHelper
Diese Klasse enthält nur die Methoden isServerSecurityEnabled() und isGlobalSecurityEnabled(). Beide Methoden geben den Wert true zurück, wenn eines der folgenden Features in der Datei server.xml aktiviert ist:
  • appSecurity-2.0
  • zosSecurity-1.0
Andernfalls geben die Methoden den Wert false zurück. Diese Methoden werden aus Kompatibilitätsgründen aus der Klasse WSSecurityHelper des vollständigen Profils übernommen.
Anmerkung:
  • Da keine Zellen im Liberty-Profil vorhanden sind, wird im Liberty-Profil nicht zwischen globaler Sicherheit und Serversicherheit unterschieden. Beide Methoden geben den gleichen Wert zurück.
  • Die Methode revokeSSOCookies(javax.servlet.http.HttpServletRequest req,javax.servlet.http.HttpServletResponse res) wird im Liberty-Profil nicht unterstützt. Stattdessen können Sie die Abmeldefunktion von Servlet Version 3.0 verwenden.
  • Die Methode getLTPACookieFromSSOToken() wurde in die neue öffentliche API-Klasse WebSecurityHelper umbenannt.
WSSubject
Diese Klasse enthält Dienstprogrammmethoden für die Abfrage und das Festlegen des Sicherheitsthreadkontexts. Im Liberty-Profil werden alle Methoden des vollständigen Profils von vollständiges Profil WSSubject unterstützt.
Anmerkung: Die Java-2-Sicherheit wird im Liberty-Profil unterstützt, ist aber nicht standardmäßig aktiviert. Daher werden die Java-2-Sicherheitsprüfungen in WSSubject standardmäßig nicht ausgeführt.
RegistryHelper
Diese Klasse ermöglicht den Zugriff auf das UserRegistry-Objekt und auf Informationen zu anerkannten Realms. Im Liberty-Profil enthält diese Klasse das folgende Subset der Methoden des vollständigen Profils:
public static UserRegistry getUserRegistry(String realmName) throws WSSecurityException
public static List<String> getInboundTrustedRealms(String realmName) throws WSSecurityException
public static boolean isRealmInboundTrusted(String inboundRealm, String localRealm)
WebSecurityHelper
Diese Klasse enthält die umbenannte Methode getLTPACookieFromSSOToken(), die aus WSSecurityHelper verschoben wurde:
public static Cookie getLTPACookieFromSSOToken() throws Exception

Codebeispiele für die öffentliche Sicherheits-API

Die folgenden Beispiele veranschaulichen, wie die öffentlichen Sicherheits-APIs im Liberty-Profil für eine programmgestützte Anmeldung und die Bearbeitung des Subject-Objekts verwendet werden.
Beispiel 1: Subject-Objekt erstellen und für Berechtigung verwenden
Dieses Beispiel veranschaulicht, wie WSSecurityHelper, WSSubject und UserRegistry für eine programmgestützte Anmeldung verwendet werden, um ein Java-Subject-Objekt zu erstellen und dann eine Aktion mit diesem Subject-Objekt für jede erforderliche Berechtigung durchzuführen.
Anmerkung: Der folgende Code verwendet WSSecurityHelper, um zu prüfen, ob die Sicherheit aktiviert ist, bevor eine weitere Sicherheitsverarbeitung durchgeführt wird. Diese Prüfung wird wegen der modularen Struktur des Liberty-Profils häufig verwendet. Wenn die Sicherheit nicht aktiviert ist, wird die Sicherheitslaufzeit nicht geladen. WSSecurityHelper wird immer geladen, auch wenn die Sicherheit nicht aktiviert ist.
import java.rmi.RemoteException;
import java.security.PrivilegedAction;

import javax.security.auth.Subject;
import javax.security.auth.callback.CallbackHandler;
import javax.security.auth.login.LoginContext;
import javax.security.auth.login.LoginException;

import com.ibm.websphere.security.CustomRegistryException;
import com.ibm.websphere.security.UserRegistry;
import com.ibm.websphere.security.WSSecurityException;
import com.ibm.websphere.security.WSSecurityHelper;
import com.ibm.websphere.security.auth.WSSubject;
import com.ibm.websphere.security.auth.callback.WSCallbackHandlerImpl;
import com.ibm.wsspi.security.registry.RegistryHelper;
public class myServlet {

	...
	if (WSSecurityHelper.isServerSecurityEnabled()) {
				UserRegistry ur = null;
		try  {
						ur = RegistryHelper.getUserRegistry(null);
				} catch (WSSecurityException e1) {
						// Diagnosinformationen aufzeichnen
			return;
		}
				String userid = "user1";
				String password = "user1password";
		try  {
						if (ur.isValidUser(userid)) {
								// Subjekt erstellen, mit Benutzer-ID
								// und Kennwort authentifizieren
								CallbackHandler wscbh = new WSCallbackHandlerImpl(userid, password);
								LoginContext ctx;
								ctx = new LoginContext("WSLogin", wscbh);
						ctx.login();
								Subject subject = ctx.getSubject();
								// Aktion mit dem Subjekt ausführen,
								// das für erforderliche Berechtigungen verwendet wird
								WSSubject.doAs(subject, action);
			}
		} catch (CustomRegistryException e) {
						// Diagnosinformationen aufzeichnen
			return;
		} catch (RemoteException e) {
						// Diagnosinformationen aufzeichnen
			return;
				} catch (LoginException e) {
						// Diagnosinformationen aufzeichnen
			return;
		}
	}
	...
		private final PrivilegedAction action = new PrivilegedAction() {
		@Override
				public Object run() {
						// Etwas ausführen
			return null;
		}
	};

}
Beispiel 2: Subject-Objekt erstellen und als aktuelles Subject-Objekt im Thread festlegen
Das folgende Beispiel veranschaulicht, wie WSSecurityHelper und WSSubject für eine programmgestützte Anmeldung verwendet werden, um ein Java-Subjekt zu erstellen, das Subjekt als aktuelles Subjekt im Thread festzulegen und dann den Kontext des ursprünglichen Sicherheitsthreads wiederherzustellen.
Anmerkung: Der folgende Code verwendet WSSecurityHelper, um zu prüfen, ob die Sicherheit aktiviert ist, bevor eine weitere Sicherheitsverarbeitung durchgeführt wird.
import javax.security.auth.Subject;
import javax.security.auth.callback.CallbackHandler;
import javax.security.auth.login.LoginContext;
import javax.security.auth.login.LoginException;

import com.ibm.websphere.security.WSSecurityException;
import com.ibm.websphere.security.WSSecurityHelper;
import com.ibm.websphere.security.auth.WSSubject;
import com.ibm.websphere.security.auth.callback.WSCallbackHandlerImpl;
...
if (WSSecurityHelper.isServerSecurityEnabled()) {
		CallbackHandler wscbh = new WSCallbackHandlerImpl("user1", "user1password");
					LoginContext ctx;
	try  {
						// Subjekt erstellen, mit Benutzer-ID
						// und Kennwort authentifizieren
						ctx = new LoginContext("WSLogin", wscbh);
				ctx.login();
				Subject mySubject = ctx.getSubject();
				Subject oldSubject = null;
		try  {
						// Referenz auf das aktuelle Subjekt im Thread speichern
						oldSubject = WSSubject.getRunAsSubject();
						// mySubject zum aktuellen Subjekt im Thread festlegen
						WSSubject.setRunAsSubject(mySubject);
						// Ewas ausführen. Alle erforderlichen Berechtigungen
						// werden mit "mySubject" durchgeführt
				} catch (WSSecurityException e) {
						// Diagnosinformationen aufzeichnen
			return;
		} finally {
						// ursprüngliches Subjekt wieder in den Threadkontext zurückgeben
						if (oldSubject != null) {
				try  {
										WSSubject.setRunAsSubject(oldSubject);
						} catch (WSSecurityException e) {
								// Diagnosinformationen aufzeichnen
				}
			}
		}
			} catch (LoginException e) {
					// Diagnosinformationen aufzeichnen
		return;
	}
}
Beispiel 3: Informationen zum aktuellen Subject-Objekt im Thread abrufen
Das folgende Beispiel veranschaulicht, wie WSSecurityHelper, WSSubject und WSCredential verwendet werden, um Informationen zum aktuellen Subjekt im Thread abzurufen.
Anmerkung: Der folgende Code verwendet WSSecurityHelper, um zu prüfen, ob die Sicherheit aktiviert ist, bevor eine weitere Sicherheitsverarbeitung durchgeführt wird.
import java.util.ArrayList;
import java.util.Iterator;
import java.util.Set;

import javax.security.auth.Subject;
import javax.security.auth.login.CredentialExpiredException;

import com.ibm.websphere.security.WSSecurityException;
import com.ibm.websphere.security.WSSecurityHelper;
import com.ibm.websphere.security.auth.CredentialDestroyedException;
import com.ibm.websphere.security.auth.WSSubject;
import com.ibm.websphere.security.cred.WSCredential;
...
if (WSSecurityHelper.isServerSecurityEnabled()) {
		// Caller-Subjekt abrufen
		Subject callerSubject;
	try  {
				callerSubject = WSSubject.getCallerSubject();
			} catch (WSSecurityException e) {
					// Diagnosinformationen aufzeichnen
		return;
	}
		WSCredential wsCred = null;
		Set<WSCredential> wsCredentials =
				callerSubject.getPublicCredentials(WSCredential.class);
		Iterator<WSCredential> wsCredentialsIterator = wsCredentials.iterator();
		if (wsCredentialsIterator.hasNext()) {
				wsCred = wsCredentialsIterator.next();
		try  {
						// Gruppen drucken
						ArrayList<String> groups = wsCred.getGroupIds();
						for (String group : groups) {
								System.out.println("Group name: " + group);
			}
				} catch (CredentialExpiredException e) {
						// Diagnosinformationen aufzeichnen
			return;
				} catch (CredentialDestroyedException e) {
						// Diagnosinformationen aufzeichnen
			return;
		}
	}
}
}

Symbol das den Typ des Artikels anzeigt. Referenzartikel

Nutzungsbedingungen für Information Center | Feedback


Symbol für Zeitmarke Letzte Aktualisierung: 25.08.2015
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=phil&product=was-libcore-mp&topic=rwlp_sec_apis
Dateiname: rwlp_sec_apis.html